模块安装

pip install jieba

jieba分词器支持4种分词模式:

  1. 精确模式该模式会试图将句子最精确地切分开,适合在文本分析时使用。
  2. 全模式该模式会将句子中所有可以成词的词语都扫描出来,速度也非常快,缺点是不能解决歧义问题,有歧义的词语也会被扫描出来。
  3. 搜索引擎模式该模式会在精确模式的基础上对长词语再进行切分,将更短的词切分出来。在搜索引擎中,要求输入词语的一部分也能检索到整个词语相关的文档,所以该模式适用于搜索引擎分词。
  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}

[Python] 基于 jieba 的中文分词总结的更多相关文章

  1. [python] 使用Jieba工具中文分词及文本聚类概念

    声明:由于担心CSDN博客丢失,在博客园简单对其进行备份,以后两个地方都会写文章的~感谢CSDN和博客园提供的平台.        前面讲述了很多关于Python爬取本体Ontology.消息盒Inf ...

  2. Python基于jieba的中文词云

    今日学习了python的词云技术 from os import path from wordcloud import WordCloud import matplotlib.pyplot as plt ...

  3. python利用jieba进行中文分词去停用词

    中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词. 分词模块jieba,它是python比较好用的分词模块.待分词的字符串可以是 unicod ...

  4. python第三方库------jieba库(中文分词)

    jieba“结巴”中文分词:做最好的 Python 中文分词组件 github:https://github.com/fxsjy/jieba 特点支持三种分词模式: 精确模式,试图将句子最精确地切开, ...

  5. Python第三方库jieba(中文分词)入门与进阶(官方文档)

    jieba "结巴"中文分词:做最好的 Python 中文分词组件 github:https://github.com/fxsjy/jieba 特点 支持三种分词模式: 精确模式, ...

  6. 深度学习实战篇-基于RNN的中文分词探索

    深度学习实战篇-基于RNN的中文分词探索 近年来,深度学习在人工智能的多个领域取得了显著成绩.微软使用的152层深度神经网络在ImageNet的比赛上斩获多项第一,同时在图像识别中超过了人类的识别水平 ...

  7. 结巴(jieba)中文分词及其应用实践

    中文文本分类不像英文文本分类一样只需要将单词一个个分开就可以了,中文文本分类需要将文字组成的词语分出来构成一个个向量.所以,需要分词. 这里使用网上流行的开源分词工具结巴分词(jieba),它可以有效 ...

  8. python词云图与中文分词

    2019-12-12中文文本分词和词云图具体功能介绍与学习代码: import jiebaa="由于中文文本的单词不是通过空格或者标点符号来进行分割"#jieba.lcut()s是 ...

  9. 自制基于HMM的中文分词器

    不像英文那样单词之间有空格作为天然的分界线, 中文词语之间没有明显界限.必须采用一些方法将中文语句划分为单词序列才能进一步处理, 这一划分步骤即是所谓的中文分词. 主流中文分词方法包括基于规则的分词, ...

  10. 基于CRF的中文分词

    http://biancheng.dnbcw.info/java/341268.html CRF简介 Conditional Random Field:条件随机场,一种机器学习技术(模型) CRF由J ...

随机推荐

  1. 【新技术】CentOS系统下docker的安装配置及使用详解

    1 docker简介    Docker 提供了一个可以运行你的应用程序的封套(envelope),或者说容器.它原本是dotCloud 启动的一个业余项目,并在前些时候开源了.它吸引了大量的关注和讨 ...

  2. php 常用数组操作

    php常用的数组操作函数,包括数组的赋值.拆分.合并.计算.添加.删除.查询.判断.排序等 array_combine 功能:用一个数组的值作为新数组的键名,另一个数组的值作为新数组的值 <?p ...

  3. iOS 控制单个控制器旋转

    iOS 控制单个控制器旋转 控制单个ViewController 的旋转 //不旋转,保持竖屏 //iOS 5 - (BOOL) shouldAutorotateToInterfaceOrientat ...

  4. thinkphp中的分表方法

    public function getPartitionTableName($data=array()) { // 对数据表进行分区 if(isset($data[$this->partitio ...

  5. CSAPP LAB: Buffer Overflow

    这是CSAPP官网上的著名实验,通过注入汇编代码实现堆栈溢出攻击.实验材料可到我的github仓库 https://github.com/Cheukyin/CSAPP-LAB/ 选择buffer-ov ...

  6. Sass函数--列表函数

    列表函数简介 列表函数主要包括一些对列表参数的函数使用,主要包括以下几种: length($list):返回一个列表的长度值: nth($list, $n):返回一个列表中指定的某个标签值  join ...

  7. Python正则匹配字母大小写不敏感在读xml中的应用

    需要解决的问题:要匹配字符串,字符串中字母的大小写不确定,如何匹配? 问题出现之前是使用字符串比较的方式,比如要匹配'abc',则用语句: if s == 'abc':#s为需要匹配的字符串 prin ...

  8. nodejs服务端开发学习笔记

    正在学习中,不断改错... 学习了一段时间nodejs,对其中的很多东西还不是很理解,在网上看过很多的例子,希望通过自己的一些总结让自己了解的更全面些,同时也作为学习笔记留存备忘. 准备工作 node ...

  9. laravel get和all区别

      get ,all 都可以获取到模型 all 是直接获取所有,get 是在添加了许多约束之后获取模型,get前面如果不加约束条件的话,效果与all等同

  10. 开关Windows休眠功能

    在windows休眠的时候会把内存里的数据缓存到硬盘的C:/Hiberfil.sys文件,万一断电能够从中恢复状态,然而这对SSD硬盘损耗很大,如果没必要还是关了吧: 关闭: powercfg -h ...