两种中文分词库的安装与使用
jieba(结巴)
专用于分词的 Python
库,GitHub:https://github.com/fxsjy/jieba,分词效果较好。
支持三种分词模式:
- 精确模式,试图将句子最精确地切开,适合文本分析。
- 全模式,将句子中所有的可能成词的词语都扫描出来,速度非常快,但是不能解决歧义。
- 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适用于搜索引擎分词。
另外 jieba 支持繁体分词,支持自定义词典。
其使用的算法是基于统计的分词方法,主要有如下几种:
- 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
- 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
- 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法
精确模式分词
首先我们来看下精确模式分词,使用 lcut() 方法,类似 cut() 方法,其参数和 cut() 是一致的,只不过返回结果是列表而不是生成器,默认使用精确模式,代码如下:
1 | import jieba |
结果:
1 | 38 这个/把手/该换/了/,/我/不/喜欢/日本/和服/,/别/把手/放在/我/的/肩膀/上/,/工信处/女干事/每月/经过/下属/科室/都/要/亲口/交代/24/口/交换机/等/技术性/器件/的/安装/工作 |
可见分词效果还是不错的。
全模式分词
使用全模式分词需要添加 cut_all 参数,将其设置为 True,代码如下:
1 | result = jieba.lcut(string, cut_all=True) |
结果如下:
1 | 51 这个/把手/该换/了///我/不/喜欢/日本/和服///别/把手/放在/我/的/肩膀/上///工信处/处女/女干事/干事/每月/月经/经过/下属/科室/都/要/亲口/口交/交代/24/口交/交换/交换机/换机/等/技术/技术性/性器/器件/的/安装/安装工/装工/工作 |
搜索引擎模式分词
使用搜索引擎模式分词需要调用 cutforsearch() 方法,代码如下:
1 | result = jieba.lcut_for_search(string) |
结果如下:
1 | 42 这个/把手/该换/了/,/我/不/喜欢/日本/和服/,/别/把手/放在/我/的/肩膀/上/,/工信处/干事/女干事/每月/经过/下属/科室/都/要/亲口/交代/24/口/交换/换机/交换机/等/技术/技术性/器件/的/安装/工作 |
另外可以加入自定义词典,如我们想把 日本和服 作为一个整体,可以把它添加到词典中,代码如下:
1 | jieba.add_word('日本和服') |
结果如下:
1 | 37 这个/把手/该换/了/,/我/不/喜欢/日本和服/,/别/把手/放在/我/的/肩膀/上/,/工信处/女干事/每月/经过/下属/科室/都/要/亲口/交代/24/口/交换机/等/技术性/器件/的/安装/工作 |
可以看到切分结果中,日本和服 四个字就作为一个整体出现在结果中了,分词数量比精确模式少了一个。
词性标注
另外 jieba 还支持词性标注,可以输出分词后每个词的词性,实例如下:
1 | words = pseg.lcut(string) |
运行结果:
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 | # coding=utf8 |
如果第一次运行上述的程序,会自动下载HanLP的java包,包比较大,所以需要等待一段时间。
1 | 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 |
如果你的网络不够快,可以手动下载这两个文件:
1 | https://github.com/hankcs/HanLP/releases/download/v1.7.4/hanlp-1.7.4-release.zip |
到下面的目录中:
1 | {虚拟环境目录}/lib/python3.7/site-packages/pyhanlp/static/ |
具体分词结果如下:
1 | [你好/vl, ,/w, 欢迎/v, 在/p, Python/nx, 中/f, 调用/v, HanLP/nx, 的/ude1, API/nx] |
示例
1 | http://hanlp.com/ |
两种中文分词库的安装与使用