函数的两个参数file和dictionary分别为已经分词并去停用词的文档和目标情感极性词典(本例中为消极情感词典)
#判断文档中的词语有多少在情感词典中,并计数
def count_words(file,dictionary):
count = 0
for word in file:
if word in dictionary:
count+=1
return count
exa为示例example,首先调用分词并去停用词函数返回文档词语列表,然后调用读取情感词典函数,读取情感词典,最后调用计数函数进行计数,本例运行结果为2。
exa = "审议通过《公司全资子公司南京国旅 联合汤山温泉开发有限公司转让南京国旅联合旅业管理有限公司股权》的议案。 同意公司全资子公司南京国旅联合汤山温泉开发有限公司转让南京国旅联 合旅业管理有限公司的全部股权给南京汤山建设投资发展有限公司,南京汤山建 设投资发展有限公司为此支付2,713.43 万元(其中股权交易对价649.5 万元, 其余2,063.93 万元用于处置旅业公司截止当前的债权、债务),本次股权转让扣 除公司注册资本100 万元后收益为549.50 万元。 本次股权转让不构成关联交易。 "
exa_list = seg_word(exa)
negative_list = read_dic("negative")
print(count_words(exa_list,negative_list))
下面附上使用的两个函数代码:
#对文档分词后去除停用词
def seg_word(sentence):
"""使用jieba对文档分词"""
seg_list = jieba.cut(sentence)
# 读取停用词文件
stopword_list = [k.strip() for k in open('stopwords.txt', encoding='utf8').readlines() if k.strip() != '']
# 去除停用词
return list(filter(lambda x: x not in stopword_list, seg_list))
#读取情感词典到列表中的函数
def read_dic(dic_type):
with open(dic_type+'_extended.txt',encoding="utf-8") as f:
positive_extended = f.readlines()
temp=[]
for row in positive_extended:
temp.append(row.split())
pos_dic = []
for row in temp:
for column in row:
pos_dic.append(column)
return pos_dic
下文是词典法整体过程:
写在前面:文档指的是一条记录,占一行。
下文是对情感法进行简单情感分析的过程博客,并不涉及对词语的加权、对程度副词加权和对否定词取反的操作,仅仅对词典中的词语进行计数。
输入:待计数文档,已有的六个情感词典。
输出:对六个词典中出现的词语进行计数得到的六列数据。
顺序见下:
分词并去停用词返回嵌套列表并保存到本地
https://blog.csdn.net/weixin_43919570/article/details/104316316
从母词及其扩充的情感词典txt文件读取到列表list中
https://blog.csdn.net/weixin_43919570/article/details/104311270
判断文档中的词语有多少在情感词典中并计数
https://blog.csdn.net/weixin_43919570/article/details/104312714
批量输出情感词计数结果到列表中
https://blog.csdn.net/weixin_43919570/article/details/104315090
其实4是对3加了一个循环得到的,应该将3和4看成一体,作用是输出计数列表。
词典法情感分析数词操作并输出结果到csv文件中
https://blog.csdn.net/weixin_43919570/article/details/104316043
第5篇文章是对以上四篇文章的汇总使用。