news_analysis.ipynb

import pandas as pd
import jieba
import numpy
#pip install jieba

数据源:http://www.sogou.com/labs/resource/ca.php

df_news = pd.read_table('./data/val.txt',names=['category','theme','URL','content'], encoding='utf-8')#按字段来命名
df_news = df_news.dropna()#去掉缺失值
df_news.head()
D:\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: FutureWarning: read_table is deprecated, use read_csv instead, passing sep='\t'."""Entry point for launching an IPython kernel.
category theme URL content
0 汽车 新辉腾 4.2 V8 4座加长Individual版2011款 最新报价 http://auto.data.people.com.cn/model_15782/ 经销商 电话 试驾/订车U憬杭州滨江区江陵路1780号4008-112233转5864#保常...
1 汽车 918 Spyder概念车 http://auto.data.people.com.cn/prdview_165423.... 呼叫热线 4008-100-300 服务邮箱 kf@peopledaily.com.cn
2 汽车 日内瓦亮相 MINI性能版/概念车-1.6T引擎 http://auto.data.people.com.cn/news/story_5249... MINI品牌在二月曾经公布了最新的MINI新概念车Clubvan效果图,不过现在在日内瓦车展...
3 汽车 清仓大甩卖一汽夏利N5威志V2低至3.39万 http://auto.data.people.com.cn/news/story_6144... 清仓大甩卖!一汽夏利N5、威志V2低至3.39万=日,启新中国一汽强势推出一汽夏利N5、威志...
4 汽车 大众敞篷家族新成员 高尔夫敞篷版实拍 http://auto.data.people.com.cn/news/story_5686... 在今年3月的日内瓦车展上,我们见到了高尔夫家族的新成员,高尔夫敞篷版,这款全新敞篷车受到了众...
df_news.shape
(5000, 4)

分词:使用结吧分词器

content = df_news.content.values.tolist()#拿出content列的值,转换为list格式(二维),因为结巴分词器需要list格式
print (content[1000])#打印第1000条看一下
阿里巴巴集团昨日宣布,将在集团管理层面设立首席数据官岗位(Chief Data Officer),阿里巴巴B2B公司CEO陆兆禧将会出任上述职务,向集团CEO马云直接汇报。>菹ぃ和6月初的首席风险官职务任命相同,首席数据官亦为阿里巴巴集团在完成与雅虎股权谈判,推进“one company”目标后,在集团决策层面新增的管理岗位。0⒗锛团昨日表示,“变成一家真正意义上的数据公司”已是战略共识。记者刘夏

进行分词

content_S = []#指定一个list存储分完词的结果
for line in content:#进行list的遍历current_segment = jieba.lcut(line)#对新闻主体进行分词if len(current_segment) > 1 and current_segment != '\r\n': #切的刀数大于1且不包含换行符content_S.append(current_segment)#加到content_S中
Building prefix dict from the default dictionary ...
Loading model from cache C:\Users\MSI-PC\AppData\Local\Temp\jieba.cache
Loading model cost 0.771 seconds.
Prefix dict has been built successfully.
content_S[1000][:10]#打印第1000条看一下分词结果,显示前10个
['阿里巴巴', '集团', '昨日', '宣布', ',', '将', '在', '集团', '管理', '层面']

TF-IDF :用结巴的库进行关键词提取

import jieba.analyse
index = 1000#看第1000条
print (df_news['content'][index])
content_S_str = "".join(content_S[index])
#extract_tags提取关键词,topK=5代表选择5个关键词
print ("  ".join(jieba.analyse.extract_tags(content_S_str, topK=5, withWeight=False)))
阿里巴巴集团昨日宣布,将在集团管理层面设立首席数据官岗位(Chief Data Officer),阿里巴巴B2B公司CEO陆兆禧将会出任上述职务,向集团CEO马云直接汇报。>菹ぃ和6月初的首席风险官职务任命相同,首席数据官亦为阿里巴巴集团在完成与雅虎股权谈判,推进“one company”目标后,在集团决策层面新增的管理岗位。0⒗锛团昨日表示,“变成一家真正意义上的数据公司”已是战略共识。记者刘夏
阿里巴巴  集团  首席  岗位  数据
df_content=pd.DataFrame({'content_S':content_S})#将分完的词组成DataFrame格式
df_content.head()
content_S
0 [经销商,  , 电话,  , 试驾, /, 订车, U, 憬, 杭州, 滨江区, 江陵, ...
1 [呼叫, 热线,  , 4, 0, 0, 8, -, 1, 0, 0, -, 3, 0, 0...
2 [M, I, N, I, 品牌, 在, 二月, 曾经, 公布, 了, 最新, 的, M, I...
3 [清仓, 大, 甩卖, !, 一汽, 夏利, N, 5, 、, 威志, V, 2, 低至, ...
4 [在, 今年, 3, 月, 的, 日内瓦, 车展, 上, ,, 我们, 见到, 了, 高尔夫...

去掉停用词,stopwords.txt为停用词表

stopwords=pd.read_csv("stopwords.txt",index_col=False,sep="\t",quoting=3,names=['stopword'], encoding='utf-8')
stopwords.head()
stopword
0 !
1 "
2 #
3 $
4 %
# 去掉停用词的函数
def drop_stopwords(contents,stopwords):contents_clean = []all_words = []for line in contents:#遍历,分完的词出现在停用词表则去掉line_clean = []for word in line:if word in stopwords:continueline_clean.append(word)#过滤后的词all_words.append(str(word))#统计所有的词contents_clean.append(line_clean)return contents_clean,all_words#print (contents_clean)# 转为list格式
contents = df_content.content_S.values.tolist()
stopwords = stopwords.stopword.values.tolist()
# 去掉停用词
contents_clean,all_words = drop_stopwords(contents,stopwords)

LDA建模 :主题模型

格式要求:list of list形式,分词好的的整个语料,list of list外面为文章,里面为分好的词

from gensim import corpora, models, similarities#gensim库用来作自然语言处理
import gensim
#http://radimrehurek.com/gensim/
#做映射,相当于词袋
dictionary = corpora.Dictionary(contents_clean)#做成字典
corpus = [dictionary.doc2bow(sentence) for sentence in contents_clean]#在每个句子中都做自然模型
#建立LDA模型,传入语料、映射字典、指定要得到多少个主题(无监督)
lda = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=20) #类似Kmeans自己指定K值
#一号分类结果
print (lda.print_topic(1, topn=5))#1代表第1类主题,topn=5为最具代表性的前5个关键词
0.013*"男人" + 0.006*"女人" + 0.005*"中" + 0.005*"妻子" + 0.004*"赛区"
for topic in lda.print_topics(num_topics=10, num_words=5):#分别打印10个主题各个最具代表性的5个关键词print (topic[1])
0.006*"中" + 0.004*"中国" + 0.004*"说" + 0.003*"S" + 0.003*"H"
0.014*"爆料" + 0.004*"中" + 0.003*"赵本山" + 0.003*"吃" + 0.003*"生母"
0.010*"肌肤" + 0.006*"皮肤" + 0.004*"中" + 0.004*"食物" + 0.004*"蔬菜"
0.023*"比赛" + 0.004*"中" + 0.003*"考试" + 0.003*"说" + 0.003*"公司"
0.005*"比赛" + 0.004*"说" + 0.003*"中" + 0.002*"遮" + 0.002*"S"
0.006*"中" + 0.004*"职场" + 0.004*"於" + 0.003*"说" + 0.003*"中国"
0.006*"撒" + 0.004*"食物" + 0.004*"万" + 0.003*"中" + 0.003*"说"
0.010*"球队" + 0.006*"万" + 0.005*"中" + 0.004*"文化" + 0.003*"男士"
0.010*"中" + 0.005*"男人" + 0.005*"饰演" + 0.004*"说" + 0.004*"爱情"
0.008*"说" + 0.007*"男人" + 0.006*"中" + 0.006*"节目" + 0.004*"女人"

用贝叶斯分类器做分类

df_train=pd.DataFrame({'contents_clean':contents_clean,'label':df_news['category']})
# 显示后5行
df_train.tail()
contents_clean label
4995 [天气, 炎热, 补水, 变得, 美国, 跑步, 世界, 杂志, 报道, 喝水, 身体, 补... 时尚
4996 [不想, 说, 话, 刺激, 说, 做, 只能, 走, 离开, 伤心地, 想起, 一句, 话... 时尚
4997 [岁, 刘晓庆, 最新, 嫩照, O, 衷, 诘, 牧跸, 庆, 看不出, 岁, 秒杀, 刘... 时尚
4998 [导语, 做, 爸爸, 一种, 幸福, 无论是, 领养, 亲生, 更何况, 影视剧, 中, ... 时尚
4999 [全球, 最美, 女人, 合成图, 国, 整形外科, 教授, 李承哲, 国际, 学术, 杂志... 时尚
df_train.label.unique()#看有多少个不重复的值,即分了多少类
array(['汽车', '财经', '科技', '健康', '体育', '教育', '文化', '军事', '娱乐', '时尚'],dtype=object)
label_mapping = {"汽车": 1, "财经": 2, "科技": 3, "健康": 4, "体育":5, "教育": 6,"文化": 7,"军事": 8,"娱乐": 9,"时尚": 0}#写成键值对
df_train['label'] = df_train['label'].map(label_mapping)#用map将label映射为0-9
df_train.head()
contents_clean label
0 [经销商, 电话, 试驾, 订车, U, 憬, 杭州, 滨江区, 江陵, 路, 号, 转, ... 1
1 [呼叫, 热线, 服务, 邮箱, k, f, p, e, o, p, l, e, d, a,... 1
2 [M, I, N, I, 品牌, 二月, 公布, 最新, M, I, N, I, 新, 概念... 1
3 [清仓, 甩卖, 一汽, 夏利, N, 威志, V, 低至, 万, 启新, 中国, 一汽, ... 1
4 [日内瓦, 车展, 见到, 高尔夫, 家族, 新, 成员, 高尔夫, 敞篷版, 款, 全新,... 1
from sklearn.model_selection import train_test_split
#将数据分为训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(df_train['contents_clean'].values, df_train['label'].values, random_state=1)
#CountVectorizer向量构造器的输入要求为list串,每个文章用逗号分开,用空格来进行分词
#构造输入的形式
words = []
for line_index in range(len(x_train)):try:#x_train[line_index][word_index] = str(x_train[line_index][word_index])words.append(' '.join(x_train[line_index]))#将list of list格式转化为list串,用空格分开except:print (line_index,word_index)
words[0]#打印训练的第一个数据
'中新网 上海 日电 于俊 父亲节 网络 吃 一顿 电影 快餐 微 电影 爸 对不起 我爱你 定于 本月 父亲节 当天 各大 视频 网站 首映 葜 谱 鞣 剑 保慈 障蚣 钦 呓 樯 埽 ⒌ 缬 埃 ǎ 停 椋 悖 颍 铩 妫 椋 恚 称 微型 电影 新 媒体 平台 播放 状态 短时 休闲 状态 观看 完整 策划 系统 制作 体系 支持 显示 较完整 故事情节 电影 微 超短 放映 微 周期 制作 天 数周 微 规模 投资 人民币 几千 数万元 每部 内容 融合 幽默 搞怪 时尚 潮流 人文 言情 公益 教育 商业 定制 主题 单独 成篇 系列 成剧 唇 开播 微 电影 爸 对不起 我爱你 讲述 一对 父子 观念 缺少 沟通 导致 关系 父亲 传统 固执 钟情 传统 生活 方式 儿子 新派 音乐 达 习惯 晚出 早 生活 性格 张扬 叛逆 两种 截然不同 生活 方式 理念 差异 一场 父子 间 拉开序幕 子 失手 打破 父亲 心爱 物品 父亲 赶出 家门 剧情 演绎 父亲节 妹妹 哥哥 化解 父亲 这场 矛盾 映逋坏 嚼 斫 狻 ⒍ 粤 ⒌ 桨容 争执 退让 传统 尴尬 父子 尴尬 情 男人 表达 心中 那份 感恩 一杯 滤挂 咖啡 父亲节 变得 温馨 镁 缬 缮 虾 N 逄 煳 幕 传播 迪欧 咖啡 联合 出品 出品人 希望 观摩 扪心自问 父亲节 父亲 记得 父亲 生日 哪一天 父亲 爱喝 跨出 家门 那一刻 感觉 一颗 颤动 心 操劳 天下 儿女 父亲节 大声 喊出 父亲 家人 爱 完'
print (len(words))
3750
#此部分用来举例,看输入的格式
from sklearn.feature_extraction.text import CountVectorizer#CountVectorizer为向量构造器,把词或句子转化为向量
texts=["dog cat fish","dog cat cat","fish bird", 'bird']
cv = CountVectorizer()#实例化出一个对象
cv_fit=cv.fit_transform(texts)#按指定标准做转化print(cv.get_feature_names())#打印不重复的单词
print(cv_fit.toarray())#按上面的text挨个进行显示
#由此可知此构造器的输入要求为list,每个文章用逗号分开,用空格来进行分词print(cv_fit.toarray().sum(axis=0))
['bird', 'cat', 'dog', 'fish']
[[0 1 1 1][0 2 1 0][1 0 0 1][1 0 0 0]]
[2 3 2 2]
from sklearn.feature_extraction.text import CountVectorizer#CountVectorizer为向量构造器,把词或句子转化为向量
#设置向量转换规则
vec = CountVectorizer(analyzer='word', max_features=4000,  lowercase = False)#analyzer='word'根据词来构造向量
# 将词转化为向量
vec.fit(words)
CountVectorizer(analyzer='word', binary=False, decode_error='strict',dtype=<class 'numpy.int64'>, encoding='utf-8', input='content',lowercase=False, max_df=1.0, max_features=4000, min_df=1,ngram_range=(1, 1), preprocessor=None, stop_words=None,strip_accents=None, token_pattern='(?u)\\b\\w\\w+\\b',tokenizer=None, vocabulary=None)
from sklearn.naive_bayes import MultinomialNB#拿出贝叶斯分类器
classifier = MultinomialNB()
# 进行模型的训练
classifier.fit(vec.transform(words), y_train)#transform(words)转换为向量,y_train为label值,即输入特征和label值
MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)
#对测试集也进行输入格式的处理
test_words = []
for line_index in range(len(x_test)):try:#x_train[line_index][word_index] = str(x_train[line_index][word_index])test_words.append(' '.join(x_test[line_index]))except:print (line_index,word_index)
test_words[0]
'国家 公务员 考试 申论 应用文 类 试题 实质 一道 集 概括 分析 提出 解决问题 一体 综合性 试题 说 一道 客观 凝练 申发 论述 文章 题目 分析 历年 国考 申论 真题 公文 类 试题 类型 多样 包括 公文 类 事务性 文书 类 题材 从题 干 作答 材料 内容 整合 分析 无需 太 创造性 发挥 纵观 历年 申论 真题 作答 应用文 类 试题 文种 格式 作出 特别 重在 内容 考查 行文 格式 考生 平常心 面对 应用文 类 试题 准确 把握 作答 领会 内在 含义 把握 题材 主旨 材料 结构 轻松 应对 应用文 类 试题 R 弧 ⒆ 钒 盐 展文 写作 原则 T 材料 中来 应用文 类 试题 材料 总体 把握 客观 考生 材料 中来 材料 中 把握 材料 准确 理解 题材 主旨 T 政府 角度 作答 应用文 类 试题 更应 注重 政府 角度 观点 政府 角度 出发 原则 表述 观点 提出 解决 之策 考生 作答 站 政府 人员 角度 看待 提出 解决问题 T 文体 结构 形式 考查 重点 文体 结构 大部分 评分 关键点 解答 方法 薄 ⒆ ス 丶 词 明 方向 作答 题目 题干 作答 作答 方向 作答 角度 关键 向导 考生 仔细阅读 题干 作答 抓住 关键词 作答 方向 相关 要点 整理 作答 思路 年国考 地市级 真 题为 例 潦惺姓 府 宣传 推进 近海 水域 污染 整治 工作 请 给定 资料 市政府 工作人员 身份 草拟 一份 宣传 纲要 R 求 保对 宣传 内容 要点 提纲挈领 陈述 玻 体现 政府 精神 全市 各界 关心 支持 污染 整治 工作 通俗易懂 超过 字 肮 丶 词 近海 水域 污染 整治 工作 市政府 工作人员 身份 宣传 纲要 提纲挈领 陈述 体现 政府 精神 全市 各界 关心 支持 污染 整治 工作 通俗易懂 提示 归结 作答 要点 包括 污染 情况 原因 解决 对策 作答 思路 情况 原因 对策 意义 逻辑 顺序 安排 文章 结构 病 ⒋ 缶殖 龇 ⅲ 明 结构 解答 应用文 类 试题 考生 材料 整体 出发 大局 出发 高屋建瓴 把握 材料 主题 思想 事件 起因 解决 对策 阅读文章 构建 文章 结构 直至 快速 解答 场 ⒗ 硭 乘悸 罚明 逻辑 应用文 类 试题 严密 逻辑思维 情况 原因 对策 意义 考生 作答 先 弄清楚 解答 思路 统筹安排 脉络 清晰 逻辑 表达 内容 表述 础 把握 明 详略 考生 仔细阅读 分析 揣摩 应用文 类 试题 内容 答题 时要 详略 得当 主次 分明 安排 内容 增加 文章 层次感 阅卷 老师 阅卷 时能 明白 清晰 一目了然 玻埃 保蹦旯 考 考试 申论 试卷 分为 省级 地市级 两套 试卷 能力 大有 省级 申论 试题 考生 宏观 角度看 注重 深度 广度 考生 深谋远虑 地市级 试题 考生 微观 视角 观察 侧重 考查 解决 能力 考生 贯彻执行 作答 区别对待'
classifier.score(vec.transform(test_words), y_test)#计算精度
0.804

Github托管:Python-news_analysis

新闻数据分析:jieba关键词提取、LDA主题生成、贝叶斯新闻分类相关推荐

  1. jieba关键词提取的源码解析

    一.简介 1.1 什么是关键词 关键词是指能反映文本主题或者意思的词语,如论文中的Keyword字段. 关键词提取是文本挖掘领域一个很重要的部分,通过对文本提取的关键词可以窥探整个文本的主题思想,进一 ...

  2. lda主题模型python实现篇_基于LDA主题模型的短文本分类

    VSM(向量空间模型)是信息检索领域最为经典的分析模型之一,采用VSM对短文本进行建模,即将每一篇短文本表示为向量的形式,用TF-TDF表示向量的值.给出一些符号定义:短文本集SD= {sd1,sd2 ...

  3. 小白入门猿来如此之结巴jieba关键词提取+词性标注+返回词语在原文的起止位置+ChineseAnalyzer for Whoosh 搜索引擎

    关键词提取 基于 TF-IDF 算法的关键词抽取 import jieba.analyse jieba.analyse.extract_tags(sentence, topK=20, withWeig ...

  4. 数据分析案例实战:贝叶斯-新闻分类

    学习唐宇迪<python数据分析与机器学习实战>视频 一.数据分析 每一条包括: theme:新闻关键内容 category:新闻种类 URL:链接 content:新闻内容 额,看着很不 ...

  5. Python数据分析与机器学习实战<十>贝叶斯算法

    目录 贝叶斯算法概述 贝叶斯要解决的"逆概"问题 正向概率: 逆向概率:(也就是贝叶斯解决的问题) 为什么使用贝叶斯? 贝叶斯推导实例 贝叶斯公式 贝叶斯--"拼写纠正& ...

  6. 关键词提取(3):主题模型:LSI模型

    主题模型(1):LSI模型 一.LSI是什么? 1.SVD 1.1 如何求矩阵的奇异值分解 1.2 实例进行证明 二.代码 三:参考资料 一.LSI是什么?   在某些情况下,有些关键词并不会显式的出 ...

  7. lda主题词评论python_Python之酒店评论主题提取LDA主题模型

    (0, '0.018*"风" + 0.015*"设计" + 0.011*"酒店" + 0.011*"独特" + 0.00 ...

  8. NLP算法-关键词提取之Jieba算法库

    关键词提取 什么叫关键词提取? 关键词提取方法分类 有监督 无监督 优缺点 Jieba 关键词提取 TF/IDF算法 TF-IDF的主要思想 如何训练关键词提取算法 demo PageRank算法 T ...

  9. NLP算法-关键词提取之Gensim算法库

    Gensim工具包 引入 Gensim简介 一些基础概念 Gensim的使用方式 1. 训练语料的预处理 2.主题向量的变换 LDA模型 demo LSA/LSI 算法 LSA/LSI算法原理 LSA ...

最新文章

  1. 数字图像处理3:取样和量化
  2. 介绍一个修改 Visual Studio Code 侧边框颜色的扩展 Peacock
  3. 提示未检测到 oracle,Oracle RAC [INS-40406] 未检测到现有的 Oracle Grid Infrastructure 软件...
  4. Nginx——反向代理多个服务器
  5. 40个Java多线程问题总结【转】
  6. 2000-2021年款雷克萨斯原厂全套维修手册+电路图资料下载
  7. python 批量爬取网页pdf_python爬取网页内容转换为PDF文件
  8. Minimax算法——井字棋
  9. 一文掌握大数据架构师需要具备的能力和格局
  10. Adobe Illustrator教程
  11. 前端架构,前端架构组织结构,目录结构架构
  12. ASPX页面AJAX调用ASPX后台
  13. 日本NHK推出人工智能主播,可模拟真人主播声音播报新闻
  14. 信息技术 安全技术 信息安全管理体系 要求
  15. 2021编程语言top10,C蝉联第一,Python超越Java成为第二
  16. 泛娱乐新玩法背后的“黑科技”
  17. PLSQL如何查看建表语句
  18. 阿拉伯数字转换中文表示
  19. 使用htk搭建语音拨号系统
  20. 基于vue框架下使用Element-UI获取文件MD5值并上传

热门文章

  1. 十个数字按从大到小排序
  2. 最新kali之lbd
  3. 解决谷歌访问本地文件和跨域问题
  4. 2022,VSCode 前端插件推荐
  5. fiddler的介绍与使用
  6. 深扒!从六个角度深度剖析Java性能调优,附带实战演练
  7. js实现导航栏随着页面向下滑动逐渐显示,向上滑动逐渐隐藏
  8. 【产业互联网周报】腾讯阿里加速车联网进程;百度智能云提出人工智能工业化概念;2019世界人工智能大会召开...
  9. JS的句末分号:你可能不了解的事实
  10. 5G规范的“里程碑”与高通的有所为