>>> from env_helper import info; info()
页面更新时间: 2024-05-09 15:22:44
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-20-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

1.3.3. jieba词性标注

  • jieba.posseg.POSTokenizer(tokenizer=None) 新建自定义分词器, tokenizer 参数可指定内部使用的 jieba.Tokenizer 分词器。jieba.posseg.dt 为默认词性标注分词器。

  • 标注句子分词后每个词的词性,采用和 ictclas 兼容的标记法。

  • 除了jieba默认分词模式,提供paddle模式下的词性标注功能。paddle模式采用延迟加载方式,通过 enable_paddle() 安装 paddlepaddle-tiny ,并且 import 相关代码;

paddle模式词性标注对应表如下:

paddle模式词性和专名类别标签集合如下表,其中词性标签 24 个(小写字母),专名类别标签 4 个(大写字母)。

标签

含义

n

普通名词

f

方位名词

s

处所名词

t

时间

nr

人名

ns

地名

nt

机构名

nw

作品名

nz

其他专名

v

普通动词

vd

动副词

vn

名动词

a

形容词

ad

副形词

an

名形词

d

副词

m

数量词

q

量词

r

代词

p

介词

c

连词

u

助词

xc

其他虚词

w

标点符号

PER

人名

>>> import jieba.posseg as jp
>>> print(jp.lcut('转载<请>附上原文出处链接及本声明.'))
[pair('转载', 'v'), pair('<', 'x'), pair('请', 'v'), pair('>', 'x'), pair('附上', 'f'), pair('原文', 'n'), pair('出处', 'v'), pair('链接', 'n'), pair('及', 'c'), pair('本', 'r'), pair('声明', 'n'), pair('.', 'x')]
>>> from jieba import enable_paddle, posseg
>>> # import paddle
>>> # paddle.enable_static()
>>>
>>> s='我今天来到l北京的清华大学。'
>>>
>>> print('精确模式:')
>>> print(posseg.lcut(s))
精确模式:
[pair('我', 'r'), pair('今天', 't'), pair('来到', 'v'), pair('l', 'x'), pair('北京', 'ns'), pair('的', 'uj'), pair('清华大学', 'nt'), pair('。', 'x')]
>>> print('paddle模式:')
>>> print(posseg.lcut(s, use_paddle=True))
paddle模式:
[pair('我', 'r'), pair('今天', 't'), pair('来到', 'v'), pair('l', 'x'), pair('北京', 'ns'), pair('的', 'uj'), pair('清华大学', 'nt'), pair('。', 'x')]
>>> s = '''
>>> 其一,中国的城市,包括直辖市、副省级市、普通地级市、县级市,但不包括县。
>>> 正如《中国城市大趋势》一书所分析的,县与县级市虽然级别相同,但定位有巨大差别。县是以农业为基础的管理单元,县级市则以工商业为主。
>>> 对于县,地级市进行直管;对于县级市,地级市则只是代管。
>>> 名义之别,导致了县级市与其所在地级市,均被视为独立城市,从而单薄市级层面的人口规模,如昆山与苏州,晋江与泉州,义乌与金华。
>>> 其二,衡量城市规模,看的是城区人口,而非全市人口。
>>> 城区人口,顾名思义,不包括镇区及乡村人口,明显低于全市常住人口。城区人口占全市人口比例最高可达9成以上,最低甚至不到20%。
>>> 凡是城镇化率不高的地区,或者下辖县乡过多的城市,即使全市人口迈过了千万大关,也未必能晋级为超大特大城市。
>>> 02
>>> 7个超大城市:4大一线+成渝津
>>> 超大城市,是我国城市规模层级的金字塔尖城市。
>>> 目前,我国共有7个超大城市,除了北上广深四大一线城市,还有重庆、天津两大直辖市,以及成都。
>>> '''
>>> results = posseg.lcut(s)

对于结果中的每一项,其有属性 flagword 。 通过这种方式可以过滤出与地点相关的要素。

>>> for obj in results:
>>>     if obj.flag == 'ns':
>>>         print(obj.word)
中国
城市
中国
城市
城市
昆山
苏州
晋江
泉州
城市
镇区
城市
大关
特大城市
城市
城市
城市
城市
城市
城市
重庆
天津
成都
>>> s = '''
>>> ①长度为海拉尔河源至乌苏里江口,国内流域面积为903418平方千米。
>>> ②国内流域面积为56690平方千米。
>>> ③包括浑河、太子河。
>>> ④国内流域面积为32466平方千米。
>>> ⑤国内流域面积为22561平方千米。
>>> 图中数字代表的流域
>>> 1、黑龙江流域
>>> 2、绥芬河流域
>>> 3、图们江流域
>>> 4、鸭绿江流域
>>> 5、辽东半岛诸河流域
>>> 6、辽河流域
>>> 7、辽西诸河流域
>>> 8、滦河流域
>>> 9、海河流域'''
>>>
>>> results = posseg.lcut(s, use_paddle=True)
>>> for obj in results:
>>>     if obj.flag == 'ns':
>>>         print(obj.word)
长度
海拉尔河
乌苏里江
浑河
黑龙江
绥芬河
图们江
鸭绿江
辽东半岛
辽河流域
辽西
滦河
海河

尽管jieba分词可以自动提取文本中相关的信息,但是由于自然语言的复杂性与非严谨性,得到的结果并非完全可信, 需要根据场景对结果进行分析与处理。