用TF-IDF算法提取中文文档关键词、词云展示文章内容

本文主要是介绍用TF-IDF算法提取中文文档关键词、词云展示文章内容,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       先使用jieba进行文档内容的分词处理,再利用TfidfVectorizer进行 tf-idf的计算,最后在根据其值进行排序,最后输出排行前十的关键词。

相关原理介绍请参考:文本关键词提取(TF与TF-IDF)-CountVectorizer()和TfidfVectorizer()

#coding:utf-8
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
import jiebatext = """
"1月29日,货拉拉开始与武汉的连锁便利店Today合作,为武汉40多家医院免费运送餐食。如有战,召必回,我从那天开始随时待命。后来我加入了货拉拉武汉爱心司机支援群,现在志愿司机已经108人了。 我每天早上六点多钟起床,从家里到取餐地黄陂再到协和医院,需在武汉跨越几个区。早上要预留两三个小时来应对限行和出餐点排队轮候、拥堵的问题。为医院运送完餐食后,我还要去运送别的物资。运送的第一批救援物资是给同济医院的防护服,最远是给孝感的医院送防护服。平均每天要跑2-3趟,有时跑4-5趟。没地方吃午饭,想吃泡面也没开水,中午只能吃点饼干。但是我知道,怎么也不能让一线的战士饿着肚子打仗,我早到一点,医院的人就能早些吃到饭菜。我是个人司机,武汉禁行,我本来是不能私下参与运送物资的。货拉拉负责与政府部门沟通,拿到配送通行证,然后将配送任务派发给我们,我们这些司机就根据订单需要去完成定向的物资配送。图 /视觉中国 我的家人都在武汉,还有一个小孙女。为了做好自我防护,我每天都穿防护服,车上备着酒精和消毒水,车辆每天消毒2到3次。数不清每天洗多少次手,只知道手都洗得开裂了。我还在车上放了一个睡袋,我跟家里人说,如果自己被感染,就睡车上,不回家了。 我觉得一线的医护人员才是真正的战士,不能让他们饿着肚子。所以即便在春节假期,我也一直在一线工作,在现场配送物资。即便是封城了,我们也要去做点什么,没有理由退缩。"
"""
sentences = text.split()
sent_words = [list(jieba.cut(sent0)) for sent0 in sentences]
document = [" ".join(sent0) for sent0 in sent_words]
print('词料:', document)tfidf_model = TfidfVectorizer().fit(document)
# 得到语料库所有不重复的词
feature = tfidf_model.get_feature_names()
print(feature)
# ['一切', '一条', '便是', '全宇宙', '天狗', '日来', '星球']
# 得到每个特征对应的id值:即上面数组的下标
print(tfidf_model.vocabulary_)
# {'一条': 1, '天狗': 4, '日来': 5, '一切': 0, '星球': 6, '全宇宙': 3, '便是': 2}# 每一行中的指定特征的tf-idf值:
sparse_result = tfidf_model.transform(document)
# print(sparse_result)# 每一个语料中包含的各个特征值的tf-idf值:
# 每一行代表一个预料,每一列代表这一行代表的语料中包含这个词的tf-idf值,不包含则为空
weight = sparse_result.toarray()# 构建词与tf-idf的字典:
feature_TFIDF = {}
for i in range(len(weight)):for j in range(len(feature)):# print(feature[j], weight[i][j])if feature[j] not in feature_TFIDF:feature_TFIDF[feature[j]] = weight[i][j]else:feature_TFIDF[feature[j]] = max(feature_TFIDF[feature[j]], weight[i][j])
# print(feature_TFIDF)
# 按值排序:
print('TF-IDF 排名前十的:')
featureList = sorted(feature_TFIDF.items(), key=lambda kv: (kv[1], kv[0]), reverse=True)
for i in range(1, 10 if len(featureList) > 10 else len(featureList)):print(featureList[i][0], featureList[i][1])'''
词云展示
'''
from wordcloud import WordCloud
from scipy.misc import imread# 整理文本:
# words = '一切 一条 便是 全宇宙 天狗 日来 星球' # 样例
words = document[0]
# print(words)
# 设置显示的形状图片:
b_mask = imread('./image/ciyun.webp')
# 绘制词图:
wc = WordCloud(background_color="white", #背景颜色max_words=2000, #显示最大词数font_path="./image/simkai.ttf",  #使用字体# min_font_size=5,# max_font_size=80, # 最大字体# width=400,  #图幅宽度mask=b_mask   #显示的形状图片
)
wc.generate(words)
# 准备一个写入的背景图片
wc.to_file("./image/beijing_2.jpg")

输出结果:
词料: ['" 1 月 29 日 , 货 拉拉 开始 与 武汉 的 连锁 便利店 Today 合作 , 为 武汉 40 多家 医院 免费 运送 餐食 。 如有战 , 召必回 , 我 从 那天 开始 随时 待命 。 后来 我 加入 了 货 拉拉 武汉 爱心 司机 支援 群 , 现在 志愿 司机 已经 108 人 了 。', '我 每天 早上 六点 多 钟 起床 , 从 家里 到 取餐 地 黄陂 再 到 协和医院 , 需在 武汉 跨越 几个 区 。 早上 要 预留 两三个 小时 来 应对 限行 和 出 餐点 排队 轮候 、 拥堵 的 问题 。 为 医院 运送 完 餐食 后 , 我 还要 去 运送 别的 物资 。 运送 的 第一批 救援 物资 是 给 同济 医院 的 防护服 , 最远 是 给 孝感 的 医院 送 防护服 。 平均 每天 要 跑 2 - 3 趟 , 有时 跑 4 - 5 趟 。 没 地方 吃 午饭 , 想 吃 泡面 也 没 开水 , 中午 只能 吃点 饼干 。 但是 我 知道 , 怎么 也 不能 让 一线 的 战士 饿着肚子 打仗 , 我 早到 一点 , 医院 的 人 就 能 早些 吃 到 饭菜 。 我 是 个人 司机 , 武汉 禁行 , 我 本来 是 不能 私下 参与 运送 物资 的 。 货 拉拉 负责 与 政府部门 沟通 , 拿到 配送 通行证 , 然后 将 配送 任务 派 发给 我们 , 我们 这些 司机 就 根据 订单 需要 去 完成 定向 的 物资 配送 。 图', '/ 视觉 中国', '我 的 家人 都 在 武汉 , 还有 一个 小孙女 。 为了 做好 自我 防护 , 我 每天 都 穿 防护服 , 车上 备着 酒精 和 消毒水 , 车辆 每天 消毒 2 到 3 次 。 数不清 每天 洗 多少 次手 , 只 知道 手 都 洗 得 开裂 了 。 我 还 在 车上 放 了 一个 睡袋 , 我 跟 家里人 说 , 如果 自己 被 感染 , 就 睡 车上 , 不 回家 了 。', '我 觉得 一线 的 医护人员 才 是 真正 的 战士 , 不能 让 他们 饿着肚子 。 所以 即便 在 春节假期 , 我 也 一直 在 一线 工作 , 在 现场 配送 物资 。 即便 是 封城 了 , 我们 也 要 去 做点 什么 , 没有 理由 退缩 。 "']
['108', '29', '40', 'today', '一个', '一点', '一直', '一线', '不能', '两三个', '个人', '中午', '中国', '为了', '什么', '他们', '任务', '但是', '便利店', '做好', '做点', '免费', '六点', '几个', '别的', '加入', '医护人员', '医院', '午饭', '协和医院', '即便', '参与', '发给', '取餐', '只能', '召必回', '司机', '吃点', '合作', '同济', '后来', '回家', '地方', '备着', '多家', '多少', '如有战', '如果', '孝感', '完成', '定向', '家人', '家里', '家里人', '封城', '小孙女', '小时', '工作', '已经', '平均', '应对', '开始', '开水', '开裂', '待命', '志愿', '怎么', '感染', '我们', '战士', '所以', '打仗', '拉拉', '拥堵', '拿到', '排队', '支援', '政府部门', '救援', '数不清', '早上', '早些', '早到', '春节假期', '最远', '有时', '本来', '根据', '次手', '武汉', '每天', '沟通', '没有', '泡面', '消毒', '消毒水', '然后', '爱心', '物资', '现在', '现场', '理由', '真正', '睡袋', '知道', '禁行', '私下', '第一批', '自己', '自我', '视觉', '觉得', '订单', '负责', '起床', '跨越', '车上', '车辆', '轮候', '运送', '还有', '还要', '这些', '连锁', '退缩', '通行证', '那天', '配送', '酒精', '问题', '防护', '防护服', '限行', '随时', '需在', '需要', '预留', '餐点', '餐食', '饭菜', '饼干', '饿着肚子', '黄陂']
{'29': 1, '拉拉': 72, '开始': 61, '武汉': 89, '连锁': 123, '便利店': 18, 'today': 3, '合作': 38, '40': 2, '多家': 44, '医院': 27, '免费': 21, '运送': 119, '餐食': 138, '如有战': 46, '召必回': 35, '那天': 126, '随时': 133, '待命': 64, '后来': 40, '加入': 25, '爱心': 97, '司机': 36, '支援': 76, '现在': 99, '志愿': 65, '已经': 58, '108': 0, '每天': 90, '早上': 80, '六点': 22, '起床': 114, '家里': 52, '取餐': 33, '黄陂': 142, '协和医院': 29, '需在': 134, '跨越': 115, '几个': 23, '预留': 136, '两三个': 9, '小时': 56, '应对': 60, '限行': 132, '餐点': 137, '排队': 75, '轮候': 118, '拥堵': 73, '问题': 129, '还要': 121, '别的': 24, '物资': 98, '第一批': 107, '救援': 78, '同济': 39, '防护服': 131, '最远': 84, '孝感': 48, '平均': 59, '有时': 85, '地方': 42, '午饭': 28, '泡面': 93, '开水': 62, '中午': 11, '只能': 34, '吃点': 37, '饼干': 140, '但是': 17, '知道': 104, '怎么': 66, '不能': 8, '一线': 7, '战士': 69, '饿着肚子': 141, '打仗': 71, '早到': 82, '一点': 5, '早些': 81, '饭菜': 139, '个人': 10, '禁行': 105, '本来': 86, '私下': 106, '参与': 31, '负责': 113, '政府部门': 77, '沟通': 91, '拿到': 74, '配送': 127, '通行证': 125, '然后': 96, '任务': 16, '发给': 32, '我们': 68, '这些': 122, '根据': 87, '订单': 112, '需要': 135, '完成': 49, '定向': 50, '视觉': 110, '中国': 12, '家人': 51, '还有': 120, '一个': 4, '小孙女': 55, '为了': 13, '做好': 19, '自我': 109, '防护': 130, '车上': 116, '备着': 43, '酒精': 128, '消毒水': 95, '车辆': 117, '消毒': 94, '数不清': 79, '多少': 45, '次手': 88, '开裂': 63, '睡袋': 103, '家里人': 53, '如果': 47, '自己': 108, '感染': 67, '回家': 41, '觉得': 111, '医护人员': 26, '真正': 102, '他们': 15, '所以': 70, '即便': 30, '春节假期': 83, '一直': 6, '工作': 57, '现场': 100, '封城': 54, '做点': 20, '什么': 14, '没有': 92, '理由': 101, '退缩': 124}
TF-IDF 排名前十的:
中国 0.7071067811865475
车上 0.4595922221621456
即便 0.3959878948353881
每天 0.3707961110124713
武汉 0.3339447507363904
开始 0.3324263991986453
一线 0.31948054021065436
一个 0.30639481477476377
运送 0.2923903495520924

这篇关于用TF-IDF算法提取中文文档关键词、词云展示文章内容的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/712465

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

poj 3974 and hdu 3068 最长回文串的O(n)解法(Manacher算法)

求一段字符串中的最长回文串。 因为数据量比较大,用原来的O(n^2)会爆。 小白上的O(n^2)解法代码:TLE啦~ #include<stdio.h>#include<string.h>const int Maxn = 1000000;char s[Maxn];int main(){char e[] = {"END"};while(scanf("%s", s) != EO

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

dp算法练习题【8】

不同二叉搜索树 96. 不同的二叉搜索树 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 示例 1: 输入:n = 3输出:5 示例 2: 输入:n = 1输出:1 class Solution {public int numTrees(int n) {int[] dp = new int