赞
踩
Python中分分词工具很多,包括盘古分词、Yaha分词、Jieba分词、清华THULAC等,“结巴”中文分词目标是做最好的 Python 中文分词组件。
jieba分词主要是基于统计词典,构造一个前缀词典;然后利用前缀词典对输入句子进行切分,得到所有的切分可能,根据切分位置,构造一个有向无环图;通过动态规划算法,计算得到最大概率路径,也就得到了最终的切分形式。
以“去北京大学玩”为例,作为待分词的输入文本。
离线统计的词典形式如下,每一行有三列,第一列是词,第二列是词频,第三列是词性。
...
北京大学 2053 nt
大学 20025 n
去 123402 v
玩 4207 v
北京 34488 ns
北 17860 ns
京 6583 ns
大 144099 a
学 17482 n
1.前缀词典构建:如统计词典中的词“北京大学”的前缀分别是“北”、“北京”、“北京大”;词“大学”的前缀是“大”。
2.有向无环图构建:然后基于前缀词典,对输入文本进行切分,对于“去”,没有前缀,那么就只有一种划分方式;对于“北”,则有“北”、“北京”、“北京大学”三种划分方式;对于“京”,也只有一种划分方式;对于“大”,则有“大”、“大学”两种划分方式,依次类推,可以得到每个字开始的前缀词的划分方式。
一.特点
1、支持三种分词模式
精确模式,试图将句子最精确的切开;
全模式,把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义;
搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
2、支持繁体分词
3、支持自定义词典
4、MIT授权协议
二.安装说明
代码对Python 2/3 均兼容
全自动安装:easy_install jieba 或者 pip install jieba / pip3 install jieba
半自动安装:先下载 http://pypi.python.org/pypi/jieba/ ,解压后运行 python setup.py install
手动安装:将jieba目录放置于当前目录或者site-packages目录
通过import jieba 来引用
三、jieba 分词
结巴中文分词支持的三种分词模式包括:
(1) 精确模式:试图将句子最精确地切开,适合文本分析;
(2) 全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义问题;
(3) 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
1、第一步首先引入 jieba 和语料:
import jieba
import jieba.posseg as psg #通过 jieba.posseg 模块实现词性标注
content = "我在西南石油大学图书馆学习"
2、精确分词
#精确分词:精确模式试图将句子最精确地切开,精确分词也是默认分词。
segs_1 = jieba.cut(content, cut_all=False)
print("/".join(segs_1))
我/在/西南/石油大学/图书馆/学习
3、全模式
#全模式分词:把句子中所有的可能是词语的都扫描出来,速度非常快,但不能解决歧义。
segs_3 = jieba.cut(content, cut_all=True)
print("/".join(segs_3))
我/在/西南/石油/石油大学/大学/图书/图书馆/图书馆学/书馆/学习
4、搜索引擎模式
#搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
segs_4 = jieba.cut_for_search(content)
print("/".join(segs_4))
我/在/西南/石油/大学/石油大学/图书/书馆/图书馆/学习
5、lcut 生成 list
segs_5 = jieba.lcut(content)
print(segs_5)
print([(x.word,x.flag) for x in psg.lcut(content)])
['我', '在', '西南', '石油大学', '图书馆', '学习']
6、获取词性
print([(x.word,x.flag) for x in psg.lcut(content)])
[('我', 'r'), ('在', 'p'), ('西南', 'ns'), ('石油大学', 'nt'), ('图书馆', 'n'), ('学习', 'v')]
7、自定义添加词和字典
默认情况下,使用默认分词,是识别不出这句话中的“犀利哥”这个新词,这里使用用户字典提高分词准确性。
content = "犀利哥在西南石油大学图书馆学习"
结果为:
犀利/哥/在/西南/石油大学/图书馆/学习
犀利/哥/在/西南/石油/石油大学/大学/图书/图书馆/图书馆学/书馆/学习
犀利/哥/在/西南/石油/大学/石油大学/图书/书馆/图书馆/学习
如果添加一个词到字典,看结果就不一样了。
import jieba
import jieba.posseg as psg#通过 jieba.posseg 模块实现词性标注
jieba.add_word("犀利哥")
content = "犀利哥在西南石油大学图书馆学习"
#精确分词:精确模式试图将句子最精确地切开,精确分词也是默认分词。
segs_1 = jieba.cut(content, cut_all=False)
print("/".join(segs_1))
#全模式分词:把句子中所有的可能是词语的都扫描出来,速度非常快,但不能解决歧义。
segs_3 = jieba.cut(content, cut_all=True)
print("/".join(segs_3))
#搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
segs_4 = jieba.cut_for_search(content)
print("/".join(segs_4))
segs_5 = jieba.lcut(content)
print(segs_5)
print([(x.word,x.flag) for x in psg.lcut(content)])
结果为:
犀利哥/在/西南/石油大学/图书馆/学习
犀利/犀利哥/在/西南/石油/石油大学/大学/图书/图书馆/图书馆学/书馆/学习
犀利/犀利哥/在/西南/石油/大学/石油大学/图书/书馆/图书馆/学习
['犀利哥', '在', '西南', '石油大学', '图书馆', '学习']
[('犀利哥', 'x'), ('在', 'p'), ('西南', 'ns'), ('石油大学', 'nt'), ('图书馆', 'n'), ('学习', 'v')]
但是,如果要添加很多个词,一个个添加效率就不够高了,这时候可以定义一个文件,然后通过 load_userdict()函数,加载自定义词典,如下:
jieba.load_userdict('user_dict.txt')
print(jieba.lcut(txt))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。