这里记录 Python相关的值得分享的内容,每周五发布。由于微信不允许外部链接,点击阅读原文可访问文中的链接。
题图:中国“死海”-新疆盐湖,2019
在大学校园,总以为自己还有很多时间,不会的东西可以慢慢地学,对未来一点也不担心,于是能玩一会就玩一会。工作之后,才发现几乎没有自己的时间,不会的东西虽然可以学,但是要花费时间,而工作之后时间变得异常珍贵。于是,我不得不权衡取舍:哪些不会的我应该去学,哪些不会的,我没必要学?
作为职场中的你,又是如何选择的呢?是用到啥学啥,还是有所取舍?
我个人倾向于后者,因为我认为未来专业人才会更稀缺,人必须有一技之长才有立足之地。花费时间学习的东西,都应该为自己的优势所服务,因为强者恒强。当然,如果你觉得未来通才更有价值,那么可以均衡发展,用到什么就学什么。
在软件设计中,节省时间最好的方式,就是不要重复造轮子,自己写的程序,尽可能写的通用些,用类封装好,下次遇到类似情形可以直接拿来用,或稍加继承即可使用。如果自己没有请先去 github 上搜索一下,看看是否有人已经造好的轮子,就等你来用。
我们中文博大精深,但在程序处理时会往往遇到麻烦,怎么判断近义词,怎么分词,怎么做情感分析,怎么获取汉字的拼音,不要急于动手就去写代码,使用别人造好的轮子,节省人生中宝贵的时间,是非常明智的。本文分享 Python 中文相关的几个轮子,请按需使用。
最好的中文近义词工具包 https://github.com/huyingxi/Synonyms,可以用于自然语言理解的很多任务:文本对齐,推荐算法,相似度计算,语义偏移,关键字提取,概念提取,自动摘要,搜索引擎等。
安装方法:
pip install -U synonyms
兼容 py2 和 py3,当前稳定版本 v3.x。
使用效果如下:
另外,Node.js 用户可以使用 node-synonyms 了 。
最好的中文分词工具包: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算法识别出来了)
【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日
github 链接:https://github.com/isnowfy/snownlp
SnowNLP 是一个 python 写的类库,可以方便的处理中文文本内容,是受到了 TextBlob 的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和 TextBlob 不同的是,这里没有用 NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。注意本程序都是处理的 unicode 编码,所以使用时请自行decode成unicode。
特性
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]
安装
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/ 。
这里功能强大的库多到你怀疑人生:轮子多到按需分配,完全不用花钱。
github 链接:https://github.com/jobbole/awesome-python-cn
这个项目也是我在 github 上第一次做 pull request 的项目,特分享出来纪念一下。
(完)
专注于Python技术分享
欢迎订阅、在看、转发