Python 处理中文的 4 个轮子

本文介绍了Python中处理中文的几个关键工具,包括Synonyms(近义词工具包)、jieba(中文分词工具)、SnowNLP(中文文本处理库)和汉字拼音转换工具。这些库可以帮助开发者在自然语言处理任务中节省时间,提升效率。

这里记录 Python相关的值得分享的内容,每周五发布。由于微信不允许外部链接,点击阅读原文可访问文中的链接。

640?wx_fmt=jpeg题图:中国“死海”-新疆盐湖,2019

在大学校园,总以为自己还有很多时间,不会的东西可以慢慢地学,对未来一点也不担心,于是能玩一会就玩一会。工作之后,才发现几乎没有自己的时间,不会的东西虽然可以学,但是要花费时间,而工作之后时间变得异常珍贵。于是,我不得不权衡取舍:哪些不会的我应该去学,哪些不会的,我没必要学?

作为职场中的你,又是如何选择的呢?是用到啥学啥,还是有所取舍?

我个人倾向于后者,因为我认为未来专业人才会更稀缺,人必须有一技之长才有立足之地。花费时间学习的东西,都应该为自己的优势所服务,因为强者恒强。当然,如果你觉得未来通才更有价值,那么可以均衡发展,用到什么就学什么。

在软件设计中,节省时间最好的方式,就是不要重复造轮子,自己写的程序,尽可能写的通用些,用类封装好,下次遇到类似情形可以直接拿来用,或稍加继承即可使用。如果自己没有请先去 github 上搜索一下,看看是否有人已经造好的轮子,就等你来用。

我们中文博大精深,但在程序处理时会往往遇到麻烦,怎么判断近义词,怎么分词,怎么做情感分析,怎么获取汉字的拼音,不要急于动手就去写代码,使用别人造好的轮子,节省人生中宝贵的时间,是非常明智的。本文分享 Python 中文相关的几个轮子,请按需使用。

1、近义词工具包 Synonyms。

最好的中文近义词工具包 https://github.com/huyingxi/Synonyms,可以用于自然语言理解的很多任务:文本对齐,推荐算法,相似度计算,语义偏移,关键字提取,概念提取,自动摘要,搜索引擎等。

安装方法:

pip install -U synonyms

兼容 py2 和 py3,当前稳定版本 v3.x。

使用效果如下:

640?wx_fmt=gif

另外,Node.js 用户可以使用 node-synonyms 了

2、中文分词工具 jieba。

最好的中文分词工具包:https://github.com/fxsjy/jieba

pip install jieba

支持三种分词模式:

  • 精确模式,试图将句子最精确地切开,适合文本分析;

  • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;

  • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。支持繁体分词,支持自定义词典

代码示例

# encoding=utf-8
import jieba

seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list))  # 全模式

seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list))  # 精确模式

seg_list = jieba.cut("他来到了网易杭研大厦")  # 默认是精确模式
print(", ".join(seg_list))

seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造")  # 搜索引擎模式
print(", ".join(seg_list))

输出:

【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学

【精确模式】: 我/ 来到/ 北京/ 清华大学

【新词识别】:他, 来到, 了, 网易, 杭研, 大厦    (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)

【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日
3、中文处理工具 SnowNLP。

github 链接:https://github.com/isnowfy/snownlp

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

特性

  • 中文分词(Character-Based Generative Model)

  • 词性标注(TnT 3-gram 隐马)

  • 情感分析(现在训练数据主要是买卖东西时的评价,所以对其他的一些可能效果不是很好,待解决)

  • 文本分类(Naive Bayes)

  • 转换成拼音(Trie树实现的最大匹配)

  • 繁体转简体(Trie树实现的最大匹配)

  • 提取文本关键词(TextRank算法)

  • 提取文本摘要(TextRank算法)

  • tf,idf

  • Tokenization(分割成句子)

  • 文本相似(BM25)

  • 支持python3

from snownlp import SnowNLP

s = SnowNLP(u'这个东西真心很赞')

s.words         # [u'这个', u'东西', u'真心',
                #  u'很', u'赞']

s.tags          # [(u'这个', u'r'), (u'东西', u'n'),
                #  (u'真心', u'd'), (u'很', u'd'),
                #  (u'赞', u'Vg')]

s.sentiments    # 0.9769663402895832 positive的概率

s.pinyin        # [u'zhe', u'ge', u'dong', u'xi',
                #  u'zhen', u'xin', u'hen', u'zan']

s = SnowNLP(u'「繁體字」「繁體中文」的叫法在臺灣亦很常見。')

s.han           # u'「繁体字」「繁体中文」的叫法
                # 在台湾亦很常见。'

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

s = SnowNLP(text)

s.keywords(3)    # [u'语言', u'自然', u'计算机']

s.summary(3)    # [u'因而它是计算机科学的一部分',
                #  u'自然语言处理是一门融语言学、计算机科学、
                #    数学于一体的科学',
                #  u'自然语言处理是计算机科学领域与人工智能
                #    领域中的一个重要方向']
s.sentences

s = SnowNLP([[u'这篇', u'文章'],
             [u'那篇', u'论文'],
             [u'这个']])
s.tf
s.idf
s.sim([u'文章'])# [0.3756070762985226, 0, 0]
4、汉字拼音转换工具 。

安装

pip install pypinyin

特性

  • 根据词组智能匹配最正确的拼音。

  • 支持多音字。

  • 简单的繁体支持, 注音支持。

  • 支持多种不同拼音/注音风格。

>>> from pypinyin import pinyin, lazy_pinyin, Style
>>> pinyin('中心')
[['zhōng'], ['xīn']]
>>> pinyin('中心', heteronym=True)  # 启用多音字模式
[['zhōng', 'zhòng'], ['xīn']]
>>> pinyin('中心', style=Style.FIRST_LETTER)  # 设置拼音风格
[['z'], ['x']]
>>> pinyin('中心', style=Style.TONE2, heteronym=True)
[['zho1ng', 'zho4ng'], ['xi1n']]
>>> pinyin('中心', style=Style.BOPOMOFO)  # 注音风格
[['ㄓㄨㄥ'], ['ㄒㄧㄣ']]
>>> pinyin('中心', style=Style.CYRILLIC)  # 俄语字母风格
[['чжун1'], ['синь1']]
>>> lazy_pinyin('中心')  # 不考虑多音字的情况
['zhong', 'xin']

注意事项

  • 拼音结果不会标明哪个韵母是轻声,轻声的韵母没有声调或数字标识。

  • 无声调相关拼音风格下的结果会使用 v 表示 ü

命令行工具:

$ pypinyin 音乐
yīn yuè
$ pypinyin -h

详细文档请访问:http://pypinyin.rtfd.io/ 。

5、其他 Python 常用的库。

这里功能强大的库多到你怀疑人生:轮子多到按需分配,完全不用花钱。

github 链接:https://github.com/jobbole/awesome-python-cn

这个项目也是我在 github 上第一次做 pull request 的项目,特分享出来纪念一下。

(完)

专注于Python技术分享

欢迎订阅、在看、转发

640?wx_fmt=jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值