如何无需翻译为英文直接对印尼语文本使用sentiment polarity判定情感
印尼语推特直接情感分析实现方案
完全不需要先翻译为英文,直接基于印尼语本地词库+Sastrawi分词即可实现,具体方案如下:
1. 前置准备
首先安装所需依赖:
pip install Sastrawi
另外准备印尼语情感词表,你可以直接使用公开的印尼语情感词典(比如InSet词典),分别整理为两个纯文本文件:
kata_positif.txt:每行存储一个印尼语正面情感词kata_negatif.txt:每行存储一个印尼语负面情感词
2. 核心实现逻辑
替换你原有代码中TextBlob翻译+情感判定的部分即可,完整的修改后代码如下:
import re from Sastrawi.Stemmer.StemmerFactory import StemmerFactory from Sastrawi.StopWordRemover.StopWordRemoverFactory import StopWordRemoverFactory # 初始化印尼语词干提取器、停用词移除器 stemmer = StemmerFactory().create_stemmer() stopword_remover = StopWordRemoverFactory().create_stop_word_remover() # 加载情感词表 with open('kata_positif.txt', 'r', encoding='utf-8') as f: positif_words = set([line.strip() for line in f.readlines()]) with open('kata_negatif.txt', 'r', encoding='utf-8') as f: negatif_words = set([line.strip() for line in f.readlines()]) hasilAnalisis = [] for tweets in hasilUser: tweets_properties = {} tweets_properties['tanggal_tweet'] = tweets.created_at tweets_properties['pengguna'] = tweets.user.screen_name tweets_properties['isi_tweet'] = tweets.text # 原有文本清洗逻辑 tweets_full_cleansing = ' '.join(re.sub("(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)"," ",tweets.text).split()) # 新增印尼语文本预处理:去停用词+词干提取 tweets_clean = stopword_remover.remove(tweets_full_cleansing) tweets_stemmed = stemmer.stem(tweets_clean) word_list = tweets_stemmed.split() # 计算情感极性 count_pos = 0 count_neg = 0 for word in word_list: if word in positif_words: count_pos +=1 elif word in negatif_words: count_neg +=1 # 极性得分计算,分母加1避免除以0 polarity = (count_pos - count_neg) / (count_pos + count_neg + 1) # 情感判定 if polarity > 0: tweets_properties["sentimen"] = "positif" elif polarity == 0: tweets_properties["sentimen"] = "Netral" else: tweets_properties["sentimen"] = "Negatif" # 原有去重逻辑 if tweets.retweet_count > 0: if tweets_properties not in hasilAnalisis: hasilAnalisis.append(tweets_properties) else: hasilAnalisis.append(tweets_properties)
3. 方案优势
- 无需调用翻译接口,没有网络请求延迟,也不会因为翻译误差导致情感判定结果偏差
- 完全本地运行,不会触发翻译接口的频次限制
- 针对印尼语的特性做了词干提取和停用词过滤,判定准确率比翻译后再分析更高
内容的提问来源于stack exchange,提问作者user17067132
相关产品推荐
相关产品推荐

