文本分析

概述:

本文演示了jieba中文分词组件、sklearn等库的使用,包括

  1. 新闻中停止词的剔除演示
  2. 提取新闻的关键词
  3. 词频统计
  4. 词云图绘制
  5. 对新闻进行向量化
  6. 使用朴素贝叶斯算法进行新闻分类
  7. 使用贝叶斯模型进行新闻分类(原理涉及到编辑距离、朴素贝叶斯算法)

jieba 是目前最好的 Python 中文分词组件,它主要有以下 3 种特性

  • 支持 3 种分词模式:精确模式、全模式、搜索引擎模式
  • 支持繁体分词
  • 支持自定义词典
import pandas as pd
import jieba         
#pip install jieba

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

df_news = pd.read_csv('./data/val.txt',sep='\t',names=['category','theme','URL','content'],encoding='utf-8')
df_news = df_news.dropna()
df_news.head()
category theme URL content
0 汽车 新辉腾 4.2 V84座加长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()
print (content[1000])
阿里巴巴集团昨日宣布,将在集团管理层面设立首席数据官岗位(Chief Data Officer),阿里巴巴B2B公司CEO陆兆禧将会出任上述职务,向集团CEO马云直接汇报。>菹ぃ和6月初的首席风险官职务任命相同,首席数据官亦为阿里巴巴集团在完成与雅虎股权谈判,推进“one company”目标后,在集团决策层面新增的管理岗位。0⒗锛团昨日表示,“变成一家真正意义上的数据公司”已是战略共识。记者刘夏

文本切割:将文本内容切成一个个的词

示例:

jieba.lcut('阿里巴巴集团昨日宣布,将在集团管理层面设立首席数据官岗位') 
['阿里巴巴',
 '集团',
 '昨日',
 '宣布',
 ',',
 '将',
 '在',
 '集团',
 '管理',
 '层面',
 '设立',
 '首席',
 '数据',
 '官',
 '岗位']

正式执行切割任务:将content每一条记录进行文本切割

content_S = []
for line in content:
    current_segment = jieba.lcut(line)
    if len(current_segment) > 1 and current_segment != '\r\n': #换行符
        content_S.append(current_segment)
df_content=pd.DataFrame({'content_S':content_S})
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=pd.read_csv("stopwords.txt",index_col=False,sep="\t",quoting=3,names=['stopword'], encoding='utf-8')
stopwords.head(20)
stopword
0 !
1 "
2 #
3 $
4 %
5 &
6 '
7 (
8 )
9 *
10 +
11 ,
12 -
13 --
14 .
15 ..
16 ...
17 ......
18 ...................
19 ./

将文本中含有的停止词剔除,达到清洗文本的目的

def drop_stopwords(contents,stopwords):
    contents_clean = []
    all_words = []
    for line in contents:
        line_clean = []
        for word in line:
            if word in stopwords:
                continue
            line_clean.append(word)
            all_words.append(str(word))
        contents_clean.append(line_clean)
    return contents_clean,all_words
    #print (contents_clean)
        

contents = df_content.content_S.values.tolist()    
stopwords = stopwords.stopword.values.tolist()
contents_clean,all_words = drop_stopwords(contents,stopwords)

#df_content.content_S.isin(stopwords.stopword)
#df_content=df_content[~df_content.content_S.isin(stopwords.stopword)]
#df_content.head()
df_content=pd.DataFrame({'contents_clean':contents_clean})
df_content.head()
contents_clean
0 [经销商, 电话, 试驾, 订车, U, 憬, 杭州, 滨江区, 江陵, 路, 号, 转, ...
1 [呼叫, 热线, 服务, 邮箱, k, f, p, e, o, p, l, e, d, a,...
2 [M, I, N, I, 品牌, 二月, 公布, 最新, M, I, N, I, 新, 概念...
3 [清仓, 甩卖, 一汽, 夏利, N, 威志, V, 低至, 万, 启新, 中国, 一汽, ...
4 [日内瓦, 车展, 见到, 高尔夫, 家族, 新, 成员, 高尔夫, 敞篷版, 款, 全新,...

将新闻数据集所有的单词存下来

df_all_words=pd.DataFrame({'all_words':all_words})
print(df_all_words.shape)
(993928, 1)

统计词频

df_all_words.groupby(by=['all_words'])['all_words']

import numpy
words_count=df_all_words.groupby(by=['all_words'])['all_words'].agg({"count":numpy.size})
words_count=words_count.reset_index().sort_values(by=["count"],ascending=False)
words_count
D:\ProgramFiles\Anaconda3\lib\site-packages\ipykernel_launcher.py:2: FutureWarning: using a dict on a Series for aggregation
is deprecated and will be removed in a future version
all_words count
4077 5199
4209 中国 3115
88255 3055
104747 2646
1373 2390
104748 2310
104757 2306
104765 2287
104761 2270
104771 2236
104744 2191
104731 2051
104741 2036
104750 2006
104737 1772
36703 市场 1762
104770 1743
104732 1721
104740 1696
104742 1655
50815 1570
13243 公司 1568
104751 1557
22603 1493
21267 发展 1489
104774 1476
51829 时间 1461
104746 1440
104730 1430
36201 工作 1424
... ... ...
28300 士称 1
28298 士林 1
28296 士大夫 1
52478 晚年生活 1
71457 着力点 1
28315 壮士 1
71435 眼能 1
71411 眼痛 1
44131 手扯 1
44128 手打 1
71413 眼皮底下 1
71414 眼目 1
52484 晚清时期 1
28328 壮胀 1
28326 壮纳 1
28325 壮硕 1
71421 眼睫毛 1
71422 眼瞅 1
28322 壮歌 1
71434 眼胶 1
28321 壮族 1
28320 壮志凌云 1
28319 壮志 1
28318 壮心不已 1
52480 晚时 1
71430 眼线笔 1
71431 眼缘 1
71432 眼肌 1
71433 眼肿 1
52392 晋察冀 1

104784 rows × 2 columns

from wordcloud import WordCloud
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib
matplotlib.rcParams['figure.figsize'] = (10.0, 5.0)

wordcloud=WordCloud(font_path="./data/simhei.ttf",background_color="white",max_font_size=80)
# 生成dict ,{文字:词频} 用于词云生成函数的参数
word_frequence = {x[0]:x[1] for x in words_count.head(100).values}

# 参数frequencies:dict from string to float A contains words and associated frequency.
wordcloud=wordcloud.fit_words(word_frequence)
plt.imshow(wordcloud)

文本分析_第1张图片



TF-IDF :提取关键词###

注意,以下内容还未仔细研究

df_news['content']
0       经销商 电话 试驾/订车U憬杭州滨江区江陵路1780号4008-112233转5864#保常...
1            呼叫热线 4008-100-300 服务邮箱 kf@peopledaily.com.cn
2       MINI品牌在二月曾经公布了最新的MINI新概念车Clubvan效果图,不过现在在日内瓦车展...
3       清仓大甩卖!一汽夏利N5、威志V2低至3.39万=日,启新中国一汽强势推出一汽夏利N5、威志...
4       在今年3月的日内瓦车展上,我们见到了高尔夫家族的新成员,高尔夫敞篷版,这款全新敞篷车受到了众...
5       经销商 电话 试驾/订车8仕嗍√焖市秦城区岷山路20号6.59万N浜菏薪岸区科技馆路特1号6...
6       经销商 电话 试驾/订车9愣省东莞市南城区莞太大道白马路段(周溪BP油站侧)#矗埃埃福112...
7       目前很多自主品牌的崛起都是从模仿世界老牌名车开始,这并不是一件坏事,这是一种让中国汽车业发展...
8       华泰在推出自主轿车B11后,又一款自主SUV宝利格已经确定将在11月下旬的广州车展上市正式上...
9       爱美之心人皆有之,汽车的外观炫感度所形成的冲击力,往往会给第一眼与之接触的消费者留下挥之不去...
10                           Mazda3 2.0 MT 豪华型 2011款 最新报价
11      西雅特LEON的上市给喜欢大众喜欢运动的朋友一个更多的选择,动感的造型,时尚并运动的内饰让西...
12      【网上车市九江站讯】理念S1是广汽本田自主品牌的首款量产车型,与思迪同一个设计平台。目前,九...
13      经销商 电话 试驾/订车3啥际谢鸪的险疚髀罚福叮岛牛矗埃埃福112233转7822#玻常89...
14                                      Galue convertible
15      业务范围: 新车J谌ㄆ放疲骸≈行她5刂罚骸∥诶己铺厥行虑沤治逯凶盘.[查看地图]5缁埃骸。埃...
16      经销商 电话 试驾/订车1倍环西路268号(中华大街与北二环交口西行500米路南)#矗埃埃福...
17      【网上车市深圳站讯】随着韩国进口双龙汽车的火热销售,其主打SUV车型柯兰多凭借时尚、实用、环...
18      雷诺2013款Escape MPV曝光,新款在外观及内饰上进行了很大幅度地改变,动力也更强劲...
19      克莱斯勒200车型已经在海外上市。近日官方公布了该车的敞篷版细节图片,该车采用软顶敞篷,这是...
20      两年一度的北京国际车展在今日正式拉开了帷幕。在这开展之际,我们将提前为您带来本届车展的全球首...
21      上市时间:-W刺:在售E帕浚海埃0(L)3敌统叽纾撼ぃ罚埃埃担宽2040/高2645(mm)...
22                                       关注雪铁龙C4的用户还关注...
23      对于喜欢美式风格汽车的朋友,在美国车被欧洲化的今天,其实很难在新车辈出的国内市场找出一款真正...
24      奥迪A7 Sportback 集轿跑车的运动优雅、豪华轿车的舒适性与旅行车的实用性于一身,完...
25           呼叫热线 4008-100-300 服务邮箱 kf@peopledaily.com.cn
26      2012年7月6日,福建省公务员局三菱君阁交车仪式在华夏汽车城福建东南汽贸顺利举行。本次省公...
27      HK 车型#档手自一体S秃模海L/100KMV傅技郏海保保65万J谐〖郏海保保65-11.6...
28                   暂时没有商旅 XML6108E31H 的报价,您可以到网上车市查看报价。
29      随着人们对车辆的多元化需求,拥有舒适性、大空间、多功能于一身的SUV车型受到了消费者一致的好...
                              ...                        
4970    我用一句话搞定老公的情人(1?1张)@瞎是个老实人7⑸那件事以前,要是谁告诉我我老公有外遇,...
4971    很多嘉人网的网友都知道,彻底清洁完肌肤之后,需要先使用化妆水作为肌肤的第二层清洁,以及对肌肤...
4972    时尚解析:可爱的娃娃款连衣裙搭配复古的背包,给人感觉清新怡人,搭配裸色高跟鞋,在可爱的同时又...
4973    1. Leelee Sobieski#蹋澹澹欤澹濉。樱铮猓椋澹螅耄榈南壬Adam Kimme...
4974    近日,一名女子让婴儿淋雨乞讨,遭网友曝光,但警方称双方为母子关系。 网络截图;声在线6月19...
4975    伴随着中国经济实力的崛起,中国人对奢侈品的消费需求也持续走强。预计到2015年,中国将成为全...
4976    陈凯歌和陈红是圈内人人羡慕的“甜蜜夫妻档”。结婚十年来,他们的婚姻异常美满,在事业上更是相辅...
4977    导语:据经济之声《天下财经》报道,法国奢侈品巨头爱马仕集团发布公告说,第二季度销售额同比增长...
4978    感冒打喷嚏,要多吃一些蔬菜,在提高机体免疫力的同时,也能解决肌肤干燥,腹泻、便秘等难题,甚至...
4979    近日,财付通宣布与Cybersource、Asiapay等全球知名的电子支付提供商以及香港卓...
4980    设计师Ralph Lauren从事时装设计工作已经有40多年了,从1967年开始建立品牌,他...
4981    导读:18岁的女孩是细瓷,30岁的女人是粗瓷,50岁的女人得是塑料,要耐摔,矫情容易被人笑话...
4982    12. 夏天我们常喝绿豆汤,可以清热解毒。其实绿豆可以“解百毒”例如重金属中毒,药物中毒,食...
4983    电眼美女林熙蕾2011年3月在马尔代夫低调出嫁,仅邀请三十多位亲友出席。舒淇则特意从剧组请假...
4984                        2012纽约Governors Ball音乐节欧美型人街拍
4985    窦唯倪震周星驰叶倩文 盘点偷情被捉的明星 (15/30张)M醴疲涸撞破窦唯与高原一起鬼混 天...
4986    谁都知道,女人保养要趁早。但在人们意识中,总觉得抗老是件既昂贵,难度又极高的事情。其实,抗衰...
4987    乳房保养的秘诀就是勤快,除了坚持好的作息,更重要的每天不间断地保养,才能让乳房不下垂,远离乳...
4988    脑是人体的高级神经活动中枢,它通过感觉器官和周身神经系统,维持、调节人体各器官功能的正常活动...
4989    导语:最新的World Watch Report(世界钟表报告)为我们提供了腕表搜索排行榜,...
4990                                         (责任编辑:李昉、王静)
4991    导读:你每月花在护肤品上的开支是几位数?你把那鼓囊囊的钱包够买的护肤品,真让你容光焕发了没?...
4992    8个已经过时的恋爱法则 小心被甩 (7 /8张)#罚电视两人均分6园敕值募扑惴椒ㄔ谡饫锊⒉皇...
4993    5、三文鱼。去年世界卫生组织发表的一项调查,指出日本人是亚洲区中最长寿的一群。这项殊荣当然要...
4994    铅笔裙,也叫弹性窄裙,英文名Pencil Skirts。因其像铅笔一样笔直而得名,这种紧紧包...
4995    随着天气逐渐炎热,补水变得日益重要。据美国《跑步世界》杂志报道,喝水并不是为身体补充水分的唯...
4996    我其实不想说这些话刺激他,他也是不得已。可是,我又该怎样说,怎样做?我只能走,离开这个伤心地...
4997    58岁刘晓庆最新嫩照O衷诘牧跸庆绝对看不出她已经58岁了,她绝对可以秒杀刘亦菲、范冰冰这类美...
4998    导语:做了爸爸就是一种幸福,无论是领养还是亲生,更何况出现在影视剧中。时尚圈永远是需要领军人...
4999    全球最美女人合成图::国整形外科教授李承哲,在国际学术杂志美容整形外科学会学报发表了考虑种族...
Name: content, Length: 5000, dtype: object

'法国VS西班牙、里贝里VS哈维,北京时间6月24日凌晨一场的大战举世瞩目,而这场胜利不仅仅关乎两支顶级强队的命运,同时也是他们背后的球衣赞助商耐克和阿迪达斯之间的一次角逐。T谌胙”窘炫分薇的16支球队之中,阿迪达斯和耐克的势力范围也是几乎旗鼓相当:其中有5家球衣由耐克提供,而阿迪达斯则赞助了6家,此外茵宝有3家,而剩下的两家则由彪马赞助。而当比赛进行到现在,率先挺进四强的两支球队分别被耐克支持的葡萄牙和阿迪达斯支持的德国占据,而由于最后一场1/4决赛是茵宝(英格兰)和彪马(意大利)的对决,这也意味着明天凌晨西班牙同法国这场阿迪达斯和耐克在1/4决赛的唯一一次直接交手将直接决定两家体育巨头在此次欧洲杯上的胜负。8据评估,在2012年足球商品的销售额能总共超过40亿欧元,而单单是不足一个月的欧洲杯就有高达5亿的销售额,也就是说在欧洲杯期间将有700万件球衣被抢购一空。根据市场评估,两大巨头阿迪达斯和耐克的市场占有率也是并驾齐驱,其中前者占据38%,而后者占据36%。体育权利顾问奥利弗-米歇尔在接受《队报》采访时说:“欧洲杯是耐克通过法国翻身的一个绝佳机会!”C仔尔接着谈到两大赞助商的经营策略:“竞技体育的成功会燃起球衣购买的热情,不过即便是水平相当,不同国家之间的欧洲杯效应却存在不同。在德国就很出色,大约1/4的德国人通过电视观看了比赛,而在西班牙效果则差很多,由于民族主义高涨的加泰罗尼亚地区只关注巴萨和巴萨的球衣,他们对西班牙国家队根本没什么兴趣。”因此尽管西班牙接连拿下欧洲杯和世界杯,但是阿迪达斯只为西班牙足协支付每年2600万的赞助费#相比之下尽管最近两届大赛表现糟糕法国足协将从耐克手中每年可以得到4000万欧元。米歇尔解释道:“法国创纪录的4000万欧元赞助费得益于阿迪达斯和耐克竞逐未来15年欧洲市场的竞争。耐克需要笼络一个大国来打赢这场欧洲大陆的战争,而尽管德国拿到的赞助费并不太高,但是他们却显然牢牢掌握在民族品牌阿迪达斯手中。从长期投资来看,耐克给法国的赞助并不算过高。”'
import jieba.analyse
index = 2400
print (df_news['content'][index])
content_S_str = "".join(content_S[index])  
print ("  ".join(jieba.analyse.extract_tags(content_S_str, topK=5, withWeight=False)))
法国VS西班牙、里贝里VS哈维,北京时间6月24日凌晨一场的大战举世瞩目,而这场胜利不仅仅关乎两支顶级强队的命运,同时也是他们背后的球衣赞助商耐克和阿迪达斯之间的一次角逐。T谌胙”窘炫分薇的16支球队之中,阿迪达斯和耐克的势力范围也是几乎旗鼓相当:其中有5家球衣由耐克提供,而阿迪达斯则赞助了6家,此外茵宝有3家,而剩下的两家则由彪马赞助。而当比赛进行到现在,率先挺进四强的两支球队分别被耐克支持的葡萄牙和阿迪达斯支持的德国占据,而由于最后一场1/4决赛是茵宝(英格兰)和彪马(意大利)的对决,这也意味着明天凌晨西班牙同法国这场阿迪达斯和耐克在1/4决赛的唯一一次直接交手将直接决定两家体育巨头在此次欧洲杯上的胜负。8据评估,在2012年足球商品的销售额能总共超过40亿欧元,而单单是不足一个月的欧洲杯就有高达5亿的销售额,也就是说在欧洲杯期间将有700万件球衣被抢购一空。根据市场评估,两大巨头阿迪达斯和耐克的市场占有率也是并驾齐驱,其中前者占据38%,而后者占据36%。体育权利顾问奥利弗-米歇尔在接受《队报》采访时说:“欧洲杯是耐克通过法国翻身的一个绝佳机会!”C仔尔接着谈到两大赞助商的经营策略:“竞技体育的成功会燃起球衣购买的热情,不过即便是水平相当,不同国家之间的欧洲杯效应却存在不同。在德国就很出色,大约1/4的德国人通过电视观看了比赛,而在西班牙效果则差很多,由于民族主义高涨的加泰罗尼亚地区只关注巴萨和巴萨的球衣,他们对西班牙国家队根本没什么兴趣。”因此尽管西班牙接连拿下欧洲杯和世界杯,但是阿迪达斯只为西班牙足协支付每年2600万的赞助费#相比之下尽管最近两届大赛表现糟糕法国足协将从耐克手中每年可以得到4000万欧元。米歇尔解释道:“法国创纪录的4000万欧元赞助费得益于阿迪达斯和耐克竞逐未来15年欧洲市场的竞争。耐克需要笼络一个大国来打赢这场欧洲大陆的战争,而尽管德国拿到的赞助费并不太高,但是他们却显然牢牢掌握在民族品牌阿迪达斯手中。从长期投资来看,耐克给法国的赞助并不算过高。”
耐克  阿迪达斯  欧洲杯  球衣  西班牙

LDA :主题模型: 新闻分类###

格式要求:list of list形式,分词好的的整个语料

from gensim import corpora, models, similarities
import gensim
#http://radimrehurek.com/gensim/
#做映射,相当于词袋
dictionary = corpora.Dictionary(contents_clean)
corpus = [dictionary.doc2bow(sentence) for sentence in contents_clean]
lda = gensim.models.ldamodel.LdaModel(corpus=corpus, id2word=dictionary, num_topics=20) #类似Kmeans自己指定K值
#一号分类结果
print (lda.print_topic(1, topn=5))
0.008*"李小璐" + 0.006*"N" + 0.005*"T" + 0.005*"I" + 0.005*"e"
for topic in lda.print_topics(num_topics=20, num_words=5):
    print (topic[1])
0.006*"万" + 0.005*"评委" + 0.004*"S" + 0.004*"号" + 0.004*"中"
0.008*"李小璐" + 0.006*"N" + 0.005*"T" + 0.005*"I" + 0.005*"e"
0.008*"肌肤" + 0.003*"L" + 0.003*"化妆水" + 0.003*"纳什" + 0.003*"补水"
0.006*"中" + 0.006*"说" + 0.006*"孩子" + 0.005*"文化" + 0.004*"岁"
0.004*"幽默" + 0.004*"出版" + 0.003*"中" + 0.003*"创作" + 0.003*"万"
0.008*"万" + 0.008*"号" + 0.004*"中" + 0.003*"转" + 0.003*"查查"
0.007*"中" + 0.004*"英格兰" + 0.003*"球迷" + 0.003*"说" + 0.003*"乌克兰"
0.010*"男人" + 0.010*"女人" + 0.005*"说" + 0.005*"中" + 0.005*"爱"
0.010*"节目" + 0.008*"中" + 0.005*"电视剧" + 0.004*"中国" + 0.004*"卫视"
0.010*"中" + 0.006*"说" + 0.005*"选手" + 0.005*"球队" + 0.003*"吃"
0.008*"中" + 0.006*"饰演" + 0.005*"说" + 0.005*"男人" + 0.004*"老公"
0.016*"该剧" + 0.006*"化妆" + 0.006*"大戏" + 0.005*"市场" + 0.004*"青瓷"
0.015*"电影" + 0.013*"导演" + 0.008*"影片" + 0.008*"观众" + 0.007*"中"
0.007*"撒" + 0.005*"P" + 0.004*"产品" + 0.004*"中" + 0.003*"中国"
0.006*"中" + 0.004*"C" + 0.004*"说" + 0.004*"E" + 0.004*"中国"
0.010*"志愿" + 0.009*"离婚" + 0.003*"新加坡" + 0.003*"汤姆" + 0.003*"P"
0.036*"a" + 0.034*"e" + 0.025*"n" + 0.025*"o" + 0.022*"i"
0.011*"考生" + 0.006*"中" + 0.005*"分手" + 0.005*"说" + 0.004*"恋情"
0.013*"中国" + 0.006*"中" + 0.006*"i" + 0.005*"a" + 0.004*"音乐"
0.010*"中" + 0.008*"比赛" + 0.007*"男人" + 0.004*"教育" + 0.004*"说"
df_train=pd.DataFrame({'contents_clean':contents_clean,'label':df_news['category']})
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)
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)
#x_train = x_train.flatten()
x_train[0][1]
'上海'
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]))
    except:
        print (line_index,word_index)
words[0]        
'中新网 上海 日电 于俊 父亲节 网络 吃 一顿 电影 快餐 微 电影 爸 对不起 我爱你 定于 本月 父亲节 当天 各大 视频 网站 首映 葜 谱 鞣 剑 保慈 障蚣 钦 呓 樯 埽 ⒌ 缬 埃 ǎ 停 椋 悖 颍 铩 妫 椋 恚 称 微型 电影 新 媒体 平台 播放 状态 短时 休闲 状态 观看 完整 策划 系统 制作 体系 支持 显示 较完整 故事情节 电影 微 超短 放映 微 周期 制作 天 数周 微 规模 投资 人民币 几千 数万元 每部 内容 融合 幽默 搞怪 时尚 潮流 人文 言情 公益 教育 商业 定制 主题 单独 成篇 系列 成剧 唇 开播 微 电影 爸 对不起 我爱你 讲述 一对 父子 观念 缺少 沟通 导致 关系 父亲 传统 固执 钟情 传统 生活 方式 儿子 新派 音乐 达 习惯 晚出 早 生活 性格 张扬 叛逆 两种 截然不同 生活 方式 理念 差异 一场 父子 间 拉开序幕 子 失手 打破 父亲 心爱 物品 父亲 赶出 家门 剧情 演绎 父亲节 妹妹 哥哥 化解 父亲 这场 矛盾 映逋坏 嚼 斫 狻 ⒍ 粤 ⒌ 桨容 争执 退让 传统 尴尬 父子 尴尬 情 男人 表达 心中 那份 感恩 一杯 滤挂 咖啡 父亲节 变得 温馨 镁 缬 缮 虾 N 逄 煳 幕 传播 迪欧 咖啡 联合 出品 出品人 希望 观摩 扪心自问 父亲节 父亲 记得 父亲 生日 哪一天 父亲 爱喝 跨出 家门 那一刻 感觉 一颗 颤动 心 操劳 天下 儿女 父亲节 大声 喊出 父亲 家人 爱 完'
print (len(words))
3750
from sklearn.feature_extraction.text import 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())


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
texts=["dog cat fish","dog cat cat","fish bird", 'bird']
cv = CountVectorizer(ngram_range=(1,4))
cv_fit=cv.fit_transform(texts)

print(cv.get_feature_names())
print(cv_fit.toarray())


print(cv_fit.toarray().sum(axis=0))
['bird', 'cat', 'cat cat', 'cat fish', 'dog', 'dog cat', 'dog cat cat', 'dog cat fish', 'fish', 'fish bird']
[[0 1 0 1 1 1 0 1 1 0]
 [0 2 1 0 1 1 1 0 0 0]
 [1 0 0 0 0 0 0 0 1 1]
 [1 0 0 0 0 0 0 0 0 0]]
[2 3 1 1 2 2 1 1 2 1]
from sklearn.feature_extraction.text import CountVectorizer

vec = CountVectorizer(analyzer='word', max_features=4000,  lowercase = False)
vec.fit(words)

CountVectorizer(analyzer='word', binary=False, decode_error='strict',
                dtype=, 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)
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
from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer = TfidfVectorizer(analyzer='word', max_features=4000,  lowercase = False)
vectorizer.fit(words)
TfidfVectorizer(analyzer='word', binary=False, decode_error='strict',
                dtype=, encoding='utf-8',
                input='content', lowercase=False, max_df=1.0, max_features=4000,
                min_df=1, ngram_range=(1, 1), norm='l2', preprocessor=None,
                smooth_idf=True, stop_words=None, strip_accents=None,
                sublinear_tf=False, token_pattern='(?u)\\b\\w\\w+\\b',
                tokenizer=None, use_idf=True, vocabulary=None)

使用朴素贝叶斯算法进行新闻分类

print(len(y_train))
print(len(words))

3750
3750
# 传入训练参数,两者含有的数据条数应该相同。
from sklearn.naive_bayes import MultinomialNB
classifier = MultinomialNB()
classifier.fit(vectorizer.transform(words), y_train)
MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)
classifier.score(vectorizer.transform(test_words), y_test)
0.8152

你可能感兴趣的:(机器学习,深度学习,朴素贝叶斯算法)