1,背景介绍 今天这个Jupyter Notebook,是《Jupyter Notebook使用sklearn的TF-IDF算法计算关键词权重》的续篇,这次使用真实数据做分析实验。 把网络爬虫软件收集的腾讯新闻文本内容导入GooSeeker文本分词和情感分析工具做分词,然后导出分词效果表,使用Python基于TF-IDF算法做进一步的关键词提取。 1.1,TF-IDF算法介绍 《Jupyter Notebook使用sklearn的TF-IDF算法计算关键词权重》一文做了讲解,本文不再赘述。在上文基础上,本文将使用实际数据进行计算。 1.2,本模板适应的场景 本模板根据GooSeeker分词和文本分析软件生成的分词效果表,对数据进行基本处理后,调用sklearn库做进一步TF-IDF计算处理。 1.3,使用方法 基本操作顺序是: 1. 在GooSeeker分词和文本分析软件上进行任务创建并导入包含原始内容的excel,并导出分词效果表 2. 将导出的分词效果表放在本notebook的data/raw文件夹中 3. 从头到尾执行本notebook的单元 注意:每个notebook项目目录都预先规划好了,具体参看Jupyter Notebook项目目录规划参考。如果要做多个分析项目,把整个模板目录专门拷贝一份给每个分析项目。 1.4,简要技术说明 在每个功能项单元,如果不需要关心的编程细节,将注明【编程细节】。 本notebook主要实现以下几个步骤: 1. 读取data/raw文件夹中的从分词工具导出的分词效果表 2. 对分词效果表进行基本的预处理 3. 使用sklearn库做TF-IDF关键词提取实验 2,第三方库 Scikit-learn(简记 sklearn),是面向 Python 的免费机器学习库。Sklearn 包含了很多种机器学习的方式:如分类、回归、聚类算法以及降维、模型选择和数据预处理等机器学习算法。Sklearn 同时支持 NumPy 和 SciPy 数据结构和 Matplotlib 库。 3,数据源 数据源是GooSeeker分词和文本分析软件生成的分词效果表。 原始数据是使用GooSeeker快捷采集得到的新闻数据。供参考和实验。 将原始的文本内容以Excel格式导入GooSeeker分词软件,几分钟后就能得到词频词性表和分词效果表。如果还做了关键词筛选,还可以生成共词矩阵和社交关系图。另外情感分析也可自动执行,也可以配置自己的情感词库和文本分类关键词。本文使用Python对分词效果表进行统计分析和画图。下图显示的是从集搜客分词和文本分析软件导出的分词效果表数据,下面我们会读取这个excel并且把"分词数据"这一列"做处理和转换。 4,修改历史 2021-07-28:第一版发布 5,版权说明 本notebook是GooSeeker大数据分析团队开发的,所分析的源数据是GooSeeker分词和文本分析软件生成的,本notebook中的代码可自由共享使用,包括转发、复制、修改、用于其他项目中。 6,准备程序环境 6.1,引入sklearn库及下面的子库 Scikit-learn(简记 sklearn),是面向 Python 的免费机器学习库。Sklearn 包含了很多种机器学习的方式:如分类、回归、聚类算法以及降维、模型选择和数据预处理等机器学习算法。Sklearn 同时支持 NumPy 和 SciPy 数据结构和 Matplotlib 库。 Sklearn 是机器学习中一个常用的 Python 第三方模块,能够为用户提供各种机器学习算法接口,可以让用户简单、高效地进行数据挖掘和数据分析。 sklearn库共分为6大部分,分别用于完成分类任务、回归任务、聚类任务、降维任务、模型选择以及数据的预处理。 # coding:utf-8 from sklearn import feature_extraction from sklearn.feature_extraction.text import TfidfTransformer from sklearn.feature_extraction.text import CountVectorizer 6.2,引入其他程序包并设定重要变量 设定要分析的文件名变量。使用以下变量对应GooSeeker分词结果表: file_word_freq:词频表 file_seg_effect: 分词效果表 file_word_choice_matrix: 选词矩阵表 file_word_choice_match: 选词匹配表 file_word_choice_result: 选词结果表 file_co_word_matrix: 共词矩阵表 【编程细节】本节下面的代码将对上述词频表名变量赋值 import pandas as pd import os %xmode Verbose import warnings warnings.filterwarnings("ignore", category=DeprecationWarning) # 存原始数据的目录 raw_data_dir = os.path.join(os.getcwd(), '..\\..\\data\\raw') # 存处理后的数据的目录 processed_data_dir = os.path.join(os.getcwd(), '..\\..\\data\\processed') filename_temp = pd.Series(['分词效果']) file_seg_effect = '' 6.3,检测data\raw目录下是否有分词效果表 # 0:'词频', 1:'分词效果', 2:'选词矩阵', 3:'选词匹配', 4:'选词结果', 5:'共词矩阵' print(raw_data_dir + '\r\n') for item_filename in os.listdir(raw_data_dir): if filename_temp[0] in item_filename: file_seg_effect = item_filename continue if file_seg_effect: print("分词效果excel表:", "data\\raw\\", file_seg_effect) else: print("分词效果excel表:不存在") 输出结果: C:\Users\work\workspace_219\notebook\新闻内容分词后使用TF-IDF算法提取关键词(Jupyter Notebook)\notebook\eda\..\..\data\raw 分词效果excel表: data\raw\ 分词效果_202107271616276280.xlsx 7,读取分词效果表 以下的演示以GooSeeker分词和文本分析软件生成的分词效果excel表为例,需要把分词效果表放到本notebook的data/raw文件夹下 df = pd.read_excel(os.path.join(raw_data_dir, file_seg_effect)) 8,在打开的excel最右边新增1列“TF-IDF关键词” df["TF-IDF关键词"] = '' 9,查看excel表前10行数据 已有的“关键词”列是GooSeeker分词工具提取的关键词,新增的“TF-IDF关键词”列目前的值是空的,本notebook运行完成后,“TF-IDF关键词”列将填上内容,可以对比一下GooSeeker分词工具提取的关键词与基于tf-idf提取的关键词有哪些不同。用tf-idf提取关键词还有一个最大的特点:可以自己控制关键词数量,注意观察后面代码中的topN变量。 10,把表格的“分词数据”这一列取出来 把“分词数据”这一列取出来,添加到corpus,作为已经分词的语料库 corpus = [] for item in df["分词数据"]: corpus.append(item) print(corpus[1]) 输出结果: 本报 石家庄 7 月 26 日电 记者 徐运 平 张腾扬 一 支 香烟 刚刚 点燃 一 台 轮式 机器人 便 迅速 赶来 发出 火警 语音 提示 这 是 我们 研发 的 新 一代 智能 消防 巡 检 灭火 机器人 用于 文物 古建筑 保护 它 能 迅速 定位 火情 并 抵达 起火 位置 喷射 超细 干粉 灭火 在 河北省 唐山市 中信 重工 开诚 智能 装备 有限公司 展厅 总经理 陆文涛 介绍 现在 平均 每 两 个 月 就 有 一 款 新 产品 诞生 2016 年 7 月 习近平 总书记 在 唐山市 考察 时 强调 希望 唐山 广大干部 群众 继续 弘扬 抗震 精神 抓住 国家 推动 京津 冀 协同 发展 的 有利 时机 按照 三 个 努力 建成 目标 再接再厉 不懈努力 全面 做 好 改革 发展 稳定 各项 工作 争取 在 转变 发展 方式 调整 经济 结构 推进 供给 侧 结构性 改革 等 方面 走 在 前列 使 这 座 英雄 城市 再创 辉煌 抓住 转 字 做文章 唐山 近年 来 推动 制造业 数字化 智能化 转型 完善 产业链 供应 链 培育 新 动能 新 优势 加快 构建 现代 产业 体系 2020 年 8 月 16 日 位于 主城区 的 河钢 集团 唐钢 公司 老厂 区 炼 完 最后 一 炉 钢 20 多 天 后 地处 乐亭县 渤海湾 边 的 唐钢 公司 新厂区 正式 投产 从 城区 到 沿海 不仅 是 厂 区 搬迁 更是 全新 转型 升级 走 进 新厂区 600 多 米 长 的 轧钢 生产线 上 空无一人 主控 室内 操作 工 轻 点 鼠标 便 完成 炼钢 出 钢 溅 渣 等 工序 新厂区 构建 起 全 流程 一体化 的 生产 管 控系统 实现 可视 化 数字化 全智能 模式 公司 生产 制造部 生产 指挥 中心 主任 田伟 介绍 高 铁 是 唐山 的 新 名片 去年底 时速 350 公里 的 高速 货 运动 车组 在 中 车 唐山 机车车辆 有限公司 下 线 货物 单位 重量 能耗 仅 为 飞机 的 8 还 能用 大 数据 分析 云端 虚拟 配 载 等 技术 实现 货物 智能 配 载 和 精准 识别 定位 公司 产品 研发 中心 高级 工程师 梁永廷 说 新 技术 新 业态 正在 加速 崛起 炎炎夏日 路南区 九天 微星 卫星 研发 制造 基地 项目 一期 工程 完工 技术人员 正 紧张 调试 设备 项目 建成 后 将 拥有 年产 100 颗卫星 的 研制 生产能力 唐山 九天 微星 航天 科技 有限公司 负责人 介绍 眼下 路南区 正 整合 上下游 配套 资源 打造 集 研发 测试 制造 运营 于 一体 的 国际航空 航天 产业园 在 唐山 高新区 集 研发 生产 销售 服务 于 一体 的 机器人 产业 集 群 业已 成型 涉 机器人 研发 制造 的 企业 总数 达 70 多 家 产品 达 100 多 个 品种 其中 特种 机器人 和 焊接 机器人 的 规模 技术水平 均 居 全国 前列 今年 上半年 唐山 高新区 机器人 产业 主营业务 收入 30亿 元 同比 增长 23 今年 上半年 唐山 全市 地区 生产总值 完成 3805.4亿 元 同比 增长 11.3 全市 高新技术 产业 增加值 增速 达 13.3 河北省委 常委 唐山市委 书记 张古江 表示 我们 将 进一步 聚焦 聚 力 构建 现代 产业 体系 加快 实施 创新 驱动 战略 提升 产业链 供应 链 现代化 水平 培育 壮大 发展 新 动能 努力 在 转变 发展 方式 调整 经济 结构 推进 供给 侧 结构性 改革 等 方面 走 在 前列 11,生成关键词矩阵 11.1,定义CountVectorizer类的对象 该对象会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频 vectorizer=CountVectorizer() 11.2,将文本转换成关键词矩阵 使用vectorizer的fit_transform方法将文本转为词频矩阵 X=vectorizer.fit_transform(corpus) 12,计算tf-idf 12.1,定义TfidfTransformer类的对象 该对象会统计每个词语的tf-idf权值 transformer=TfidfTransformer() 12.2,计算tf-idf 使用transformer的fit_transform方法计算tf-idf tfidf=transformer.fit_transform(X) 13,获取词袋模型中的所有词语 word=vectorizer.get_feature_names() 14,取td-idf矩阵 将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重 weight=tfidf.toarray() print(weight[1]) 输出结果: [0. 0.06430797 0. ... 0. 0.04603042 0. ] 15,设置每篇新闻提取10个关键词 如果需要更多或更少的关键词,请更改下面这条复制语句 topN = 10 16,输出tf-idf提取的关键词 实现了以下过程: 1. 输出tf-idf提取的关键词 2. 把通过tf-idf提取的关键词写入df表格里 for i in range(len(weight)): print("-------这里输出第",i,u"篇文本的tf-idf关键词------" ) df2 = pd.DataFrame() list2 = [] keyword = '' df3 = pd.DataFrame() for j in range(len(weight[i])): if weight[i][j] >0: list2.append([word[j],float(weight[i][j])]) df2 = pd.DataFrame(data=list2, columns=['name','tf-idf-value']) df3 = df2.sort_values(by='tf-idf-value',ascending=False).head(topN) print(df3,"\n") for item in df3["name"]: keyword = keyword + item + ' ' df.loc[i,"TF-IDF关键词"] = keyword 输出结果: -------这里输出第 0 篇文本的tf-idf关键词------ name tf-idf-value 407 畜禽 0.506194 339 检查组 0.331111 521 遗传 0.257530 88 保护 0.218940 405 畜牧业 0.202345 113 养殖 0.150490 492 资源 0.138818 190 地方 0.121633 278 抽查 0.110370 466 育种 0.110370 -------这里输出第 1 篇文本的tf-idf关键词------ name tf-idf-value 87 唐山 0.368243 175 机器人 0.250628 212 研发 0.192924 66 制造 0.138091 161 新厂区 0.138091 69 前列 0.138091 58 公司 0.128616 202 生产 0.128616 37 产业 0.120184 80 发展 0.109638 -------这里输出第 2 篇文本的tf-idf关键词------ name tf-idf-value 300 直播 0.367581 141 增长 0.295681 198 恢复 0.258887 277 消费 0.251563 29 上半年 0.192542 113 同比 0.175038 387 销售额 0.164747 153 季度 0.164747 389 门店 0.141211 122 商品 0.141211 -------这里输出第 3 篇文本的tf-idf关键词------ name tf-idf-value 87 唐山 0.368243 175 机器人 0.250628 212 研发 0.192924 66 制造 0.138091 161 新厂区 0.138091 69 前列 0.138091 58 公司 0.128616 202 生产 0.128616 37 产业 0.120184 80 发展 0.109638 -------这里输出第 4 篇文本的tf-idf关键词------ name tf-idf-value 148 养老 0.521692 617 老年人 0.292512 481 机构 0.245333 601 结合 0.226461 467 服务 0.184672 422 支柱 0.144298 567 社区 0.132102 543 生育 0.122098 464 有所为 0.110998 398 护理 0.110998 -------这里输出第 5 篇文本的tf-idf关键词------ name tf-idf-value 172 农业 0.505958 531 潍坊 0.372692 673 蔬菜 0.295583 337 寿光 0.205623 306 大棚 0.179920 501 标准 0.139948 551 生产 0.116704 116 以上 0.115663 173 农产品 0.109959 502 标准化 0.109959 -------这里输出第 6 篇文本的tf-idf关键词------ name tf-idf-value 172 农业 0.505958 531 潍坊 0.372692 673 蔬菜 0.295583 337 寿光 0.205623 306 大棚 0.179920 501 标准 0.139948 551 生产 0.116704 116 以上 0.115663 173 农产品 0.109959 502 标准化 0.109959 -------这里输出第 7 篇文本的tf-idf关键词------ name tf-idf-value 77 博物馆 0.784910 203 智慧 0.280908 193 文物 0.210802 47 保护 0.144168 287 观众 0.130818 145 建设 0.116909 259 管理 0.093636 170 技术 0.077429 194 文物保护 0.065409 64 内部管理 0.065409 -------这里输出第 8 篇文本的tf-idf关键词------ name tf-idf-value 218 营销 0.566060 180 用户 0.339672 67 发送 0.199786 166 治理 0.173351 92 安宁 0.166488 84 垃圾 0.166488 46 信息 0.158183 252 违规 0.133191 75 同意 0.133191 81 商家 0.133191 -------这里输出第 9 篇文本的tf-idf关键词------ name tf-idf-value 202 职业教育 0.799885 63 发展 0.135837 106 建设 0.125778 14 中国 0.119431 123 技能 0.109673 172 特色 0.109673 51 办学 0.103211 196 经济社会 0.103211 141 教育 0.095951 22 人才 0.091933 17,观察利用tf-idf提取的关键词 显示已经填充了“TF-IDF关键词”字段值后的表格的前10行,可以对比一下GooSeeker分词软件提取的关键词(“关键词”一列)和利用tf-idf提取的关键词(“TF-IDF关键词”一列) df.head(10) |