首页Python【Python计算生态】S...

【Python计算生态】SnowNLP——中文NLP库

Python受欢迎的原因之一就是其计算生态丰富,据不完全统计,Python 目前为止有约13万+的第三方库。

本系列将会陆续整理分享一些有趣、有用的第三方库。

文章配套代码获取有以下两种途径:
  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1FSGLd7aI_UQlCQuovVHc_Q?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/Python_Ecosystem





01
简介

SnowNLP是一个基于Python的中文自然语言处理(NLP)库,专注于中文文本的情感分析、分词、关键词提取、文本摘要等功能。它简单易用,适合处理中文文本的基础任务,尤其在情感分析场景中应用广泛。
SnowNLP简单易用,API设计直观,是一个相对简单的中文NLP库,适合入门和快速开发,但对于复杂任务,可能需要更强大的工具如jiebaNLTK等。
以下是SnowNLP提供的一些的主要功能:
  • 中文分词(Character-Based Generative Model);
  • 词性标注(TnT 3-gram 隐马);
  • 情感分析(内置情感分析模型,无需额外训练即可使用。但是模型基于电商评论数据,通用领域效果可能不佳);
  • 文本分类(Naive Bayes);
  • 转换成拼音(Trie树实现的最大匹配);
  • 繁体转简体(Trie树实现的最大匹配);
  • 提取文本关键词(TextRank算法);
  • 提取文本摘要(TextRank算法);
  • tf(词频,表示每个词在文档中出现的频率);
  • idf(逆文档频率,表示每个词在所有文档中的重要性);
  • Tokenization(分割成句子);
  • 文本相似(BM25算法)。
直接使用pip安装:
pip install snownlp

02
使用

SnowNLP适合快速实现中文文本的基础处理,但对于工业级应用需结合更专业的工具。以下是一些SnowNLP的使用示例:
  • 示例 1:分词+词性标注+情感分析+拼音转换
from snownlp import SnowNLP

text = "这个产品非常好,我很喜欢!"
# 创建 SnowNLP 对象
s = SnowNLP(text)

# 分词
print(s.words)
# 输出:['这个', '产品', '非常', '好', ',', '我', '很', '喜欢', '!']

# 词性标注
print(list(s.tags))
# 输出:[('这个', 'r'), ('产品', 'n'), ('非常', 'd'), ('好', 'a'), (',', 'w'), ('我', 'r'), ('很', 'd'), ('喜欢', 'v'), ('!', 'w')]

# 情感分析
print(s.sentiments)
# 输出:0.8846089797474971

# 拼音转换
print(s.pinyin)
# 繁简体转换
s = SnowNLP('我愛自然語言處理')
print(s.han)
# 输出:'我爱自然语言处理'


  • 示例 2:提取关键词+提取文本摘要+句子分割+拼音转换

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

# 提取前3个关键词
print(s.keywords(3))
# 输出:['语言', '自然', '计算机']

# 提取文本摘要
# 参数3表示提取前3句关键句
print(s.summary(3))
# 输出:['因而它是计算机科学的一部分', '自然语言处理是计算机科学领域与人工智能领域中的一个重要方向', '自然语言处理是一门融语言学、计算机科学、数学于一体的科学']

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


  • 示例 3:词频+逆文档频率+文本相似度

s = SnowNLP([['这篇''文章'],
             ['那篇''论文'],
             ['这个']])
# 词频
print(s.tf)
# 输出:[{'这篇': 1, '文章': 1}, {'那篇': 1, '论文': 1}, {'这个': 1}]

# 逆文档频率
print(s.idf)
# 输出:{'这篇': 0.5108256237659907, '文章': 0.5108256237659907, '那篇': 0.5108256237659907, '论文': 0.5108256237659907, '这个': 0.5108256237659907}

# 文本相似度计算
# 计算输入文本与对象s中每个文档的相似度
print(s.sim([u'文章']))
# 输出:[0.4686473612532025, 0, 0]


03
训练:

SnowNLP允许用户使用自己的数据进行模型(目前仅支持分词、词性标注、情感分析)训练。
以下是使用自定义数据训练 SnowNLP 模型的完整步骤:
  • 训练模型:
使用SnowNLP的对应模块进行模型训练。
# 分词
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')

训练完成后,会在当前目录下生成一个marshal文件,该文件包含了训练好的模型参数。

  • 替换默认模型:
为了使用自定义训练的模型,需要将生成的marshal文件替换SnowNLP默认的模型文件。默认模型文件通常位于Python环境的site-packages/snownlp/seg(tag或sentiment)文件夹中。

或者修改源代码中snownlp/seg(tag或sentiment)/__init__.py里的data_path指向刚训练好的文件。


更多内容可以前往GitHub查看:

https://github.com/

本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments