Python 使用tf-idf算法计算文档关键字权重并生成词云的方法
作者:虚坏叔叔 发布时间:2022-03-28 13:09:18
标签:Python,tf-idf算法,关键字权重,生成词云
Python 使用tf-idf算法计算文档关键字权重,并生成词云
1. 根据tf-idf计算一个文档的关键词或者短语:
代码如下:
注意需要安装pip install sklean
;
from re import split
from jieba.posseg import dt
from sklearn.feature_extraction.text import TfidfVectorizer
from collections import Counter
from time import time
import jieba
#pip install sklean
FLAGS = set('a an b f i j l n nr nrfg nrt ns nt nz s t v vi vn z eng'.split())
def cut(text):
for sentence in split('[^a-zA-Z0-9\u4e00-\u9fa5]+', text.strip()):
for w in dt.cut(sentence):
if len(w.word) > 2 and w.flag in FLAGS:
yield w.word
class TFIDF:
def __init__(self, idf):
self.idf = idf
@classmethod
def train(cls, texts):
model = TfidfVectorizer(tokenizer=cut)
model.fit(texts)
idf = {w: model.idf_[i] for w, i in model.vocabulary_.items()}
return cls(idf)
def get_idf(self, word):
return self.idf.get(word, max(self.idf.values()))
def extract(self, text, top_n=10):
counter = Counter()
for w in cut(text):
counter[w] += self.get_idf(w)
#return [i[0:2] for i in counter.most_common(top_n)]
return [i[0] for i in counter.most_common(top_n)]
if __name__ == '__main__':
t0 = time()
with open('./nlp-homework.txt', encoding='utf-8')as f:
_texts = f.read().strip().split('\n')
# print(_texts)
tfidf = TFIDF.train(_texts)
# print(_texts)
for _text in _texts:
seq_list=jieba.cut(_text,cut_all=True) #全模式
# seq_list=jieba.cut(_text,cut_all=False) #精确模式
# seq_list=jieba.cut_for_search(_text,) #搜索引擎模式
# print(list(seq_list))
print(tfidf.extract(_text))
with open('./resultciyun.txt','a+', encoding='utf-8') as g:
for i in tfidf.extract(_text):
g.write(str(i) + " ")
print(time() - t0)
2. 生成词云:
代码如下:
注意需要安装
pip install wordcloud
;以及为了保证中文字体正常显示,需要下载
SimSun.ttf
字体,并且将这个字体包也放在和程序相同的目录下;
from wordcloud import WordCloud
filename = "resultciyun.txt"
with open(filename) as f:
resultciyun = f.read()
wordcloud = WordCloud(font_path="simsun.ttf").generate(resultciyun)
# %pylab inline
import matplotlib.pyplot as plt
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()
3 最后词云的图片
来源:https://blog.csdn.net/biggbang/article/details/129553871


猜你喜欢
- 如下所示:import pandas as pdpath='F:/python/python数据分析与挖掘实战/图书配套数据、代码/
- 你好,我是林骥。斜率图,可以快速展现两组数据之间各维度的变化,特别适合用于对比两个时间点的数据。比如说,为了对比分析某产品不同功能的用户满意
- 方法一.Image { max-width:600px;height:
- 1、str.split不支持正则及多个切割符号,不感知空格的数量,比如用空格切割,会出现下面情况。>>> s1="
- 讲这个方法之前,我们应该先了解下插入节点时浏览器会做什么。在浏览器中,我们一旦把节点添加到document.body(或者其他节点)中,页面
- function.js<!--function getObject(objectId) { &nbs
- 虽然说表单验证在客户端使用javascript来验证已经可以了,但是我们为了防止访客绕过客户端验证也为了数据安全最好还是在服务器端加上必要的
- 这篇文章主要介绍了python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例,文中通过示例代码介绍的非常详细,对大家的
- 本文内容皆为作者原创,码字不易,如需转载,请注明出处:https://www.cnblogs.com/temari/p/13048977.h
- 接上一篇终于知道python的装饰器是怎么回事,那在工作中,到底能干吗用呢?尤其对我这个只会写写脚本又不做python开发的小测试/手动无辜
- 微信指数爬取 Appium + mitmproxy + 网易mumu安卓模拟器实现微信指数小程序爬取通过appium实现将指令传输
- 如果我们在标识列中插入值,例如: insert member(id,username) values(10,'a
- MySQL 表别名(Alias)SQL 表别名在 SQL 语句中,可以为表名称及字段(列)名称指定别名(Alias),别名是 SQL 标准语
- 接触 Node.js 已有多年,一直喜欢它的单线程模型和异步IO特性,以及 JavaScript 语言本身的灵活性。同时,JavaScrip
- 微信网页授权认证根据微信官方文档,网页授权需要四个步骤, - 用户同意授权-获取code - 通过code 获取网页授权access_tok
- 为什么要使用缓存?一个 * 站的基本权衡点就是,它是动态的。 每次用户请求页面,服务器会重新计算。从开销处理的角度来看,这比你读取一个现成的
- 之前一直使用QtCreator,在设计界面时非常方便,python早就集成了Qt模块,在python中以pyQt的包存在,目前常用的是pyQ
- 条形图是一种常用的图形,比如在各种PPT的展示中为各种职业人士所喜爱。条形图能够直观地展示各种场景下数值的比较。Matplotlib提供了b
- 前言在日常开发中,用mysql进行查询的时候,有一个比较少见的关键词exists,我们今天来学习了解一下这个exists这个sql关键词的用
- CAS 全称集中式认证服务(Central Authentication Service),是实现单点登录(SSO)的一中手段。CAS 的通