基于正负情感词库的after_tokenize.xlsx文本情感标注实现咨询
完整实现代码
import pandas as pd import nltk # 1. 读取三个数据文件,替换为你本地的实际文件路径即可 df = pd.read_excel('after_tokenize.xlsx') pos = pd.read_excel('positive.xlsx') neg = pd.read_excel('negative.xlsx') # 注意:如果after_tokenize.xlsx中的data列已经是分词完成的列表格式,可删除下面这行分词代码 # 首次运行分词报错的话,先执行一次 nltk.download('punkt') 下载依赖包 df['data'] = df.apply(lambda row: nltk.word_tokenize(row['data']), axis=1) # 2. 把正负情感词转为集合,大幅提升匹配速度 pos_words = set(pos['positive'].str.strip()) neg_words = set(neg['negative'].str.strip()) # 3. 定义标注规则函数 def sentiment_label(word_list): pos_cnt = sum(1 for w in word_list if w in pos_words) neg_cnt = sum(1 for w in word_list if w in neg_words) if pos_cnt > neg_cnt: return 'positive' elif neg_cnt > pos_cnt: return 'negative' # 正负词数量相等的情况可自定义规则,比如返回neutral,此处默认留空可自行修改 else: return '' # 4. 批量标注生成label字段 df['label'] = df['data'].apply(sentiment_label) # 5. 导出标注完成的结果到Excel df.to_excel('labeled_after_tokenize.xlsx', index=False)
关键说明
- 正负情感词转用集合存储,是为了把单次匹配的时间复杂度从O(n)降到O(1),数据量大的时候性能提升非常明显
- 若你的
after_tokenize.xlsx里的data字段已经是分词后的列表结构,直接删除tokenize相关代码即可,避免重复分词出错 - 正负词数量相等的情况你可以根据自身需求修改
else分支的返回值,比如设置为neutral或者其他自定义标签
内容的提问来源于stack exchange,提问作者caeruleum
相关产品推荐
相关产品推荐

