单文本分析--词频统计

任务说明:读取单个或多个文本内容(txt,word,pdf),对文章进行分词(中文),并统计每个词语出现的次数并按从大到小排序。同时通过停用词库排除停用词,并展示结果读取单个文本内容(txt,word,pdf),对文章进行分词(中文),并统计每个词语出现的次数并按从大到小排序。同时通过停用词库排除停用词。

需要掌握的知识:
(1)掌握自然语言分析的基本术语:词频,停用词
(2)jieba模块的使用
(3)collections模块Counter函数
(4)读取不同格式文本的方法

知识覆盖
(1)词频:指某一个给定的词语在该文件中出现的次数
停用词:停用词是指在信息检索中,对于结果或目的 无意义,无作用的词或词组。如‘的’,‘了’,‘是’等。这些停用词都是人工输入、非自动化生成的,生成后的停用词会形成一个停用词表。
(2)jieba模块
Python中文分词组件
分词:
待分词的字符串可以是unicode或UTF-8字符串,GBK字符串。注意:不建议直接输入GBK字符串,可能会错误地解码成UTF-8

  1. jieba.cut ()方法接受三个输入参数:需要分词的字符串; cut_all参数用来控制是否采用全模式; HMM参数用来控制是否使用HMM模型
  2. jieba.cut_for_search() 方法接受两个参数:需要分词的字符串;是否使用HMM模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
  3. jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用jieba.lcut 以及 jieba.lcut_for_search 直接返回 list
  4. jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。
    更多详情及例子可参见:https://github.com/fxsjy/jieba

(3)读取不同格式文本的方法:
参见我的另一篇博客,嘿嘿:python读写不同格式文本方法

(4)词频统计:
jieba模块返回的是一个<class 'generator'>,我们可以把它理解成一个list对象,直接打印generator会得到一个地址,但对generator的处理会比list更快。
这里我们直接对使用jieba得到的generator对象使用
'空格'.join(generator对象) #将generator对象以空格连接生成一个新的字符串
这样我们就能得到一个以空格分割每个词语的字符串,可以通过自己定义词频统计函数或者使用collections库中的Counter函数就可以得到每个词的词频

对generator的详细说明建议参见廖雪峰python generator

(5)python词频排序方式:
我找到三种关于python排序的方式(都需要将数据做词频统计后并化为字典的形式),经过数据实验,其速度都差不多,大家可以按需使用,
1.python自带sorted函数
sorted函数的使用多,这里只介绍对字典和固定格式的排序

result=sorted(字典名.items(),key=lambda k:k[1],reverse=True)
#按照value值降序排列。reverse=True表示逆序。key=lambda k:k[1]表示需要用到参数key关键词,lambda是一个隐函数,是固定写法,k:k[1]表示利用第二个元素进行排序
#返回类型是列表里面嵌套元组

2.collections库Counter函数

import collections
sorted_words_dict = collections.Counter(字典名)   #统计词频
result = sorted_words_dict.most_common(100)		#前100出现频率最高的元素以及他们的次数,返回类型是列表里面嵌套元组

3.pythom堆排序模块heapq

import heapq
result=heapq.nlargest(100,字典名.items(),key=lambda k:k[1])   #返回前100出现频率最高的元素以及他们的次数,其余参数含义与sorted函数意义一致
#返回类型是列表里面嵌套元组

这几种排序方式在这里都只做简单介绍,建议重点掌握collections.Counter()相关的使用即可

代码及结果展示:
环境:我们将读取python文件同目录下的text.txt文本,对其进行分词(中文),并统计每个词语出现的次数并按从大到小排序。同时通过同目录下停用词库stop.txt排除停用词。
text.txt中的内容:
在这里插入图片描述
停用词库stop.txt中内容:
在这里插入图片描述
只需要与以上格式一致即可。

import jieba
import os
import collections   
import heapq	#堆排序模块

def count_word(classstr):    #自定义词频统计函数,接收参数str,返回词频字典
    result={}
    for word in classstr.split():
        if word not in result:
            result[word]=0
        result[word]+=1
    return result

def delstopwordslist(classsstr):  #去掉str中与stop.txt中相同的词,接收参数str,返回str
     stopwords = [line.strip() for line in open('stop.txt', encoding='UTF-8').readlines()]
     outstr = ''.join([word for word in classsstr if word not in stopwords])
     return outstr
     
if __name__ == '__main__':
	with open('text.txt', 'r',encoding='UTF-8')as f:  #读取text.txt文本中的内容
    	fullText=f.read().strip()   #.read()表示全部读取,.strip()表示去除每一句开头和结尾的空格和换行符

	fullText=delstopwordslist(fullText)  #调用去停用词函数
	seg_list = jieba.cut(fullText)  

	sorted_words_dict = collections.Counter(seg_list) #利用Counter()函数进行词频统计
	#sorted_words_dict =count_word(' '.join(seg_list))   #利用自定义词频统计函数

	result=sorted_words_dict.most_common(100)  #利用Counter()返回对象的.most_common()方法获取排序后的列表
	#result=sorted(sorted_words_dict.items(),key=lambda k:k[1],reverse=True)  #sorted方式进行排序
	#result=heapq.nlargest(100,sorted_words_dict.items(),key=lambda k:k[1])	#heapq方式进行排序

	print(result)

运行结果:
在这里插入图片描述

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用Python的文本挖掘工具来进行词频统计。一个例子是基于Python的文本挖掘应用——以米9用户评论的词频统计为例。你可以使用wordcloud包来生成词云图,示例代码如下: ``` # 导入所需模块 from wordcloud import WordCloud import matplotlib.pyplot as plt import jieba import jieba.analyse # 读取文本内容 content = open("test.txt","rb").read() # 使用TF-IDF算法进行关键词提取 tags = jieba.analyse.extract_tags(content, topK=100, withWeight=False) text = " ".join(tags) # 生成词云 wordcloud = WordCloud(background_color='white').generate(text) # 显示词云图 plt.imshow(wordcloud) plt.axis('off') plt.show() # 保存词云图 wordcloud.to_file('test.jpg') ``` 这段代码会将文本中的关键词提取出来,并生成一个词云图展示这些关键词。你只需要将你想要分析的文本放在"test.txt"文件中,然后运行以上代码即可得到词频统计结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于python的文本挖掘应用——以米9用户评论的词频统计为例.pdf](https://download.csdn.net/download/u013883025/19888802)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Python生成词云图,TIIDF方法文本挖掘: 词频统计,词云图](https://blog.csdn.net/HHTNAN/article/details/77622174)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值