赞
踩
现在训练数据主要是针对电商服务类的评价,所以对其他的一些可能效果不是很好
pip install snownlp
- from snownlp import SnowNLP
- from snownlp import sentiment
-
- s=SnowNLP(u'这个东西真的很赞')
- print(s.words)
- print(s.sentiments)
-
- text = u'''
- 自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。
- 它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
- 自然语言处理是一门融语言学、计算机科学、数学于一体的科学。
- 因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,
- 所以它与语言学的研究有着密切的联系,但又有重要的区别。
- 自然语言处理并不是一般地研究自然语言,
- 而在于研制能有效地实现自然语言通信的计算机系统,
- 特别是其中的软件系统。因而它是计算机科学的一部分。
- '''
- s=SnowNLP(text) #不只是情感分析,训练出的snownlp模型还有提取关键字,摘要等功能
- print(s.sentiments)
- print(s.keywords(3))
- print(s.summary(3))
- from snownlp import SnowNLP
-
- l=["卧槽","牛逼","他妈的","打死你","优秀","哈哈哈哈哈啊哈","好评","信不信我弄死你啊","强强强强强强强强"]
-
- #保存情感极性值小于等于0.3的结果为负面情感结果
- f1=open('neg.txt','w',encoding='utf-8')
-
- #保存情感极性值大于0.3的结果为正面情感结果
- f2=open('pos.txt','w',encoding='utf-8')
-
- for j in l:
- s=SnowNLP(j)
- if s.sentiments <=0.4:
- f1.write(j+'\t'+str(s.sentiments)+'\n')
- else:
- f2.write(j + '\t' + str(s.sentiments) + '\n')
- f1.close()
- f2.close()
将全部词语分为 积极和消极 分别加入到 txt 文件中,小于 0.4 的为消极,否则为积极
结果以及所得分数:
- # neg.txt
- 他妈的 0.3124999999999998
- 打死你 0.3150105708245242
- 信不信我弄死你啊 0.07091943747997087
- # pos.txt
- 卧槽 0.5
- 牛逼 0.6923786120385603
- 优秀 0.8703703703703702
- 哈哈哈哈哈啊哈 0.8684210526315791
- 好评 0.44578313253012036
- 强强强强强强强强 0.421874597530976
中文分词(Character-Based Generative Model)
词性标注(TnT 3-gram 隐马)
情感挽回分析(现在训练数据主要是买卖东西时的评价,所以对其他的一些可能效果不是很好,待解决)
文本分类(Naive Bayes)
转换成拼音(Trie树实现的最大匹配)
繁体转简体(Trie树实现的最大匹配)
提取文本关键词(TextRank算法)
提取文本摘要(TextRank算法)
tf,idf
Tokenization(分割成句子)
文本相似(BM25)
包括分词,词性标注,情感分析
这里有一份待训练服务类评论的带有标签的文本文件(1为好评 0为差评)
开始分类训练
- from snownlp import sentiment
- import pandas as pd
-
- def train_model():
- data=pd.read_csv(r"./DataSet.csv",header=0)
- train=data.iloc[:40000,[1,2]]
- test=data.iloc[40000:,[1,2]]
- train_neg=train.iloc[:,1][train.label==0]
- train_pos=train.iloc[:,1][train.label==1]
- train_neg.to_csv(r"./neg.csv",index=0,header=0)
- train_pos.to_csv(r"./pos.csv",index=0,header=0)
- test.to_csv(r"./test.csv",index=0,columns=['label','review'])
- sentiment.train(r'./neg.csv',r'./pos.csv')
- sentiment.save(r'C:/ProgramData/Miniconda3/Lib/site-packages/snownlp/sentiment/sentiment.marshal')
-
- if __name__ == '__main__':
- train_model()
结果分别加入到 csv 文件中,然后进行模型训练,保存的路径是默认分词模块的路径,它会覆盖掉原来的 .marshal 模型文件
测试所得分数
- import pandas as pd
- from snownlp import SnowNLP
- from snownlp import sentiment
- import Train
-
- if __name__ == '__main__':
- test=pd.read_csv(r"./test.csv")
- review_list=[review for review in test['review']]
- label_list=[label for label in test['label']]
- list_test=[(label,review) for label,review in list(zip(label_list,review_list)) if type(review)!=float]
-
- for j in list_test:
- print(j[1],j[0],SnowNLP(j[1]).sentiments)
-
-
- senti=[SnowNLP(review).sentiments for label,review in list_test]
-
- newsenti=[]
- for i in senti: #预测结果为pos的概率,大于0.6我们认定为积极评价
- if(i>=0.6):
- newsenti.append(1)
- else:
- newsenti.append(0)
-
- counts=0
- for i in range(len(list_test)):
- if(newsenti[i]==list_test[i][0]):
- counts+=1
-
- accuracy=float(counts)/float(len(list_test))
- print("准确率为:%.2f" %accuracy)
测试得到的准确率分数是 0.9
现在就可以用新的模型来进行预测分类了
代码已上传至 Github 仓库
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。