本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.
目录
模块安装
pip install jieba
jieba分词器支持4种分词模式:
-
- 精确模式该模式会试图将句子最精确地切分开,适合在文本分析时使用。
-
- 全模式该模式会将句子中所有可以成词的词语都扫描出来,速度也非常快,缺点是不能解决歧义问题,有歧义的词语也会被扫描出来。
-
- 搜索引擎模式该模式会在精确模式的基础上对长词语再进行切分,将更短的词切分出来。在搜索引擎中,要求输入词语的一部分也能检索到整个词语相关的文档,所以该模式适用于搜索引擎分词。
-
- Paddle模式该模式利用PaddlePaddle深度学习框架,训练序列标注网络模型实现分词,同时支持词性标注。
-
- 该模式在4.0及以上版本的jieba分词器中才能使用。使用该模式需要安装PaddlePaddle模块,安装命令为“
pip install paddlepaddle
-
- ”。
开源代码
https://github.com/fxsjy/jieba
基本用法
>>> import jieba >>> str1 = '我来到了成都的西南交通大学犀浦校区,发现这儿真不错' >>> seg_list = jieba.cut(str1, cut_all=True) >>> print('全模式分词结果:' + '/'.join(seg_list)) 全模式分词结果:我/来到/了/成都/的/西南/交通/大学/犀/浦/校区/,/发现/这儿/真不/真不错/不错 >>> seg_list = jieba.cut(str1, cut_all=False) >>> print('精确模式分词结果:' + '/'.join(seg_list)) 精确模式分词结果:我/来到/了/成都/的/西南/交通/大学/犀浦/校区/,/发现/这儿/真不错
启用Paddle
这里有个坑,首先不能用最新的python版本,我从3.9.1降到了3.8.7才可以。
另外安装后使用一直报错,最终发现需要 Microsoft Visible C++ 2017 Redistributable 及其以上版本支持
。
import jieba import paddle str1 = '我来到了成都的西南交通大学犀浦校区,发现这儿真不错' paddle.enable_static() jieba.enable_paddle() seg_list = jieba.cut(str1, use_paddle=True) print('Paddle模式分词结果:' + '/'.join(seg_list)) 输出: Paddle模式分词结果:我/来到/了/成都/的/西南交通大学犀浦校区,/发现/这儿/真不错
词性标注
import jieba import paddle # 词性标注分词器 import jieba.posseg as pseg str1 = '我来到了成都的西南交通大学犀浦校区,发现这儿真不错' paddle.enable_static() jieba.enable_paddle() words = pseg.cut(str1,use_paddle=True) for seg, flag in words: print('%s %s' % (seg, flag)) 输出: 我 r 来到 v 了 u 成都 LOC 的 u 西南交通大学犀浦校区, ORG 发现 v 这儿 r 真不错 a
注意:pseg.cut 和 jieba.cut 返回的对象是不一样的!
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 | 人名 | LOC | 地名 | ORG | 机构名 | TIME | 时间 |
调整词典
使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典。
使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。
智能识别新词
将jieba.cut()函数的参数HMM设置为True,即可使用基于汉字成词能力的HMM模型识别新词,即词典中不存在的词。
测试一下,效果一般
搜索引擎模式分词
import jieba str1 = '我来到了成都的西南交通大学犀浦校区,发现这儿真不错' seg_list = jieba.cut_for_search(str1) print('搜索引擎模式分词结果:' + '/'.join(seg_list)) 输出: 搜索引擎模式分词结果:我/来到/了/成都/的/西南/交通/大学/犀浦/校区/,/发现/这儿/真不/不错/真不错
使用自定义词典
用户词典.txt 如下
import jieba str = '心灵感应般地蓦然回首,才能撞见那一低头的温柔;也最是那一低头的温柔,似一朵水莲花不胜凉风的娇羞;也最是那一抹娇羞,才能让两人携手共白首。'; seg_list = jieba.cut(str) print('未加载自定义词典时的精确模式分词结果:\n', '/'.join(seg_list)) jieba.load_userdict('用户词典.txt') seg_list = jieba.cut(str) print('加载自定义词典时的精确模式分词结果:\n', '/'.join(seg_list)) jieba.add_word('最是') seg_list = jieba.cut(str) print('添加自定义词时的精确模式分词结果:\n', '/'.join(seg_list)) jieba.del_word('一低头') seg_list = jieba.cut(str) print('删除自定义词时的精确模式分词结果:\n', '/'.join(seg_list))
关键词提取
关键词是最能反映文本的主题和意义的词语。关键词提取就是从指定文本中提取出与该文本的主旨最相关的词,它可以应用于文档的检索、分类和摘要自动编写等。
从文本中提取关键词的方法主要有两种:
第一种是有监督的学习算法;
这种方法将关键词的提取视为一个二分类问题,先提取出可能是关键词的候选词,再对候选词进行判定,判定结果只有“是关键词”和“不是关键词”两种,基于这一原理设计一个关键词归类器的算法模型,不断地用文本训练该模型,使模型更加成熟,直到模型能准确地对新文本提取关键词;
第二种是无监督的学习算法;
这种方法是对候选词进行打分,取出打分最高的候选词作为关键词,常见的打分算法有TF-IDF和TextRank。jieba模块提供了使用TF-IDF和TextRank算法提取关键词的函数。
#基于TF-IDF算法的关键词提取 from jieba import analyse text = '记者日前从中国科学院南京地质古生物研究所获悉,该所早期生命研究团队与美国学者合作,在中国湖北三峡地区的石板滩生物群中,发现了4种形似树叶的远古生物。这些“树叶”实际上是形态奇特的早期动物,它们生活在远古海洋底部。相关研究成果已发表在古生物学国际专业期刊《古生物学杂志》上。' keywords = analyse.extract_tags(text, topK = 10, withWeight = True, allowPOS = ('n', 'v')) print(keywords) #基于TextRank算法的关键词提取 from jieba import analyse text = '记者日前从中国科学院南京地质古生物研究所获悉,该所早期生命研究团队与美国学者合作,在中国湖北三峡地区的石板滩生物群中,发现了4种形似树叶的远古生物。这些“树叶”实际上是形态奇特的早期动物,它们生活在远古海洋底部。相关研究成果已发表在古生物学国际专业期刊《古生物学杂志》上。' keywords = analyse.textrank(text, topK = 10, withWeight = True, allowPOS = ('n', 'v')) print(keywords)
说明:
extract_tags()
参数sentence为待提取关键词的文本;
参数topK用于指定需返回的关键词个数,默认值为20;
参数withWeight用于指定是否同时返回权重,默认值为False,表示不返回权重,TF或IDF权重越高,返回的优先级越高;
参数allowPOS用于指定返回的关键词的词性,以对返回的关键词进行筛选,默认值为空,表示不进行筛选。
textrank()
和extract_tags()函数的参数基本一致,只有参数allowPOS的默认值不同。
由于算法不同,结果可能会有差异。
停用词过滤
停用词是指在每个文档中都会大量出现,但是对于NLP没有太大作用的词,如“你”“我”“的”“在”及标点符号等。在分词完毕后将停用词过滤掉,有助于提高NLP的效率。
···python
import jieba
with open(‘stopwords.txt’, ‘r+’, encoding = ‘utf-8’)as fp:
stopwords = fp.read().split(‘\n’)
word_list = []
text = ‘商务部4月23日发布的数据显示,一季度,全国农产品网络零售额达936.8亿元,增长31.0%;电商直播超过400万场。电商给农民带来了新的机遇。’
seg_list = jieba.cut(text)
for seg in seg_list:
if seg not in stopwords:
word_list.append(seg)
print(‘启用停用词过滤时的分词结果:\n’, ‘/’.join(word_list))
## 词频统计 词频是NLP中一个很重要的概念,是分词和关键词提取的依据。在构造分词词典时,通常需要为每一个词设置词频。 对分词结果进行词频统计能从客观上反映一段文本的侧重点. ```python import jieba text = '蒸馍馍锅锅蒸馍馍,馍馍蒸了一锅锅,馍馍搁上桌桌,桌桌上面有馍馍。' with open('stopwords.txt', 'r+', encoding = 'utf-8')as fp: stopwords = fp.read().split('\n') word_dict = {} jieba.suggest_freq(('桌桌'), True) seg_list = jieba.cut(text) for seg in seg_list: if seg not in stopwords: if seg in word_dict.keys(): word_dict[seg] += 1 else: word_dict[seg] = 1 print(word_dict) 输出: {'蒸': 3, '馍馍': 5, '锅锅': 1, '一锅': 1, '锅': 1, '搁': 1, '桌桌': 2, '上面': 1}
Be First to Comment