1. jieba 分词
“结巴” 分词,GitHub 最受欢迎的分词工具,立志做最好的 Python 中文分词组件,支持多种分词模式,支持自定义词典
特点
支持三种分词模式:精确模式,试图将句子最精确地切开,适合文本分析;
全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
支持繁体分词支持自定义词典
MIT 授权协议
github star:26k
import jieba
strs=["我来到北京清华大学","乒乓球拍卖完了","中国科学技术大学"]
for str in strs:
seg_list = jieba.cut(str,use_paddle=True) # 使用paddle模式
print("Paddle Mode: " + '/'.join(list(seg_list)))
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("全模式: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("精确模式: " + "/ ".join(seg_list)) # 精确模式
seg_list = jieba.cut("他来到了网易杭研大厦") # 默认是精确模式
print("新词识别:", ",".join(seg_list))
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
print("搜索引擎模式:", ".join(seg_list))
输出:
【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
【精确模式】: 我/ 来到/ 北京/ 清华大学
【新词识别】:他, 来到, 了, 网易, 杭研, 大厦 (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)
【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造
项目地址:
https://github.com/fxsjy/jieba
2. pkuseg 分词
pkuseg 是北大语言计算与机器学习研究组开源的一款分词工具
它的特点是支持多领域分词,目前支持新闻领域,网络领域,医药领域,旅游领域,以及混合领域的分词预训练模型,用户可以自由地选择不同的模型
相比通用分词工具,它的分词准确率更高
主要亮点
pkuseg具有如下几个特点:多领域分词。不同于以往的通用中文分词工具,此工具包同时致力于为不同领域的数据提供个性化的预训练模型。根据待分词文本的领域特点,用户可以自由地选择不同的模型。 我们目前支持了新闻领域,网络领域,医药领域,旅游领域,以及混合领域的分词预训练模型。在使用中,如果用户明确待分词的领域,可加载对应的模型进行分词。如果用户无法确定具体领域,推荐使用在混合领域上训练的通用模型。各领域分词样例可参考 example.txt。
更高的分词准确率。相比于其他的分词工具包,当使用相同的训练数据和测试数据,pkuseg可以取得更高的分词准确率。
支持用户自训练模型。支持用户使用全新的标注数据进行训练。
支持词性标注。编译和安装
目前仅支持python3
github star:5.4k
2.1 安装
首先,我们需要通过pip
把pkuseg
安装到本地:
pip install pkuseg
一般来说,通过以上语句就能完成pkuseg
的安装了。不过考虑到目前这个工具库还在不断更新,未来可能会优化模型和专业领域,所以建议大家时不时用以下命令更新:
pip install -U pkuseg
2.2 基本分词
使用默认配置对文本进行分词操作。
import pkuseg
seg = pkuseg.pkuseg()
text = seg.cut('中国经济高速发展,成为世界第二大经济体。')
print(text)
使用默认配置,对上述语句进行分词,会得到以下结果:
['中国', '经济', '高速', '发展', ',', '成为', '世界', '第二', '大', '经济体', '。']
2.3 专业领域分词
当可以确定当前语句属于某个特定专业领域时,可以通过定义model_name
来实现专业分词;
我们用默认模型和专业领域模型对同一语句进行分词,看看得到的结果有什么不同:
import pkuseg
sent = '不含预处理的同基因外周血造血干细胞移植治疗重型再生障碍性贫血获得长期缓解一例'
seg1 = pkuseg.pkuseg()
text1 = seg1.cut(sent)
seg2 = pkuseg.pkuseg(model_name='medicine')
text2 = seg2.cut(sent)
print("默认模型得到的结果:", text1)
print("医药模型得到的结果", text2)
上述代码得到的结果时:
默认模型得到的结果: ['不', '含', '预', '处理', '的', '同', '基因', '外', '周血', '造血', '干细胞', '移植', '治疗', '重型', '再生', '障碍性', '贫血', '获得', '长期', '缓解', '一', '例']
医药模型得到的结果 ['不', '含', '预处理', '的', '同', '基因', '外周', '血', '造血干细胞', '移植', '治疗', '重型', '再生障碍性贫血', '获得', '长期', '缓解', '一', '例']
可以看到,用专业领域模型进行分词,得到的分词结果更有针对性,更准确。
2.4 词性标注
在实例化分词器的时候,可以通过定义参数postag
的值为True
,来开启词性标注的功能
import pkuseg
seg = pkuseg.pkuseg(postag=True)
text = seg.cut('中国经济高速发展,成为世界第二大经济体。')
print(text)
通过上述代码,会得到以下结果:
[('中国', 'ns'), ('经济', 'n'), ('高速', 'd'), ('发展', 'v'), (',', 'w'), ('成为', 'v'), ('世界', 'n'), ('第二', 'm'), ('大', 'a'), ('经济体', 'n'), ('。', 'w')]
2.5 添加自定义单词
pkuseg
这个工具库还可以十分便捷地在分词时添加自定义单词。方法如下: 首先,你需要有一个自定义的词典文档,每一行定义一个单词; 然后在user_dict
参数里定义你的自定义词典文档所在路径即可。
字典文档'pkuseg_dic.txt'内容如下:
高速发展
import pkuseg
seg = pkuseg.pkuseg(user_dict="pkuseg_dic.txt")
text = seg.cut('中国经济高速发展,成为世界第二大经济体。')
# ['中国', '经济', '高速发展', ',', '成为', '世界', '第二', '大', '经济体', '。']
项目地址:
https://github.com/lancopku/pkuseg-python
3. FoolNLTK 分词
基于 BiLSTM 模型训练而成,据说可能是最准的开源中文分词,同样支持用户自定义词典
GitHub star: 1.6k
代码示例
import fool
text = "一个傻子在北京"
print(fool.cut(text))
# ['一个', '傻子', '在', '北京']
项目地址:
https://github.com/rockyzhengwu/FoolNLTK
4. THULAC
THULAC 由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包
具有词性标注功能,能分析出某个词是名词还是动词或者形容词
官网:THULAC:一个高效的中文词法分析工具包
这个文档真的是这篇博文里面最难用的。
在线演示网址:THULAC:一个高效的中文词法分析工具包
安装方式:pip install thulac
(注意不支持Python3.8及以后的版本,毕竟会报这个错:AttributeError: module 'time' has no attribute 'clock'
)
github star:1.5k
代码示例
import thulac
thu1 = thulac.thulac() #默认模式
text = thu1.cut("我爱北京天安门", text=True) #进行一句话分词
print(text) # 我_r 爱_v 北京_ns 天安门_ns
代码示例2
thu1 = thulac.thulac(seg_only=True) #只进行分词,不进行词性标注
thu1.cut_f("input.txt", "output.txt") #对input.txt文件内容进行分词,输出到output.txt
项目地址:
https://github.com/thunlp/THULAC-Python