分享巨牛人工智能学习网站,附教程与资料获取方式

[id_[id_7[id_17[id_1627777703]1340322]597378]018628121]id_1791124455]

分享巨牛人工智能学习网站,附教程与资料获取方式

前些天发现了一个非常厉害的人工智能学习网站,它的讲解通俗易懂,语言风趣幽默,我忍不住要把它分享给大家。

点击跳转到网站:人工智能从入门到精通教程

本文电子版获取方式:

我分享了「Python 数据分析(4):jieba 分词详解.pdf」在夸克网盘。点击链接就能保存该文件。可打开「夸克 APP」进行在线查看,并且它支持多种文档格式的转换。

[id_2107082272]

jieba分词器 1. jieba分词器的分词模式说明

jieba 分词器可以进行词性标注。

(1)精确模式

[id_904230392]

(2)全模式

该模式会扫描出句子中所有成词的词语,且速度很快。其缺点是不能解决歧义问题,有歧义的词语也会被扫描出来。

(3)搜索引擎模式

该模式会在精确模式基础上对长词进行切分,切分出更短的词语。在搜索引擎中,即便只输入词语的一部分,也能检索到整个词语相关的文档,因此该模式适用于搜索引擎分词。

(4)Paddle模式

该模式借助 PaddlePaddle 深度学习框架,通过训练序列标注网络模型来达成分词的目的,并且还能够支持词性标注。这种模式只有在 4.0 及更高版本的 jieba 分词器中才可以被使用。要使用该模式的话,就需要安装 paddlepaddle 模块。

2. jieba分词器的基本用法

在 Python 里,能够运用 jieba 模块的 cut()函数来进行分词操作,而其返回的结果是一个迭代器。

cut()函数有4个参数:

待分词文本 cut_all 有两种设置,分别是全模式(True)和精确模式(False),默认是 False;use_paddle 可控制是否使用 Paddle 模式进行分词;HMM 能控制是否使用 HMM 模式识别新词,这是三种模式的案例。

设置参数cut_all为True:全分词

import jieba
str1 = 我来到了西北皇家理工学院。我发现这里的环境真不错。我发现这里的设施真不错。我发现这里的氛围真不错。
seg_list = jieba.cut(str1, cut_all=True)    # 使用全模式进行分词  生成列表
print('全模式分词结果:', '/'.join(seg_list))  # /拼接列表元素

全模式分词结果: 我/来到/了/西北/皇家/理工/理工学/理工学院/工学/工学院/学院/,/发现/这儿/真不/真不错/不错

设置参数cut_all为False:精确分词

import jieba
str1 = '我来到了西北皇家理工学院,发现这儿真不错'
seg_list = jieba.cut(str1, cut_all=False)  # 使用精确模式进行分词
print('精确模式分词结果:', '/'.join(seg_list))

精确式分词结果: 我/来到/了/西北/皇家/理工学院/,/发现/这儿/真不错

cut_all参数不给定时,默认为false,即精确分词

import jieba
str1 = '我来到了西北皇家理工学院,发现这儿真不错'
seg_list = jieba.cut(str1)
print('全模式分词结果:', '/'.join(seg_list))

精确模式分词结果: 我/来到/了/西北/皇家/理工学院/,/发现/这儿/真不错

use_paddle参数可以设置开启paddle模式

import jieba
import paddle
str1 = '我来到了西北皇家理工学院,发现这儿真不错'
#jieba.enable_paddle()   已经停用
paddle.enable_static()
seg_list = jieba.cut(str1, use_paddle=True)  #使用paddle模式进行分词
print('Paddle模式分词结果:', '/'.join(seg_list))

Paddle模式分词结果: 我/来到/了/西北/皇家/理工学院/,/发现/这儿/真不错

(2)词性标注

import jieba
import jieba.posseg as pseg
#jieba.enable_paddle()
str2 = '上海自来水来自海上'
seg_list = pseg.cut(str2, use_paddle=True)  #使用posseg进行分词
for seg, flag in seg_list:
    print(seg, flag)

上海 ns
自来水 l
来自 v
海上 s

(3)识别新词:HMM参数

HMM 参数被设置为 True 时,能够识别新词,也就是词典里原本不存在的词。

词典为jieba分词自带的字典。

如下:他知

import jieba
str3 = 他知科技研发有限公司从事互联网行业相关业务。
seg_list = jieba.cut(str3, HMM=True)    #HMM默认为True,所以可以不设置
print('精确模式分词结果:', '/'.join(seg_list))

精确模式分词结果: 他知/科技/研发/有限公司/是/一家/互联网/行业/的/公司

搜索引擎模式分词:使用 cut_for_search()函数

cut_for_search()函数具备进行搜索引擎模式分词的能力。

该函数只有两个参数:

第一个参数:待分词文本第二个参数:HMM,默认为True

import jieba
str1 = '我来到了西北皇家理工学院,发现这儿真不错'
seg_list = jieba.cut_for_search(str1)
print('搜索引擎模式分词结果:', '/'.join(seg_list))

搜索引擎模式分词结果: 我/来到/了/西北/皇家/理工/工学/学院/理工学/工学院/理工学院/,/发现/这儿/真不/不错/真不错

3. 调整词典

用户能够自行生成一个自定义词典,该词典包含了 jieba 分词自带字典里所没有的词语,然后将其添加到程序当中。

注意:词频、词性可省略。

未加载自定义字典时使用精确切分来进行分词

import jieba
seg_list = jieba.cut(
    蓦然回首,仿佛心灵感应,才能撞见那低头的温柔;那低头的温柔,恰似一朵水莲花不胜凉风的娇羞;那一抹娇羞,能够让两人携手共赴白首。)
print(未加载自定义词典时,精确模式的分词结果为:, '/'.join(seg_list))

未加载自定义词典时的精确模式分词结果:
 心灵感应/般地/蓦然回首/,/才能/撞见/[id_1809732400]/低头/的/温柔/;/也/最/是/那/一/低头/的/温柔/,/似/一朵/水/莲花/不胜/凉风/的/娇羞/;/也/最/是/那/一抹/娇羞/,/才能/让/两人/携手/共/白首/。

(1)使用自定义词典:load_userdict()函数

load_userdict()函数加载用户自定义字典

import jieba
jieba.load_userdict('用户词典.txt')
seg_list = jieba.cut(
    '心灵感应般地蓦然回首,才能撞见那一低头的温柔;也最是那一低头的温柔,似一朵水莲花不胜凉风的娇羞;也最是那一抹娇羞,才能让两人携手共白首。')
print(加载自定义词典时会得到精确模式的分词结果。, '/'.join(seg_list))

加载自定义词典时的精确模式分词结果:
 心灵感应/般地/蓦然回首/,/才能/撞见/那/一低头/的/温柔/;/也/最/是/那/一低头/的/温柔/,/似/一朵/水莲花/不胜/凉风/的/娇羞/;/也/最/是/那/一抹/娇羞/,/才能/让/两人/携手/共/白首/。

动态修改词典,包括 add_word()函数和 del_word()函数。

1. 动态添加词:add_word()

import jieba
jieba.load_userdict('用户词典.txt')
jieba.add_word('最是')  添加词,然而这些词不会被添加到用户字典.txt 文件里。
seg_list = jieba.cut(
    '心灵感应般地蓦然回首,才能撞见那一低头的温柔;也最是那一低头的温柔,似一朵水莲花不胜凉风的娇羞;也最是那一抹娇羞,才能让两人携手共白首。')
print('添加自定义词时的精确模式分词结果:\n', '/'.join(seg_list))

添加自定义词时的精确模式分词结果:
 心灵感应/般地/蓦然回首/,/才能/撞见/那/一低头/的/温柔/;/也/最是/那/一低头/的/温柔/,/似/一朵/水莲花/不胜/凉风/的/娇羞/;/也/最是/那/一抹/娇羞/,/才能/让/两人/携手/共/白首/。

2.动态删除词:del_word()

import jieba
jieba.load_userdict('用户词典.txt')
jieba.del_word('一低头')
seg_list = jieba.cut('心灵感应般地蓦然回首,才能撞见那一低头的温柔;也最是那一低头的温柔,似一朵水莲花不胜凉风的娇羞;也最是那一抹娇羞,才能让两人携手共白首。')
print('删除自定义词时的精确模式分词结果:\n', '/'.join(seg_list))

删除自定义词时的精确模式分词结果:
 心灵感应/般地/蓦然回首/,/才能/撞见/那一/低头/的/温柔/;/也/最/是/那/一/低头/的/温柔/,/似/一朵/水莲花/不胜/凉风/的/娇羞/;/也/最/是/那/一抹/娇羞/,/才能/让/两人/携手/共/白首/。

(3)调节词频:suggest_freq()函数

不修改词频前:

#不修改词频
import jieba
str3 = 他觉得在未来的几年当中,健康产业在国内生产总值(GDP)中会占据比例第一。
seg_list = jieba.cut(str3)
print('精确模式分词结果:\n', '/'.join(seg_list))

精确模式分词结果:
 他/认为/未来/几年/健康/产业/在/GDP/中将/占/比/第一/。

修改词频后:

#修改词频
import jieba
str3 = '他认为未来几年健康产业在GDP中将占比第一。'
jieba.suggest_freq(('中', '将'), True)   #修改词频  强制“中将”
jieba.suggest_freq('占比', True)         #强制让“占比”作为一次词
seg_list = jieba.cut(str3, HMM=False)
print('精确模式分词结果:\n', '/'.join(seg_list))

精确模式分词结果:
 他/认为/未来/几年/健康/产业/在/GDP/中/将/占比/第一/。

4. 关键词提取

从文本文件中提取关键词的理论方法主要有两种:

第一种是有监督的学习方法,这种方法把关键词的提取当作一个二分类问题,即要么属于关键词,要么不属于关键词。

第二种学习方法是无监督的。这种方法会对候选词进行打分,其中打分最高的候选词就是关键词。

常见的打分算法有TF-IDF和TextRank。

关键词提取是基于 TF-IDF 算法的,使用的是 extract_tags()函数。

extract_tags()函数可以依据 TF-IDF 算法来提取关键词。

jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())

该函数有四个参数:

allowPOS 用于指定筛选关键词的词性,默认不分词性。

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

# 基于TF-IDF算法的关键词提取
from jieba import analyse
text = 记者从中国科学院南京地质古生物研究所获悉。该所早期生命研究团队与美国学者展开合作。在中国湖北三峡地区的石板滩生物群里。发现了 4 种远古生物,其形似树叶。这些“树叶”实则是早期动物,形态奇特。它们生活在远古海洋底部。相关研究成果已在古生物学国际专业期刊《古生物学杂志》上发表。
keywords = analyse.extract_tags(text, topK=10, withWeight=True, allowPOS=('n', 'v'))
print(keywords)

[('古生物学', 0.783184303024), ('树叶', 0.6635900468544), ('生物群', 0.43238540794400004), ('古生物', 0.38124919198039997), ('期刊', 0.36554014868720003), ('石板', 0.34699723913040004), ('形似', 0.3288202017184), ('研究成果', 0.3278758070928), ('团队', 0.2826627565264), ('获悉', 0.28072960723920004)]

使用 TextRank 算法来进行关键词提取,其中用到了 textrank()函数。

textrank()函数可以依据 TextRank 算法来提取关键字。

使用 jieba.analyse.textrank 对 sentance 进行处理,设置 topK 为 20,不返回权重信息,允许的词性为 'ns'、'n'、'vn'、'v'。

两种方法的区别是默认提取的词性不同

当然算法不同,结果可能有差异

基于TextRank算法的关键词提取

# 基于TextRank算法的关键词提取
from jieba import analyse
text = '记者日前从中国科学院南京地质古生物研究所获悉,该所早期生命研究团队与美国学者合作,在中国湖北三峡地区的石板滩生物群中,发现了4种形似树叶的远古生物。这些“树叶”实际上是形态奇特的早期动物,它们生活在远古海洋底部。相关研究成果已发表在古生物学国际专业期刊《古生物学杂志》上。'
keywords = analyse.textrank(text, topK=10, withWeight=True, allowPOS=('n', 'v'))
print(keywords)

[('古生物学', 1.0), ('树叶', 0.8797803471074045), ('形似', 0.6765568513591282), ('专业', 0.6684901270801065), ('生物', 0.648692596888148), ('发表', 0.6139083953888275), ('生物群', 0.59981945604977), ('期刊', 0.5651065025924439), ('国际', 0.5642917600351786), ('获悉', 0.5620719278559326)]

5. 停用词过滤

停用词包含大量非关键词的词,如“你”“我”“的”“在”以及标点符号等,这些词在文中频繁出现。

我们可以把它们过滤掉

启动停用词过滤前:

#未启动停用词过滤
import jieba
text = 商务部 4 月 23 日发布的数据表明,在一季度这个时间段内,全国农产品通过网络实现的零售额达到了 936.8 亿元,并且呈现出 31.0%的增长态势;电商直播的场次超过了 400 万场。电商给农民带来了新的发展机遇。
seg_list = jieba.cut(text)
print('未启用停用词过滤时的分词结果:\n', '/'.join(seg_list))

未启用停用词过滤时的分词结果:
 商务部/4/月/23/日/发布/的/数据/显示/,/一季度/,/全国/农产品/网络/零售额/达/936.8/亿元/,/增长/31.0%/;/电商/直播/超过/400/万场/。/电商/给/农民/带来/了/新/的/机遇/。

为了过滤停用词,需要有一个停用词词典。

我们能够自己去制作停用词词典。停用词词典的内容会依据 NLP 的目的而发生变化。

如果制作速度比较慢,那么可以通过百度去下载一个停用词词典,然后稍微对其进行修改,使其成为自己所想要的样子。

启动停用词过滤后:

#启动停用词过滤
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))

启用停用词过滤时的分词结果:
 商务部/4/月/23/日/发布/数据/显示/一季度/全国/农产品/网络/零售额/达/936.8/亿元/增长/31.0%/电商/直播/超过/400/万场/电商/农民/带来/新/机遇

注意:我们根据不同的编码方式,修改encoding参数

6. 词频统计

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     #存在则词频+1
        else:
            word_dict[seg] = 1      #不存在则存入键值对
print(word_dict)

{'蒸': 3, '馍馍': 5, '锅锅': 1, '一锅': 1, '锅': 1, '搁': 1, '桌桌': 2, '上面': 1}

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

34阅读

外国教程python,python编程教学视频

2026年09月02日

28阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

22阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

27阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

23阅读