词类,POS(Part Of Speech),就是所谓的名词、动词、形容词、代词、介词等词性分类。词性标注(POS tagging)就是标记/判断一个词属于什么词性。词类有以下特征:
- 分布特征(Distributional)
单词能够出现在相似的环境中
单词有相似的功能 - 形态特征(Morphological)
单词有相同的前缀后缀(词缀具有相似的功能)
在句法结构中有相似的上下文环境 - 无关于含义(meaning),也无关于语法(可以是主语/宾语,等等)
词的属性可以提供很多信息: 形容词 后面跟的往往是一个名词;一句话里 名词 通常是比较重要的信息,而 介词 可能比较不重要。比如 “同福客栈的掌柜是谁?” 这句话里,重要的词有
- 名词:“客栈”、“掌柜”
- 疑问词:“谁”
词类标注是歧义消解(disambiguation) 的一个重要方面。很多次不仅仅有一个词性,当不同词性时代表的意思不同。比如“排山倒海”,原先是一个形容词,用来形容声势浩大。但是如果是出现在郭芙蓉的嘴里,那基本表示一个招式名称,是一个名词。
Python Package
jieba 🔗
jieba是优秀的中文分词工具,同样也有词性标注的功能。首先请确保”pip install jieba”,来个单条query:
1 | import jieba.posseg as pseg |
output:
1 | 佟 nr |
可以根据下面的jieba的词性对照表(会有变动)对上面的output进行解读:
jieba词性对照表
编码 | 名称 | 注解 |
---|---|---|
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 |
vg | 动语素 | 动词性语素。动词代码为 v。在语素的代码g前面置以V。 |
v | 动词 | 取英语动词 verb的第一个字母。 |
vd | 副动词 | 直接作状语的动词。动词和副词的代码并在一起。 |
vn | 名动词 | 指具有名词功能的动词。动词和名词的代码并在一起。 |
w | 标点符号 | |
x | 非语素字 | 非语素字只是一个符号,字母 x通常用于代表未知数、符号。 |
y | 语气词 | 取汉字“语”的声母。 |
z | 状态词 | 取汉字“状”的声母的前一个字母。 |
un | 未知词 | 不可识别词及用户自定义词组。取英文Unknown首两个字母。(非北大标准,CSW分词中定义) |
再来个多条query的例子:
1 | query = ['秀才最喜欢说的话是什么','老白的外号是什么','郭芙蓉的情敌是谁'] |
output:
1 | {'喜欢': 'v', '说': 'v', '是': 'v', '的话': 'u', '最': 'd', '秀才': 'n', '什么': 'r'} |
基本上还是挺准的。
HanLP 🔗
HanLP实际上是Java写的,pyhanlp才是python接口,因此下载是”pip install pyhanlp”
1 | from pyhanlp import * |
output:
1 | [老白/nz, 的/ude1, 真实/a, 身份/n, 是/vshi, 什么/ry] |
HanLP的词性对照表
编码 | 名称 | 编码 | 名称 | 编码 | 名称 |
---|---|---|---|---|---|
P 1 | =========== | === | ========================== | ===== | ============== |
a | 形容词 | gc | 化学相关词汇 | nf | 食品,比如“薯片” |
ad | 副形词 | gg | 地理地质相关词汇 | ng | 名词性语素 |
ag | 形容词性语素 | gi | 计算机相关词汇 | nh | 医药疾病等健康相关名词 |
al | 形容词性惯用语 | gm | 数学相关词汇 | nhd | 疾病 |
an | 名形词 | gp | 物理相关词汇 | nhm | 药品 |
b | 区别词 | h | 前缀 | ni | 机构相关(不是独立机构名) |
bg | 区别语素 | i | 成语 | nic | 下属机构 |
bl | 区别词性惯用语 | j | 简称略语 | nis | 机构后缀 |
c | 连词 | k | 后缀 | nit | 教育相关机构 |
cc | 并列连词 | l | 习用语 | nl | 名词性惯用语 |
d | 副词 | m | 数词 | nm | 物品名 |
dg | 辄,俱,复之类的副词 | mg | 数语素 | nmc | 化学品名 |
dl | 连语 | Mg | 甲乙丙丁之类的数词 | nn | 工作相关名词 |
e | 叹词 | mq | 数量词 | nnd | 职业 |
end | 仅用于终##终 | n | 名词 | nnt | 职务职称 |
f | 方位词 | nb | 生物名 | nr | 人名 |
g | 学术词汇 | nba | 动物名 | nr1 | 复姓 |
gb | 生物相关词汇 | nbc | 动物纲目 | nr2 | 蒙古姓名 |
gbc | 生物类别 | nbp | 植物名 | nrf | 音译人名 |
P 2 | =========== | === | ========================== | ===== | ============== |
nrj | 日语人名 | qg | 量词语素 | ud | 助词 |
ns | 地名 | qt | 时量词 | ude1 | 的 底 |
nsf | 音译地名 | qv | 动量词 | ude2 | 地 |
nt | 机构团体名 | r | 代词 | ude3 | 得 |
ntc | 公司名 | rg | 代词性语素 | udeng | 等 等等 云云 |
ntcb | 银行 | Rg | 古汉语代词性语素 | udh | 的话 |
ntcf | 工厂 | rr | 人称代词 | ug | 过 |
ntch | 酒店宾馆 | ry | 疑问代词 | uguo | 过 |
nth | 医院 | rys | 处所疑问代词 | uj | 助词 |
nto | 政府机构 | ryt | 时间疑问代词 | ul | 连词 |
nts | 中小学 | ryv | 谓词性疑问代词 | ule | 了 喽 |
ntu | 大学 | rz | 指示代词 | ulian | 连 (“连小学生都会”) |
nx | 字母专名 | rzs | 处所指示代词 | uls | 来讲 来说 而言 说来 |
nz | 其他专名 | rzt | 时间指示代词 | usuo | 所 |
o | 拟声词 | rzv | 谓词性指示代词 | uv | 连词 |
p | 介词 | s | 处所词 | uyy | 一样 一般 似的 般 |
pba | 介词“把” | t | 时间词 | uz | 着 |
pbei | 介词“被” | tg | 时间词性语素 | uzhe | 着 |
q | 量词 | u | 助词 | uzhi | 之 |
P 3 | =========== | === | ========================== | ===== | ============== |
v | 动词 | wb | 百分号千分号,全角:% ‰ 半角:% | wt | 叹号,全角:! |
vd | 副动词 | wd | 逗号,全角:, 半角:, | ww | 问号,全角:? |
vf | 趋向动词 | wf | 分号,全角:; 半角: ; | wyy | 右引号,全角:” ’ 』 |
vg | 动词性语素 | wh | 单位符号,全角:¥ $ £ ° ℃ 半角:$ | wyz | 左引号,全角:“ ‘ 『 |
vi | 不及物动词(内动词) | wj | 句号,全角:。 | x | 字符串 |
vl | 动词性惯用语 | wky | 右括号,全角:) 〕 ] } 》 】 〗 〉 半角: ) ] { > | xu | 网址URL |
vn | 名动词 | wkz | 左括号,全角:( 〔 [ { 《 【 〖 〈 半角:( [ { < | xx | 非语素字 |
vshi | 动词“是” | wm | 冒号,全角:: 半角: : | y | 语气词(delete yg) |
vx | 形式动词 | wn | 顿号,全角:、 | yg | 语气语素 |
vyou | 动词“有” | wp | 破折号,全角:—— -- ——- 半角:— —- | z | 状态词 |
w | 标点符号 | ws | 省略号,全角:…… … | zg | 状态词 |
再来个多query例子:
1 | testCases = ['老白的真实身份是什么','盗圣是谁'] |
这里的“盗圣”被分开了,分成“盗”和“圣”,一个动词一个形容词,没有被识别成专有名词,是因为训练的时候没有这个样本,的确盗圣这个也很少在其他场景/小说/电视剧等地方出现。
顺便再来看看HanLP的其他功能:
关键词提取
1
2
3
4
5
6document = '老白的真实身份是什么'
print(HanLP.extractKeyword(document, 2))
# output:[老白, 真实]
print(HanLP.extractKeyword(document, 3))
# output:[老白, 身份, 真实]自动摘要
这里的自动摘要也是比较重要的功能,因为比写论文更头疼的是还要写摘要,如果自动摘要技术成熟后,论文的摘要就可以自动生成了。包括读长文章就可以先看摘要再决定要不要深入看下去。
1
2
3
4print(HanLP.extractSummary('一个月黑风高的杀人夜,传说中的雌雄双煞从天而降,打乱了同福客栈的安稳日子。家世显赫、从小娇生惯养的郭芙蓉,父亲是一代大侠,始终把她笼罩在阴影之下。从小争胜好胜的她,毅然选择了一条离家出走独闯江湖的路,却在第一站,被扣在了同福客栈,从此开始了艰苦卓绝的杂役生涯……', 1))
# output
# [被扣在了同福客栈]依存句法分析
1
2
3
4
5
6
7
8
9HanLP.parseDependency("老白的真实身份是什么")
# output
# 1 老白 老白 nh nr _ 4 定中关系 _ _
# 2 的 的 u u _ 1 右附加关系 _ _
# 3 真实 真实 a a _ 4 定中关系 _ _
# 4 身份 身份 n n _ 5 主谓关系 _ _
# 5 是 是 v v _ 0 核心关系 _ _
# 6 什么 什么 r r _ 5 动宾关系 _ _
词性标注的一个应用方向是在知识图谱里,当你确定词性时,更加能方便把可能的答案揪出来。