SnowNLP自然语言处理模块具体用法

简单介绍(摘自作者自述)

SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。注意本程序都是处理的unicode编码,所以使用时请自行decode成unicode。


安装方法

pip install snownlp

具体实现功能

中文分词(Character-Based Generative Model)
词性标注(TnT 3-gram 隐马)
情感分析(现在训练数据主要是买卖东西时的评价,所以对其他的一些可能效果不是很好,待解决)
文本分类(Naive Bayes)
转换成拼音(Trie树实现的最大匹配)
繁体转简体(Trie树实现的最大匹配)
提取文本关键词(TextRank算法)
提取文本摘要(TextRank算法)
tf,idf(词频、逆文档频率)
Tokenization(分割成句子)
文本相似(BM25)
支持python3(感谢erning)


实现代码

# 导入SnowNLP库
from snownlp import SnowNLP


if __name__ == '__main__':
    # ---------------------------------------------------------------------
    text = '你站在桥上看风景,看风景的人在楼上看你。明月装饰了你的窗子,你装饰了别人的梦'
    s1 = SnowNLP(text)
    # 分词
    print(s1.words) # ['你', '站', '在', '桥', '上', '看', '风景' ... ]
    # 分句
    print(s1.sentences) # ['你站在桥上看风景', '看风景的人在楼上看你', '明月装饰了你的窗子', '你装饰了别人的梦']
    # 词性标注
    print([w for w in s1.tags]) # [('你', 'r'), ('站', 'v'), ('在', 'p'), ('桥', 'n') ... ]
    # 正负情感分析
    print(s1.sentiments) # 0.9918719387674594
    # 拼音
    print(s1.pinyin) # ['ni', 'zhan', 'zai', 'qiao', 'shang', 'kan', 'feng' ... ]
    # -----------------------------------------------------------------------

    #  -------------------------------------------------
    s2 = SnowNLP(u'「繁體字」「繁體中文」的叫法在臺灣亦很常見。')
    # 繁体字转简体字
    print(s2.han) # 「繁体字」「繁体中文」的叫法在台湾亦很常见。
    # ---------------------------------------------------

    # ----------------------------------------------------
    text = u'''
    自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。
    它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
    自然语言处理是一门融语言学、计算机科学、数学于一体的科学。
    因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,
    所以它与语言学的研究有着密切的联系,但又有重要的区别。
    自然语言处理并不是一般地研究自然语言,
    而在于研制能有效地实现自然语言通信的计算机系统,
    特别是其中的软件系统。因而它是计算机科学的一部分。
    '''
    s3 = SnowNLP(text)
    # 关键词
    print(s3.keywords(3)) # ['语言', '自然', '计算机']
    # 摘要
    print(s3.summary(3)) # ['因而它是计算机科学的一部分', '自然语言处理是计算机科学领域与人工智能领域中的一个重要方向' ... ]
    # ----------------------------------------------------

    # -----------------------------------------------------------
    s = SnowNLP([[u'这篇', u'文章'], [u'那篇', u'论文'], [u'这个']])
    # 词频
    print(s.tf) # [{'这篇': 1, '文章': 1}, {'那篇': 1, '论文': 1}, {'这个': 1}]
    # 逆文档频率
    print(s.idf) # {'这篇': 0.5108256237659907, '文章': 0.5108256237659907 ... }
    # 文本相似度
    print(s.sim([u'文章'])) # [0.4686473612532025, 0, 0]
    # -----------------------------------------------------------

训练自己的权重

现在提供训练的包括分词,词性标注,情感分析,以分词训练为例 分词的 data.txt 内容类似这样:
SnowNLP自然语言处理模块具体用法_第1张图片

from snownlp import seg
seg.train('data.txt')
seg.save('seg.marshal')
# from snownlp import tag
# tag.train('199801.txt')
# tag.save('tag.marshal')
# from snownlp import sentiment
# sentiment.train('neg.txt', 'pos.txt')
# sentiment.save('sentiment.marshal')

这样训练好的文件就存储为seg.marshal了,之后修改snownlp/seg/init.py里的data_path指向刚训练好的文件即可,训练数据需要自己做标注,这一步需要花费大量的时间


作者:isnowfy
项目: gitee地址 github地址

你可能感兴趣的:(机器学习,python,自然语言处理,机器学习)