python:jieba库

一、基本分词函数

  • jieba.lcut 方法接受三个输入参数: ①需要分词的字符串;②cut_all参数用来控制是否采用全模式;③HMM 参数用来控制是否使用 HMM 模型。
  • jieba.lcut_for_search 方法接受两个参数 :①需要分词的字符串;②是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细

注意:

  • 待分词的字符串可以是 unicode 、 UTF8 、GBK字符串 。
  • jieba.cut 和 jieba.cut_for_search 返回的结构都是一个可迭代的 generator ,用for循环来获取分词后的词语(unicode)。
  • jieba.lcut 和 jieba.lcut_for_search 直接返回list。
import jieba

word_str = "好好学习,天天向上。"

words1 = jieba.lcut(word_str)    # 精简模式,返回一个列表类型的结果
words2 = jieba.lcut(word_str, cut_all=True)      # 使用 'cut_all=True' 指定全模式
words3 = jieba.lcut_for_search(word_str)     # 搜索引擎模式

二、jieba 分词简单应用

需求:使用 jieba 分词对一个文本进行分词,统计次数出现最多的词语

import jieba

txt = open("***.txt", "r", encoding='utf-8').read()
words = jieba.lcut(txt)     # 使用精确模式对文本进行分词
counts = {}     # 通过键值对的形式存储词语及其出现的次数

for word in words:
    if len(word) == 1:    # 单个词语不计算在内
        continue
    else:
        counts[word] = counts.get(word, 0) + 1    # 遍历所有词语,每出现一次其对应的值加 1

items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)    # 根据词语出现的次数进行从大到小排序

for i in range(3):
    word, count = items[i]
    print("{0:<5}{1:>5}".format(word, count))

三、添加自定义词典

载入词典

  • 指定自己自定义的词典,来补充jieba词库里没有的词。
  • 用法:jieba.load_userdict(file_name) ,file_name是文件对象或路径
  • 词典格式,一个词占一行;一行分为三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不能颠倒。file_name 若为路径或二进制打开,文件必须为UTF-8编码。
# userdict.text文件
云计算 5
李小福 2 nr
import jieba
jieba.load_userdict("userdict.txt") # 加载字典
jieba.add_word('八一双鹿')  # 加载单词
demo = '李小福是创新办主任也是云计算方面的专家; 什么是八一双鹿'
words = jieba.cut(demo)
print('/'.join(words))

使用add_worddel_word 可以动态修改词典。

四、关键词提取

基于 TF-IDF 算法的关键词抽取

import jieba.analyse
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=()) 
  • sentence 为待提取的文本
  • topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
  • withWeight 为是否一并返回关键词权重值,默认值为 False
  • allowPOS 仅包括指定词性的词,默认值为空,即不筛选

关键词提取所使用逆向文件频率(IDF)文本语料库可以切换成自定义语料库的路径

jieba.analyse.set_idf_path(file_name) # file_name为自定义语料库的路径

关键词提取所使用停止词(Stop Words)文本语料库可以切换成自定义语料库的路径

jieba.analyse.set_stop_words(file_name) # file_name为自定义语料库的路径

基于 TextRank 算法的关键词抽取

jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v')) 

直接使用,接口相同,注意默认过滤词性。

jieba.analyse.TextRank()

新建自定义 TextRank 实例

  • 基本思想:
    • 将待抽取关键词的文本进行分词
    • 以固定窗口大小(默认为5,通过span属性调整),词之间的共现关系,构建图
    • 计算图中节点的PageRank,注意是无向带权图

五、并行分词

原理: 将目标文件按行分隔后,把各行文本分配到多个Python进程,然后归并结果,从而获得分词速度提升,基于 Python 自带的 multiprocessing 模块

jieba.enable_parallel(4) 开启并行分词模式,参数为并行进程数
jieba.disable_parallel() 关闭并行分词模式
注意: 并行分词仅支持默认分词器 jieba.dt 和 jieba.posseg.dt。

import time
import jieba

jieba.enable_parallel(1)    # 创建1个线程

content = open('./1.txt',"rb").read()

t1 = time.time()
words = "/ ".join(jieba.cut(content))
t2 = time.time()

log_f = open("1.log","wb")
log_f.write(words.encode('utf-8'))

print('speed %s bytes/second' % (len(content)/t2-t1))

六、词性标注

  • jieba.posseg.POSTokenizer(tokenizer=None) 新建自定义分词器,tokenizer参数可指定内部使用的 jieba.Tokenizer 分词器。jieba.posseg.dt 为默认词性标注分词器。
  • 标注句子分词后每个词的词性,采用和 ictclas 兼容的标记法。
  • 具体的词性对照表参见计算所汉语词性标记集
>>> import jieba.posseg as pseg
>>> words = pseg.cut("我爱北京天安门")
>>> for word, flag in words:
...    print('%s %s' % (word, flag))
...
我 r
爱 v
北京 ns
天安门 ns

七、返回词所在位置

import jieba

test_sent = u"永和服装饰品有限公司"
result = jieba.tokenize(test_sent)
for tk in result:
    print(tk)
('永和', 0, 2)
('服装', 2, 4)
('饰品', 4, 6)
('有限公司', 6, 10)

八、计算所汉语词性标记集

1、名词 (1个一类,7个二类,5个三类)

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

2、时间词(1个一类,1个二类)

符号 词性
t 时间词
tg 时间词性语素

3、处所词(1个一类)

符号 词性
s 处所词

4、方位词(1个一类)

符号 词性
f 方位词

5、动词(1个一类,9个二类)

符号 词性
v 动词
vd 副动词
vn 名动词
vshi 动词“是”
vyou 动词“有”
vf 趋向动词
vx 形式动词
vi 不及物动词(内动词)
vl 动词性惯用语
vg 动词性语素

6、形容词(1个一类,4个二类)

符号 词性
a 形容词
ad 副形词
an 名形词
ag 形容词性语素
al 形容词性惯用语

7、区别词(1个一类,2个二类)

符号 词性
b 区别词
bl 区别词性惯用语

8、状态词(1个一类)

符号 词性
z 状态词

9、代词(1个一类,4个二类,6个三类)

符号 词性
r 代词
rr 人称代词
rz 指示代词
rzt 时间指示代词
rzs 处所指示代词
rzv 谓词性指示代词
ry 疑问代词
ryt 时间疑问代词
rys 处所疑问代词
ryv 谓词性疑问代词
rg 代词性语素

10、数词(1个一类,1个二类)

符号 词性
m 数词
mq 数量词

11、量词(1个一类,2个二类)

符号 词性
q 量词
qv 动量词
qt 时量词

12、副词(1个一类)

符号 词性
d 副词

13、介词(1个一类,2个二类)

符号 词性
p 介词
pba 介词“把”
pbei 介词“被”

14、连词(1个一类,1个二类)

符号 词性
c 连词
cc 并列连词

15、助词(1个一类,15个二类)

符号 词性
u 助词
uzhe
ule 了 喽
uguo
ude1 的 底
ude2
ude3
usuo
udeng 等 等等 云云
uyy 一样 一般 似的 般
udh 的话
uls 来讲 来说 而言 说来
uzhi
ulian 连 (“连小学生都会”)

16、叹词(1个一类)

符号 词性
e 叹词

17、语气词(1个一类)

符号 词性
y 语气词(delete yg)

18、拟声词(1个一类)

符号 词性
o 拟声词

19、前缀(1个一类)

符号 词性
h 前缀

20、后缀(1个一类)

符号 词性
k 后缀

21、字符串(1个一类,2个二类)

符号 词性
x 字符串
xe Email字符串
xs 微博会话分隔符
xm 表情符合
xu 网址URL

22、标点符号(1个一类,16个二类)

符号 词性
w 标点符号
wkz 左括号,全角:( 〔 [ { 《 【 〖 〈 半角:( [ { <
wky 右括号,全角:) 〕 ] } 》 】〗 〉 半角: ) ] { >
wyz 左引号,全角:“ ‘ 『
wyy 右引号,全角:” ’ 』
wj 句号,全角:。
ww 问号,全角:? 半角:?
wt 叹号,全角:! 半角:!
wd 逗号,全角:, 半角:,
wf 分号,全角:; 半角: ;
wn 顿号,全角:、
wm 冒号,全角:: 半角: :
ws 省略号,全角:…… …
wp 破折号,全角:―― -- ――- 半角:— ----
wb 百分号千分号,全角:% ‰ 半角:%
wh 单位符号,全角:¥ $ £ ° ℃ 半角:$

你可能感兴趣的:(第三方模块)