NLP4:结巴分词

简介: NLP4:结巴分词

一、实验内容

使用结巴分词工具进行分词、关键词提取与词性标注。

二、实验步骤

1.安装结巴分词

# from _future_ import unicode_literals # 将模块中显式出现的所有字符串转为unicode类型
# 从python2.6以后就用不过到了,已经内置到python内置了
import sys
sys.path.append("../")
import jieba
import jieba.posseg
import jieba.analyse

2. 读入文本文件中的内容,利用结巴分词的三种分词模式进行分词

报错:AttributeError: ‘NoneType’ object has no attribute ‘decode’

原因:提示有一个变量的值是None,None 的类型是NoneType , 它没有decode 方法。

解决:把txt[0]转为str形式

list1 = jieba.load_userdict("D:\Desktop\\1.txt")
print(list1)
None
txt = open("D:\Desktop\\1.txt",'r',encoding='utf-8').readlines()
list0 = txt[0]
print(list0)
list1 = str(txt[0])
list1
阳光包裹着奔跑,被予以光辉灿烂的自由。满堂花醉三千客,一剑霜寒十四州。阳光包裹着奔跑,被予以光辉灿烂的自由。请保持这一份热爱,奔赴下一场山海。
'阳光包裹着奔跑,被予以光辉灿烂的自由。满堂花醉三千客,一剑霜寒十四州。阳光包裹着奔跑,被予以光辉灿烂的自由。请保持这一份热爱,奔赴下一场山海。'

之后就可以跑通了。

① 精确模式

试图将句子最精确地切开,适合文本分析;

cut_all参数默认为False,所有使用cut方法时默认为精确模式

#精确模式
seg_list = jieba.cut(list1,cut_all=False) 
seg_list
print ("Default Mode:", "/ ".join(seg_list)) #精确模式
Default Mode: 阳光/ 包裹/ 着/ 奔跑/ ,/ 被/ 予以/ 光辉灿烂/ 的/ 自由

② 全模式

把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义;

#全模式
seg_list = jieba.cut(list1,cut_all=True) 
print ("Full Mode:", "/ ".join(seg_list))
Full Mode: 阳光/ 包裹/ 着/ 奔跑/ ,/ 被/ 予以/ 光辉/ 光辉灿烂/ 灿烂/ 的/ 自由

③ 搜索引擎模式

在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

#搜索引擎模式
seg_list = jieba.cut_for_search(list1) 
print ("Search Mode:", ", ".join(seg_list))
Search Mode: 阳光, 包裹, 着, 奔跑, ,, 被, 予以, 光辉, 灿烂, 光辉灿烂, 的, 自由

3. 对上述文件中的词语进行词性标注

#词性标注
words = jieba.posseg.cut(list1)
for  word, flag in  words: 
    print('%s %s' % (word, flag))
阳光 nr
包裹 v
着 uz
奔跑 v
, x
被 p
予以 v
光辉灿烂 i
的 uj
自由 a
。 x
满堂 nr
花醉 nr
三千 m
客 n
, x
一剑 n
霜寒 n
十四 m
州 n
。 x
阳光 nr
包裹 v
着 uz
奔跑 v
, x
被 p
予以 v
光辉灿烂 i
的 uj
自由 a
。 x

4. 设置停用词表去掉前三的高频词,再次统计

# 统计上述文件中的前十个高频词汇
words = jieba.lcut(txt[0])
print("words:",words)
counts = {}
for word in words:
    if len(word) == 1: # 将标点符号不列入词频统计
        continue
    else:
        counts[word] = counts.get(word,0) + 1
print("count:",counts)
result=[]
result=sorted(counts.items(),key=lambda x:x[1],reverse=True)
print("result:",result)
print("top10 result:",result[:10])
words: ['阳光', '包裹', '着', '奔跑', ',', '被', '予以', '光辉灿烂', '的', '自由', '。', '满堂', '花醉', '三千', '客', ',', '一剑', '霜寒', '十四', '州', '。', '阳光', '包裹', '着', '奔跑', ',', '被', '予以', '光辉灿烂', '的', '自由', '。']
count: {'阳光': 2, '包裹': 2, '奔跑': 2, '予以': 2, '光辉灿烂': 2, '自由': 2, '满堂': 1, '花醉': 1, '三千': 1, '一剑': 1, '霜寒': 1, '十四': 1}
result: [('阳光', 2), ('包裹', 2), ('奔跑', 2), ('予以', 2), ('光辉灿烂', 2), ('自由', 2), ('满堂', 1), ('花醉', 1), ('三千', 1), ('一剑', 1), ('霜寒', 1), ('十四', 1)]
top10 result: [('阳光', 2), ('包裹', 2), ('奔跑', 2), ('予以', 2), ('光辉灿烂', 2), ('自由', 2), ('满堂', 1), ('花醉', 1), ('三千', 1), ('一剑', 1)]
# 方法二
tags = jieba.analyse.extract_tags(txt[0], topK=10)
print(",".join(tags))
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\15488\AppData\Local\Temp\jieba.cache
Loading model cost 0.754 seconds.
Prefix dict has been built successfully.
光辉灿烂,奔跑,包裹,予以,阳光,霜寒,花醉,自由,满堂,下一场
# 通过设置停用词表去掉前三的高频词,再次进行统计
jieba.analyse.set_stop_words("D:\Desktop\stopwords.txt")#加载停用词词表
tags = jieba.analyse.extract_tags(txt[0], topK=10)
print(",".join(tags))
光辉灿烂,予以,霜寒,花醉,自由,满堂,下一场,一剑,山海,奔赴

可以看到,“奔跑”,“包裹”,“阳光”三个词不见了

5. 对上述文件中的关键词进行提取,提取个数为15个。

# 对上述文件中的关键词进行提取,提取个数为15个
tags = jieba.analyse.extract_tags(txt[0], topK=15)
print(",".join(tags))
光辉灿烂,予以,霜寒,花醉,自由,满堂,下一场,一剑,山海,奔赴,热爱,三千,十四,一份,保持

6. 自定义词典

将文本:卓拉格奥尔吉,格里沙格里高里,热尼亚叶甫根尼

在精确模式下分词为:卓拉/格奥尔吉,格里沙/格里高里,热尼亚/叶甫根尼。

#精确模式
seg_list = jieba.cut(list1,cut_all=False) 
seg_list
print ("Default Mode:", "/ ".join(seg_list)) #精确模式
# 自定义词典
test_text = "卓拉格奥尔吉,格里沙格里高里,热尼亚叶甫根尼"
test_text1 = jieba.cut(test_text,cut_all=False)
print ("Default Mode:", "/ ".join(test_text1)) #精确模式
# 卓拉/格奥尔吉,格里沙/格里高里,热尼亚/叶甫根尼
jieba.load_userdict("D:\Desktop\jiebaDict.txt")
test_text2 = jieba.cut(test_text,cut_all=False)
print ("Self Mode:", "/ ".join(test_text2))
Default Mode: 卓拉/ 格奥尔/ 吉/ ,/ 格里沙/ 格里/ 高里/ ,/ 热尼亚/ 叶甫/ 根尼
Self Mode: 卓拉/ 格奥尔吉/ ,/ 格里沙/ 格里高里/ ,/ 热尼亚/ 叶甫根尼
#关键词提取
s = '''
此外,公司拟对全资子公司吉林欧亚置业有限公司增资4.3亿元,增资后,吉林欧亚置业注册   资本由7000万元增加到5亿元。吉林欧亚置业主要经营范围为房地产开发及百货零售等业务。
目前在建吉林欧亚城市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。  '''
for  x, w in  jieba.analyse.extract_tags(s, topK=10, withWeight=False): 
    print('%s %s' % (x, w))
# 第一个参数:待提取关键词的文本
# 第二个参数:返回关键词的数量,重要性从高到低排序
# 第三个参数:是否同时返回每个关键词的权重
# 第四个参数:词性过滤,为空表示不过滤,若提供则仅返回符合词性要求的关键词
欧 亚
吉 林
置 业
万 元
增 资
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-54-c9207878d691> in <module>
      5 目前在建吉林欧亚城市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。  '''
      6 
----> 7 for  x, w in  jieba.analyse.extract_tags(s, topK=10, withWeight=False):
      8     print('%s %s' % (x, w))
      9 
ValueError: too many values to unpack (expected 2)
#关键词提取
s = '''
此外,公司拟对全资子公司吉林欧亚置业有限公司增资4.3亿元,增资后,吉林欧亚置业注册   资本由7000万元增加到5亿元。吉林欧亚置业主要经营范围为房地产开发及百货零售等业务。
目前在建吉林欧亚城市商业综合体项目。2013年,实现营业收入0万元,实现净利润-139.13万元。  '''
for  x, w in  jieba.analyse.extract_tags(s, topK=20, withWeight=True): 
    print('%s %s' % (x, w))
# 第一个参数:待提取关键词的文本
# 第二个参数:返回关键词的数量,重要性从高到低排序
# 第三个参数:是否同时返回每个关键词的权重
# 第四个参数:词性过滤,为空表示不过滤,若提供则仅返回符合词性要求的关键词
欧亚 0.7148056394033334
吉林 0.6453082221991667
置业 0.478531921956875
万元 0.33220407634875
增资 0.3288276861054167
4.3 0.24905765631041665
7000 0.24905765631041665
2013 0.24905765631041665
139.13 0.24905765631041665
实现 0.19486376152458332
综合体 0.19074469840854166
经营范围 0.18985803977479165
亿元 0.18745378397625
在建 0.17176428835750002
全资 0.16822244884583334
百货 0.163858254571875
注册 0.15190267518354167
零售 0.14443267604520835
子公司 0.14291960962
营业 0.13630174790083333
#textrank
for  x, w in  jieba.analyse.textrank(s, withWeight=True): 
    print('%s %s' % (x, w))
# 第一个参数:待提取关键词的文本
# 第二个参数:返回关键词的数量,重要性从高到低排序
# 第三个参数:是否同时返回每个关键词的权重
# 第四个参数:词性过滤,为空表示过滤所有,与TF—IDF不一样!
欧亚 1.0
吉林 0.9364641330019609
置业 0.6432179048068093
实现 0.585402153793541
收入 0.43240063293299474
增资 0.4058272733028047
子公司 0.35273363353936127
城市 0.3492725633507077
商业 0.3476243659188807
在建 0.3200580083086885
零售 0.30288826958119686
百货 0.3021737387349968
全资 0.2993380759226258
营业 0.29926807751968304
注册 0.29865040909098856
综合体 0.292992290385712
开发 0.28202080738141794
业务 0.2793133445548325
有限公司 0.27682069669610626
经营范围 0.2651294160502385
#加载停用词词表
jieba.analyse.set_stop_words('stopwords.txt')
for  x, w in  jieba.analyse.textrank(s, withWeight=True): 
    print('%s %s' % (x, w))
# 创建停用词list
def stopwordslist(filepath):
    stopwords = [line.strip() for line in open(filepath, 'r', encoding='utf-8').readlines()]
    return stopwords
欧亚 1.0
吉林 0.9364641330019609
置业 0.6432179048068093
实现 0.585402153793541
收入 0.43240063293299474
增资 0.4058272733028047
子公司 0.35273363353936127
城市 0.3492725633507077
商业 0.3476243659188807
在建 0.3200580083086885
零售 0.30288826958119686
百货 0.3021737387349968
全资 0.2993380759226258
营业 0.29926807751968304
注册 0.29865040909098856
综合体 0.292992290385712
开发 0.28202080738141794
业务 0.2793133445548325
有限公司 0.27682069669610626
经营范围 0.2651294160502385

其他:实验四:结巴分词

实验内容

本实验旨在使用结巴分词库对文本进行分词,并进行一系列文本处理操作,包括词性标注、停用词过滤、关键词提取以及自定义词典的应用。

实验步骤

步骤一:安装结巴分词

首先,你需要安装结巴分词库。你可以使用pip进行安装:

pip install jieba

步骤二:读入文本文件

在Python中,你可以使用open函数读入文本文件的内容,然后对文本进行处理。以下是一个示例:

with open('your_text_file.txt', 'r', encoding='utf-8') as file:
    text = file.read()

步骤三:分词操作

结巴分词库提供了三种分词模式:精确模式、全模式和搜索引擎模式。你可以按如下方式使用它们:

import jieba
# 精确模式
seg_exact = jieba.cut(text, cut_all=False)
# 全模式
seg_full = jieba.cut(text, cut_all=True)
# 搜索引擎模式
seg_search = jieba.cut_for_search(text)

步骤四:词性标注

你可以使用结巴分词库的词性标注功能来标注每个词的词性。以下是示例代码:

import jieba.posseg as pseg
words = pseg.cut(text)
for word, flag in words:
    print(f'{word}\t{flag}')

步骤五:停用词过滤与高频词统计

可以创建一个停用词表,将文本中的高频词(通常是虚词、无实际语义的词)去掉,以提高文本的质量。你可以使用Python的collections库来进行高频词统计。

步骤六:关键词提取

使用结巴分词库的jieba.analyse模块,可以轻松提取文本中的关键词。以下是示例代码:

from jieba import analyse
# 提取15个关键词
keywords = analyse.extract_tags(text, topK=15)
print(keywords)

步骤七:自定义词典

结巴分词库支持自定义词典,你可以添加自己的专业词汇或特定领域的词语,以提高分词准确性。自定义词典的格式为每行一个词语。

jieba.load_userdict('your_custom_dict.txt')

请根据实际需要进行适当的修改和扩展,这些步骤将帮助你利用结巴分词库进行文本处理和分析。

目录
相关文章
|
机器学习/深度学习 存储 人工智能
NLP教程(7) - 问答系统
本文介绍 NLP 中的问答系统(Question Answering),包括 NLP 中的问答系统场景、动态记忆网络(Dynamic Memory Networks)、问答(QA)、对话、MemNN、DCN、VQA等。
1328 1
NLP教程(7) -  问答系统
|
4月前
|
自然语言处理 知识图谱
自然语言处理 Paddle NLP - 词法分析技术及其应用
自然语言处理 Paddle NLP - 词法分析技术及其应用
35 0
|
7月前
|
机器学习/深度学习 数据采集 自然语言处理
自然语言处理(NLP)在文本分析中的应用
【5月更文挑战第31天】自然语言处理(NLP)在数字化时代助力文本分析,涉及情感分析、信息提取、文本分类、机器翻译和问答系统等领域。Python示例展示了NLP如何提取文本实体。深度学习技术如RNN、LSTM和GRU推动NLP发展,但语言复杂性、语义理解及数据质量仍是挑战。NLP将在处理海量文本信息和跨语言交流中发挥更大作用,创造新机遇。
132 0
|
7月前
|
机器学习/深度学习 自然语言处理 算法
在NLP中,什么是词性标注?
【2月更文挑战第13天】【2月更文挑战第37篇】在NLP中,什么是词性标注?
211 0
|
7月前
|
机器学习/深度学习 存储 人工智能
自然语言处理(NLP)的瑰宝:文本分析的无尽可能
自然语言处理(NLP)是一项引人注目的技术,它在文本分析领域拥有广泛的应用。本文将深入探讨NLP的核心概念、关键技术以及其在文本分析中的应用场景,展示NLP为我们带来的无尽可能。
|
机器学习/深度学习 自然语言处理
NLP5:NLTK词性标注
NLP5:NLTK词性标注
157 0
|
机器学习/深度学习 数据采集 自然语言处理
nlp入门之nltk工具的使用
本文作为nlp入门开山第三篇,简要的介绍了nltk工具的使用
|
自然语言处理 Python
【NLP Tool -- NLTK】NLTK进行英文情感分析、分词、分句、词性标注(附代码)
NLP自然语言处理之NLTK工具的使用,进行英文情感分析、分词、分句、词性标注(附代码)
1000 0
|
机器学习/深度学习 自然语言处理 算法
NLP学习笔记(九) 分词(上)
NLP学习笔记(九) 分词(上)
79 0
|
自然语言处理 算法
NLP学习笔记(十) 分词(下)
NLP学习笔记(十) 分词(下)
169 0