赞
踩
1、分词(三种分词模式 )
A、精确模式:将句子精确切开,适合文本分析。默认是精确模式。
B、全模式:将句中所有可以成词的词语都扫描出来,适合用于搜索引擎构建倒排索引的分词,粒度比较细
C、搜索引擎模式:在精确模式基础上,对长词再次切分,适合搜索引擎
注:当指定jieba.cut_for_search或jieba.cut的参数HMM=True时,就有了新词发现的能力
- # encoding=utf-8
-
- import jieba
-
- # 精确模式
-
- seg_list = jieba.cut("我去过清华大学和北京大学。")
- print(unicode("精确模式: ","utf-8")+ "/ ".join(seg_list))
-
- # 全模式
-
- seg_list = jieba.cut("我去过清华大学和北京大学。", cut_all=True)
- print(unicode("全模式: ","utf-8") + "/ ".join(seg_list))
-
- # 搜索引擎模式
-
- seg_list = jieba.cut_for_search("我去过清华大学和北京大学。")
- print(unicode("搜索引擎模式: ","utf-8") + "/ ".join(seg_list))
-
- # 精确模式/全模式下-新词发现 “杭研”没有在词典中,也被HMM模型 Viterbi算法识别出来
-
- seg_list = jieba.cut("他来到了网易杭研大厦",HMM=True)
- print(unicode("精确模式/全模式-新词发现: ","utf-8") + "/ ".join(seg_list))
-
- # 搜索引擎模式下-新词发现 “杭研”没有在词典中,也被HMM模型 Viterbi算法识别出来
-
- seg_list = jieba.cut_for_search("他来到了网易杭研大厦",HMM=True)
- print(unicode("搜索引擎模式-新词发现: ","utf-8") + "/ ".join(seg_list))
-
- #print result:
-
- #精确模式: 我/ 去过/ 清华大学/ 和/ 北京大学/ 。
-
- #全模式: 我/ 去过/ 清华/ 清华大学/ 华大/ 大学/ 和/ 北京/ 北京大学/ 大学/ /
-
- #搜索引擎模式: 我/ 去过/ 清华/ 华大/ 大学/ 清华大学/ 和/ 北京/ 大学/ 北京大学/ 。
-
- #精确模式/全模式-新词发现: 他/ 来到/ 了/ 网易/ 杭研/ 大厦
-
- #搜索引擎模式-新词发现: 他/ 来到/ 了/ 网易/ 杭研/ 大厦
2、添加自定义用户词典
Jieba 有新词发现能力,但添加用户词典可以保证更高的正确率。
无用户词典下中英文分词示例
- # encoding=utf-8
-
- import jieba
-
- data=[
- "世界经济论坛也叫达沃斯论坛。",
- "The World Economic Forum is also called the Davos Forum."
- ]
-
- for d in data:
- seg_list = jieba.cut(d)
- #词与词之间用","连接
- print(",".join(seg_list))
-
- #无用户词典下中英文分词结果
-
- # 世界, 经济, 论坛, 也, 叫, 达沃斯, 论坛,。
- # The,, World,, Economic,, Forum,, is, , also,, called,, the,, >Davos,, Forum,.
有用户词典下的中英文分词
- # encoding=utf-8
- import jieba
-
- """
- 默认格式下的用户词典"dict/userdict:
- 世界经济论坛 n
- 达沃斯论坛 n
- World Economic Forum n
- Davos Forum n
- """
-
- # 加载用户词典
-
- jieba.load_userdict("dict/userdict")
-
- # 测试用户词典
-
- data=[
- "世界经济论坛也叫达沃斯论坛。",
- "The World Economic Forum is also called the Davos Forum."
- ]
-
- for d in data:
- seg_list = jieba.cut(d)
- #词与词之间用","连接
- print(",".join(seg_list))
-
- #默认格式用户词典下中英文分词结果
-
- # 世界经济论坛,也,叫,达沃斯论坛,。
- # The, ,World, ,Economic, ,Forum, ,is, ,also, ,called, ,the, ,Davos, >,Forum,.
可以看到jieba分词在默认格式下,中文没问题,英文专有名词不太理想。不过,可以通过修改jieba包中的init.py文件几个正则来解决。详情请见::https://blog.csdn.net/wangpei1949/article/details/57077007
修改格式后用户词典下中英文分词示例
- # encoding=utf-8
- import jieba
-
- """
- 修改格式后的用户词典"dict/userdict:用@@来间隔词、词频、词性
- 世界经济论坛@@n
- 达沃斯论坛@@n
- World Economic Forum@@n
- Davos Forum@@n
- """
-
- # 加载用户词典
-
- jieba.load_userdict("dict/userdict")
-
- # 测试用户词典
-
- data=[
- "世界经济论坛也叫达沃斯论坛。",
- "The World Economic Forum is also called the Davos Forum."
- ]
-
- for d in data:
- seg_list = jieba.cut(d)
- #词与词之间用","连接
- print(",".join(seg_list))
-
- #修改格式后中英文分词结果
-
- # 世界经济论坛,也,叫,达沃斯论坛,。
- # The, ,World Economic Forum, ,is, ,also, ,called, ,the, ,Davos >Forum,.
3、关键词提取
基于 TF-IDF 算法的关键词抽取
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=(‘ns’, ‘n’, ‘vn’, ‘v’))
参数解释:
(1)sentence :待提取的文本;
(2)topK :返回K个权重最大的关键词
(3)withWeight :是否返回权重
(4)allowPOS :是否仅包括指定词性的词
- # encoding=utf-8
-
- #关键词提取
-
- import jieba.analyse
-
- kWords = jieba.analyse.extract_tags("此外,公司拟对全资子公司吉林欧亚置业>有限公司增资4.3亿元,增资后,吉林欧亚置业注册资本由7000万元增加到5亿元。>吉林欧亚置业主要经营范围为房地产开发及百货零售等业务。目前在建吉林欧亚城>市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。", >topK=5,withWeight=True)
- for word,weight in kWords:
- # print(word+":"+weight)
- print word,":",weight
-
- #结果
-
- # 欧亚 : 0.730014270029
- # 吉林 : 0.659038184374
- # 置业 : 0.488713452211
- # 万元 : 0.339272248186
- # 增资 : 0.335824019852
-
-
- """
- 注: 关键词提取所使用逆文频(IDF)库、停用词库可切换成自定路径
- 基于 TextRank 算法的关键词抽取
- jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=(‘ns’, ‘n’, ‘vn’, ‘v’))
- 参数解释:
- (1)sentence :待提取的文本;
- (2)topK :返回K个权重最大的关键词
- (3)withWeight :是否返回权重
- (4)allowPOS :是否仅包括指定词性的词
- TextRank基本思想:
- (1)分词
- (2)找词之间共现关系,构建图
- (3)计算图中节点的PageRank
- """
4、词性标注
- import jieba.posseg as pseg
- words = pseg.cut("我爱北京天安门")
- for word, flag in words:
- print('%s %s' % (word, flag))
-
- #词性
- #我 r
- #爱 v
- #北京 ns
- #天安门 ns
5、并行分词
原理:
文本按行分隔后,分配到多个 Python 进程并行分词,最后归并结果。
用法:
jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程数
jieba.disable_parallel() # 关闭并行分词模式
效果:
在 4 核 3.4GHz Linux 机器上,对金庸全集进行精确分词,获得了 1MB/s 的速度,是单进程版的 3.3 倍。
注意:
并行分词仅支持默认分词器 jieba.dt 和 jieba.posseg.dt。目前暂不支持 Windows
6、返回词语在原文的起止位置
- import jieba
- result = jieba.tokenize(u'永和服装饰品有限公司')
- for tk in result:
- print("word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2]))
-
- #结果
-
- #word 永和 start: 0 end:2
- #word 服装 start: 2 end:4
- #word 饰品 start: 4 end:6
- #word 有限公司 start: 6 end:10
- #word 不是 start: 10 end:12
转自:https://blog.csdn.net/wangpei1949/article/details/57413419
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。