两种中文分词库的安装与使用

两种中文分词库的安装与使用

jieba(结巴)

专用于分词的 Python 库,GitHub:https://github.com/fxsjy/jieba,分词效果较好。

支持三种分词模式:

  • 精确模式,试图将句子最精确地切开,适合文本分析。
  • 全模式,将句子中所有的可能成词的词语都扫描出来,速度非常快,但是不能解决歧义。
  • 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适用于搜索引擎分词。

另外 jieba 支持繁体分词,支持自定义词典。

其使用的算法是基于统计的分词方法,主要有如下几种:

  • 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
  • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
  • 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法

精确模式分词

首先我们来看下精确模式分词,使用 lcut() 方法,类似 cut() 方法,其参数和 cut() 是一致的,只不过返回结果是列表而不是生成器,默认使用精确模式,代码如下:

1
2
3
4
import jieba
string = '这个把手该换了,我不喜欢日本和服,别把手放在我的肩膀上,工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作'
result = jieba.lcut(string)
print(len(result), '/'.join(result))

结果:

1
38 这个/把手/该换/了/,/我/不/喜欢/日本/和服/,/别/把手/放在/我/的/肩膀/上/,/工信处/女干事/每月/经过/下属/科室/都/要/亲口/交代/24/口/交换机/等/技术性/器件/的/安装/工作

可见分词效果还是不错的。

全模式分词

使用全模式分词需要添加 cut_all 参数,将其设置为 True,代码如下:

1
2
result = jieba.lcut(string, cut_all=True)
print(len(result), '/'.join(result))

结果如下:

1
51 这个/把手/该换/了///我/不/喜欢/日本/和服///别/把手/放在/我/的/肩膀/上///工信处/处女/女干事/干事/每月/月经/经过/下属/科室/都/要/亲口/口交/交代/24/口交/交换/交换机/换机/等/技术/技术性/性器/器件/的/安装/安装工/装工/工作

搜索引擎模式分词

使用搜索引擎模式分词需要调用 cutforsearch() 方法,代码如下:

1
2
result = jieba.lcut_for_search(string)
print(len(result), '/'.join(result))

结果如下:

1
42 这个/把手/该换/了/,/我/不/喜欢/日本/和服/,/别/把手/放在/我/的/肩膀/上/,/工信处/干事/女干事/每月/经过/下属/科室/都/要/亲口/交代/24/口/交换/换机/交换机/等/技术/技术性/器件/的/安装/工作

另外可以加入自定义词典,如我们想把 日本和服 作为一个整体,可以把它添加到词典中,代码如下:

1
2
3
jieba.add_word('日本和服')
result = jieba.lcut(string)
print(len(result), '/'.join(result))

结果如下:

1
37 这个/把手/该换/了/,/我/不/喜欢/日本和服/,/别/把手/放在/我/的/肩膀/上/,/工信处/女干事/每月/经过/下属/科室/都/要/亲口/交代/24/口/交换机/等/技术性/器件/的/安装/工作

可以看到切分结果中,日本和服 四个字就作为一个整体出现在结果中了,分词数量比精确模式少了一个。

词性标注

另外 jieba 还支持词性标注,可以输出分词后每个词的词性,实例如下:

1
2
words = pseg.lcut(string)
print(list(map(lambda x: list(x), words)))

运行结果:

1
[['这个', 'r'], ['把手', 'v'], ['该', 'r'], ['换', 'v'], ['了', 'ul'], [',', 'x'], ['我', 'r'], ['不', 'd'], ['喜欢', 'v'], ['日本和服', 'x'], [',', 'x'], ['别', 'r'], ['把手', 'v'], ['放在', 'v'], ['我', 'r'], ['的', 'uj'], ['肩膀', 'n'], ['上', 'f'], [',', 'x'], ['工信处', 'n'], ['女干事', 'n'], ['每月', 'r'], ['经过', 'p'], ['下属', 'v'], ['科室', 'n'], ['都', 'd'], ['要', 'v'], ['亲口', 'n'], ['交代', 'n'], ['24', 'm'], ['口', 'n'], ['交换机', 'n'], ['等', 'u'], ['技术性', 'n'], ['器件', 'n'], ['的', 'uj'], ['安装', 'v'], ['工作', 'vn']]

词性标记

词的分类

  • 实词:名词、动词、形容词、状态词、区别词、数词、量词、代词
  • 虚词:副词、介词、连词、助词、拟声词、叹词。

ICTPOS3.0词性标记集

n 名词
    nr 人名
        nr1 汉语姓氏
        nr2 汉语名字
        nrj 日语人名
        nrf 音译人名
    ns 地名
     nsf 音译地名
    nt 机构团体名
    nz 其它专名
    nl 名词性惯用语
    ng 名词性语素

t 时间词
  tg 时间词性语素

s 处所词

f 方位词

v 动词
    vd 副动词
    vn 名动词
    vshi 动词“是”
    vyou 动词“有”
    vf 趋向动词
    vx 形式动词
    vi 不及物动词(内动词)
    vl 动词性惯用语
    vg 动词性语素
a 形容词
    ad 副形词
    an 名形词
    ag 形容词性语素
    al 形容词性惯用语
b 区别词
    bl 区别词性惯用语
z 状态词
r 代词
    rr 人称代词
    rz 指示代词
        rzt 时间指示代词
        rzs 处所指示代词
        rzv 谓词性指示代词
    ry 疑问代词
        ryt 时间疑问代词
        rys 处所疑问代词
        ryv 谓词性疑问代词
    rg 代词性语素
m 数词
    mq 数量词
q 量词
    qv 动量词
    qt 时量词

虚词

d 副词
p 介词
    pba 介词“把”
    pbei 介词“被”
c 连词
    cc 并列连词
u 助词
    uzhe 着
    ule 了 喽
    uguo 过
    ude1 的 底
    ude2 地
    ude3 得
    usuo 所
    udeng 等 等等 云云
    uyy 一样 一般 似的 般
    udh 的话
    uls 来讲 来说 而言 说来

    uzhi 之
    ulian 连 (“连小学生都会”)

e 叹词
y 语气词(delete yg)
o 拟声词
h 前缀
k 后缀
x 字符串
    xx 非语素字
    xu 网址URL
w 标点符号
    wkz 左括号,全角:( 〔  [  {  《 【  〖 〈   半角:( [ { <
    wky 右括号,全角:) 〕  ] } 》  】 〗 〉 半角: ) ] { >
    wyz 左引号,全角:“ ‘ 『
    wyy 右引号,全角:” ’ 』
    wj 句号,全角:。
    ww 问号,全角:? 半角:?
    wt 叹号,全角:! 半角:!
    wd 逗号,全角:, 半角:,
    wf 分号,全角:; 半角: ;
    wn 顿号,全角:、
    wm 冒号,全角:: 半角: :
    ws 省略号,全角:……  …
    wp 破折号,全角:——   --   ——-   半角:---  ----
    wb 百分号千分号,全角:% ‰   半角:%
    wh 单位符号,全角:¥ $ £  °  ℃  半角:$

ICTCLAS 汉语词性标注集

代码名称帮助记忆的诠释
Ag形语素形容词性语素。形容词代码为a,语素代码g前面置以A。
a形容词取英语形容词adjective的第1个字母。
ad副形词直接作状语的形容词。形容词代码a和副词代码d并在一起。
an名形词具有名词功能的形容词。形容词代码a和名词代码n并在一起。
b区别词取汉字“别”的声母。
c连词取英语连词conjunction的第1个字母。
Dg副语素副词性语素。副词代码为d,语素代码g前面置以D。
d副词取adverb的第2个字母,因其第1个字母已用于形容词。
e叹词取英语叹词exclamation的第1个字母。
f方位词取汉字“方” 的声母。
g语素绝大多数语素都能作为合成词的“词根”,取汉字“根”的声母。
h前接成分取英语head的第1个字母。
i成语取英语成语idiom的第1个字母。
j简称略语取汉字“简”的声母。
k后接成分
l习用语习用语尚未成为成语,有点“临时性”,取“临”的声母。
m数词取英语numeral的第3个字母,n,u已有他用。
Ng名语素名词性语素。名词代码为n,语素代码g前面置以N。
n名词取英语名词noun的第1个字母。
nr人名名词代码n和“人(ren)”的声母并在一起。
ns地名名词代码n和处所词代码s并在一起。
nt机构团体“团”的声母为t,名词代码n和t并在一起。
nz其他专名“专”的声母的第1个字母为z,名词代码n和z并在一起。
o拟声词取英语拟声词onomatopoeia的第1个字母。
p介词取英语介词prepositional的第1个字母。
q量词取英语quantity的第1个字母。
r代词取英语代词pronoun的第2个字母,因p已用于介词。
s处所词取英语space的第1个字母。
Tg时语素时间词性语素。时间词代码为t,在语素的代码g前面置以T。
t时间词取英语time的第1个字母。
u助词取英语助词auxiliary 的第2个字母,因a已用于形容词。
Vg动语素动词性语素。动词代码为v。在语素的代码g前面置以V。
v动词取英语动词verb的第一个字母。
vd副动词直接作状语的动词。动词和副词的代码并在一起。
vn名动词指具有名词功能的动词。动词和名词的代码并在一起。
w标点符号
x非语素字非语素字只是一个符号,字母x通常用于代表未知数、符号。
y语气词取汉字“语”的声母。
z状态词取汉字“状”的声母的前一个字母。

jieba 字典中出现的类型

a
    ad
    ag
    an
b
c
d
    df
    dg
e
f
g
h
i
j
k
l
m
    mg
    mq
n
    ng
    nr
    nrfg
    nrt
    ns
    nt
    nz
o
p
q
r
    rg
    rr
    rz
s
t
    tg
u
    ud
    ug
    uj
    ul
    uv
    uz
v
    vd
    vg
    vi
    vn
    vq
x
y
z
    zg

simhash 过滤的掉的词汇

c
e
h
k
o
p
u
    ud
    ug
    uj
    ul
    uv
    uz
x
y

HanLP

1
pip install pyhanlp

HanLP原本你一个Java库,通过jpype进行调用或者其他方法在python中调用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# coding=utf8
from pyhanlp import *

print(HanLP.segment('你好,欢迎在Python中调用HanLP的API'))
for term in HanLP.segment('下雨天地面积水'):
print('{}\t{}'.format(term.word, term.nature)) # 获取单词与词性
testCases = [
"商品和服务",
"结婚的和尚未结婚的确实在干扰分词啊",
"买水果然后来世博园最后去世博会",
"中国的首都是北京",
"欢迎新老师生前来就餐",
"工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作",
"随着页游兴起到现在的页游繁盛,依赖于存档进行逻辑判断的设计减少了,但这块也不能完全忽略掉。"]
for sentence in testCases: print(HanLP.segment(sentence))
# 关键词提取
document = "水利部水资源司司长陈明忠9月29日在国务院新闻办举行的新闻发布会上透露," \
"根据刚刚完成了水资源管理制度的考核,有部分省接近了红线的指标," \
"有部分省超过红线的指标。对一些超过红线的地方,陈明忠表示,对一些取用水项目进行区域的限批," \
"严格地进行水资源论证和取水许可的批准。"
print(HanLP.extractKeyword(document, 2))
# 自动摘要
print(HanLP.extractSummary(document, 3))
# 依存句法分析
print(HanLP.parseDependency("徐先生还具体帮助他确定了把画雄鹰、松鼠和麻雀作为主攻目标。"))

如果第一次运行上述的程序,会自动下载HanLP的java包,包比较大,所以需要等待一段时间。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Downloading https://github.com/hankcs/HanLP/releases/download/v1.7.4/hanlp-1.7.4-release.zip to venvs/learn/lib/python3.7/site-packages/pyhanlp/static/hanlp-1.7.4-release.zip
8.49%, 0 MB, 10 KB/s, ETA 2 min 43 s--2019-09-15 10:42:44-- https://github.com/hankcs/HanLP/releases/download/v1.7.4/hanlp-1.7.4-release.zip
Resolving github.com (github.com)... 13.250.177.223
Connecting to github.com (github.com)|13.250.177.223|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://github-production-release-asset-2e65be.s3.amazonaws.com/24976755/7eeeb880-999d-11e9-9145-f579c833d6b5?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20190915%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20190915T024242Z&X-Amz-Expires=300&X-Amz-Signature=2a18a284f4168637860e9c6417097bb2101fda0995275d343be46dae769f4a4c&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dhanlp-1.7.4-release.zip&response-content-type=application%2Foctet-stream [following]
--2019-09-15 10:42:45-- https://github-production-release-asset-2e65be.s3.amazonaws.com/24976755/7eeeb880-999d-11e9-9145-f579c833d6b5?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20190915%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20190915T024242Z&X-Amz-Expires=300&X-Amz-Signature=2a18a284f4168637860e9c6417097bb2101fda0995275d343be46dae769f4a4c&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dhanlp-1.7.4-release.zip&response-content-type=application%2Foctet-stream
Resolving github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)... 52.216.137.196
Connecting to github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)|52.216.137.196|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1833347 (1.7M) [application/octet-stream]
Saving to: ‘/Users/ck/Documents/project/venvs/learn/lib/python3.7/site-packages/pyhanlp/static/hanlp-1.7.4-release.zip.downloading’
0K .......... ....... .... .... .......... 2% 5.94K 4m53s
50K .......... ....... ....... .... .... 5% 8.47K 4m2s
100K .... .......... ....... ....... .......... 8% 7.18K 3m53s
150K .... .......... ....... ....... .... 11% 9.77K 3m30s
200K .... . .......... ....... ....... 13% 9
。。。。。。。。

如果你的网络不够快,可以手动下载这两个文件:

1
2
https://github.com/hankcs/HanLP/releases/download/v1.7.4/hanlp-1.7.4-release.zip
http://114.115.185.60/file/data-for-1.7.4.zip

到下面的目录中:

1
{虚拟环境目录}/lib/python3.7/site-packages/pyhanlp/static/

具体分词结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[你好/vl, ,/w, 欢迎/v, 在/p, Python/nx, 中/f, 调用/v, HanLP/nx, 的/ude1, API/nx]
下雨天 n
地面 n
积水 n
[商品/n, 和/cc, 服务/vn]
[结婚/vi, 的/ude1, 和/cc, 尚未/d, 结婚/vi, 的/ude1, 确实/ad, 在/p, 干扰/vn, 分词/n, 啊/y]
[买/v, 水果/n, 然后/c, 来/vf, 世博园/n, 最后/f, 去/vf, 世博会/n]
[中国/ns, 的/ude1, 首都/n, 是/vshi, 北京/ns]
[欢迎/v, 新/a, 老/a, 师生/n, 前来/vi, 就餐/vi]
[工信处/n, 女干事/n, 每月/t, 经过/p, 下属/v, 科室/n, 都/d, 要/v, 亲口/d, 交代/v, 24/m, 口/n, 交换机/n, 等/udeng, 技术性/n, 器件/n, 的/ude1, 安装/v, 工作/vn]
[随着/p, 页游/nz, 兴起/v, 到/v, 现在/t, 的/ude1, 页游/nz, 繁盛/a, ,/w, 依赖于/v, 存档/vi, 进行/vn, 逻辑/n, 判断/v, 的/ude1, 设计/vn, 减少/v, 了/ule, ,/w, 但/c, 这/rzv, 块/q, 也/d, 不能/v, 完全/ad, 忽略/v, 掉/v, 。/w]
[水资源, 陈明忠]
[严格地进行水资源论证和取水许可的批准, 水利部水资源司司长陈明忠9月29日在国务院新闻办举行的新闻发布会上透露, 有部分省超过红线的指标]
1 徐先生 徐先生 nh nr _ 4 主谓关系 _ _
2 还 还 d d _ 4 状中结构 _ _
3 具体 具体 a ad _ 4 状中结构 _ _
4 帮助 帮助 v v _ 0 核心关系 _ _
5 他 他 r r _ 4 兼语 _ _
6 确定 确定 v v _ 4 动宾关系 _ _
7 了 了 u u _ 6 右附加关系 _ _
8 把 把 p p _ 15 状中结构 _ _
9 画 画 v v _ 8 介宾关系 _ _
10 雄鹰 雄鹰 n n _ 9 动宾关系 _ _
11 、 、 wp w _ 12 标点符号 _ _
12 松鼠 松鼠 n n _ 10 并列关系 _ _
13 和 和 c c _ 14 左附加关系 _ _
14 麻雀 麻雀 n n _ 10 并列关系 _ _
15 作为 作为 v v _ 6 动宾关系 _ _
16 主攻 主攻 v vn _ 17 定中关系 _ _
17 目标 目标 n n _ 15 动宾关系 _ _
18 。 。 wp w _ 4 标点符号 _ _

示例

1
http://hanlp.com/

评论

Agile Angularjs Animation Application Artificial Intelligence BP Babel Bokeh Book C4.5 CART CD CLI CSS CentOS Cinder Clipboardjs Concept Continuous Delivery DeepLearning Department DevOps Develop Development Directive Distribution Django Document ES5 ES6 Echarts Engine Entropy Filter Front End Gallery Git Gradient descent Hexo Horizon ID3.5 Icarus JavaScript Javascript KVM LaTeX LibreOffice Linux MNIST Machine Learning Matrix MiddleWare Module Native Network Nginx NodeJS OOP OpenSSH OpenStack OpenStackApi Operations Oprations PDF Pipline Probability Python React Relational algebra Restful Route SVD SVM Scalar Sigmoid Team Tempest Tensor TensorFlow Testing Time TimeMachine Tips Vector Vmware Vue Vuex WSGI Web Word Cut aliyun auth babel certbot decision tree eject git homebrew jwt keystone loader mathematics migrate openstack outline pdf2html pm2 singular value decomposition stylus vue-router vue-ssr webpack 事件 事件代理 事件冒泡 事件捕获 低通滤波器 入门 全局变量 全局对象 全栈 公式 决策树 函数 分类器 加速 匹配滤波边缘检测 卷积 卷积核 原型链 双向绑定 反向传播 发布 变量类型 官方示例 对偶形式 对象 平移和查分边缘检测 思维导图 感知机模型 拉格朗日乘子法 推导 提交阶段 数据绑定 最大似然估计 最小二乘估计 最小二乘法 本地 朴素贝叶斯 机器学习 条件概率 梯度下降 梯度方向边缘检测 概念 概率 求导 流程 源码 源码阅读 生命周期 矩阵 神经网络 私有对象 线性回归 联合概率 脚手架 识别 调试 贝叶斯判定准则 边缘检测 边际概率 闭包 间隔 高斯分布 高通滤波器
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×