美文网首页
Python分词,情感分析工具 SnowNLP

Python分词,情感分析工具 SnowNLP

作者: 鬼子口音 | 来源:发表于2020-01-07 16:25 被阅读0次

    Python:Python分词,情感分析工具 SnowNLP

    官方源码文档 GitHub:https://github.com/isnowfy/snownlp
    现在训练数据主要是针对电商服务类的评价,所以对其他的一些可能效果不是很好

    image

    安装

    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)
    
    

    测试得到的准确率分数是 90
    现在就可以用新的模型来进行预测分类了

    欢迎转载,但要声明出处,不然我顺着网线过去就是一拳。
    个人技术博客:http://www.gzky.live

    相关文章

      网友评论

          本文标题:Python分词,情感分析工具 SnowNLP

          本文链接:https://www.haomeiwen.com/subject/retdactx.html