当前位置:   article > 正文

002_文本分析与挖掘(jieba库三种分词模式,SnowNLP的简答演示,去除停用词,提取关键词,构建特征向量)_掌握 jieba、snownlp 等文本分析库

掌握 jieba、snownlp 等文本分析库

一、jieba三种分词模式

(一)概述

        jieba 库的分词原理是利用一个中文词库,将待分词的内容与分词词库进行比对,通过图结构和动态规划方法找到最大概率的词组;除此之外,jieba 库还提供了增加自定义中文单词的功能。

支持三种分词模式

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

        result1 = jieba.cut(str2)

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

        result2 =jieba.cut(str1,cut_all = True)

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

        result3 = jieba.cut_for_search(str3)

(二)jupyter安装jieba库

输入pip install jieba wordcloud -i https://pypi.tuna.tsinghua.edu.cn/simple安装jieba和词云

安装完成!

(三)代码演示

代码与结果展示:

代码

  1. import jieba
  2. str = "本法所称突发事件,是指突然发生,造成或者可能造成严重社会危害,需要采取应急处置措施予以应对的自然灾害、事故灾难、公共卫生事件和社会安全事件。"
  3. # 精准模式:将句子最精确地切开,适合文本分析
  4. result1 = jieba.cut(str)
  5. print("/".join(result1))
  6. # 全模式:所有的可以成词的词语都扫描出来(会有重叠的词)
  7. result2 =jieba.cut(str,cut_all = True)
  8. print("/".join(result2))
  9. # 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
  10. result3 = jieba.cut_for_search(str)
  11. print("/".join(result3))

(四)cut和lcut的区别

Jieba的cut和lcut分词:

(1)从效果看,二者没区别,区别在于结果的表示形式

(2)cut的结果是迭代器,需要进一步处理才能看到分词具体结果;lcut生成一个列表的形式,可以直接输出

二、SnowNLP

(一)概述

        SnowNLP是一个常用的Python文本分析库。SnowNLP处理的是unicode编码,使用时需要自行decode成unicode。

        Snownlp主要功能包括: (1)文本分类(2)转换成拼音(3) 繁体转简体(4)提取文本关键词(5)提取文本摘要

(二)安装snownlp

输入pip install snownlp -i https://pypi.tuna.tsinghua.edu.cn/simple

(三)代码演示

代码与结果展示:

代码:

  1. from snownlp import SnowNLP
  2. str = "本法所称突发事件,是指突然发生,造成或者可能造成严重社会危害,需要采取应急处置措施予以应对的自然灾害、事故灾难、公共卫生事件和社会安全事件。"
  3. s1 = SnowNLP(str)
  4. print(s1.words) # 输出切分分词
  5. print()
  6. print(s1.pinyin) # 输出拼音
  7. print()
  8. print(s1.summary(4)) # 自动摘要(个数为4)
  9. s2 = SnowNLP(u'「繁體字」「繁體中文」的叫法在臺灣亦很常見。')
  10. print(s2.han) # 繁体转为简体

三、去除停用词

(一)概述

        停用词是指在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。 这些停用词都是人工输入、非自动化生成的,生成后的停用词会形成一个停用词表。

(二)代码演示

(1)停用词表在网上进行下载,保存在按当地的txt文档中

(2)准备需要进行分析的文本文档

两个文档部分展示如下:

 “去除停用词”代码:

  1. import jieba
  2. # 读入需要处理的文本
  3. with open ("Texts.txt", "r", encoding='UTF-8') as fp:
  4. words = fp.read()
  5. result_text = jieba.lcut(words)
  6. #print(result_text)
  7. # 读入停用词表,利用jieba分词以列表形式输出
  8. with open ("stopwords_all.txt", "r", encoding='UTF-8') as fs:
  9. stopwords = fs.read()
  10. result_stop = jieba.lcut(stopwords)
  11. #print(result_stop)
  12. new_words = []
  13. for i in result_text:
  14. if i not in stopwords:
  15. new_words.append(i)
  16. print("去除停用词后的结果:", new_words)

结果展示:

四、提取关键词

介绍两种方式:TF-IDF算法和textrank

这两种算法都只针对str类型

(一)TF-IDF算法

该算法是提取句子级的关键字

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

  • topK,关键词个数
  • withWeight,是否显示其权重,默认False
  • allowPOS,指定词性(如:n名词,v动词,ns地点),默认为空
  1. import jieba.analyse
  2. # 提取20个关键词,词性筛选为名词和动词
  3. # words = fp.read(),此处的words是str类型
  4. keywords1 = jieba.analyse.extract_tags(words, topK=20, withWeight=False, allowPOS=('n','v'))
  5. print(keywords1)

(二)Textrank算法

  1. keywords2 = jieba.analyse.textrank(words, topK=20, withWeight=False, allowPOS=('n','v'))
  2. print(keywords2)

五、特征向量构建

(一)CountVectorizer()函数

CountVectorizer会将文本中的词语转换为词频矩阵,它通过fit_transform函数计算各个词语出现的次数。

  1. from sklearn.feature_extraction.text import CountVectorizer
  2. # texts = [" ".join(keywords1)," ".join(keywords2)] # 可以像这样将两个列表化为一个
  3. texts1 = [" ".join(new_words)] # 消除逗号,将其化为只有一个元素的列表
  4. print(texts1)

  1. cv = CountVectorizer()
  2. cv_fit = cv.fit_transform(texts1)
  3. # 词汇表,字典型
  4. print(cv.vocabulary_)
  5. # 文本矩阵。(01922 表示为:第0个列表元素;词典中索引为192的元素;词频为2
  6. print(cv_fit)
  7. # 将结果转化为稀疏矩阵。表示第0个列表元素,从第0个字符元素开始,其词频大小
  8. print(cv_fit.toarray())

(1)字典型,结果展示

(2)文本矩阵,部分结果展示

(3)稀疏矩阵,结果展示

(二)TfidfVectorizer()函数

将文本进行向量化表示

  1. from sklearn.feature_extraction.text import TfidfVectorizer
  2. texts2 = [" ".join(keywords1)," ".join(keywords2)]
  3. tv = TfidfVectorizer(norm=None)
  4. tv_fit = tv.fit_transform(texts2)
  5. print("特征向量:\n", tv.vocabulary_)
  6. print("所有词汇如下:\n",tv.get_feature_names_out()) # 去除了重复的词汇
  7. print("TF-IDF文档-词矩阵:\n", tv_fit.toarray())
  8. print("文本矩阵:\n", tv_fit)

结果展示:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/742662
推荐阅读
相关标签
  

闽ICP备14008679号