新闻数据与任务简介

import pandas as pdimport jjieba

df_news = pd.read_table(‘./data/val.txt‘,names=[‘category‘,‘theme‘,‘URL‘,‘content‘],encoding=‘utf-8‘)
df_news = df_news.dropna() # 缺失值直接drop掉
df_news.head()

content = df_news.content.values.tolist()
分词
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()
数据清洗、停用词stopwords = pd.read_csv("stopwords.txt",index_col=False,sep="\t",quoting=3,names=[‘stopword‘],encoding=‘utf-8‘
stopwords.head()

# 通过自定义函数来实现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

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

df_content = pd.DataFrame({‘contents_clean‘:contents_clean})df_content.head()

df_all_words = pd.DataFrame({‘all_words‘:all_words})df_all_words.head()
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) # reset_index:重置索引,sort_value:排序
word_count.head()
WordCloud库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)
word_frequence = {x[0]:x[1] for x in words_count.head(100).values}
wordcloud = wordcloud.fit_words(word_frequence)
plt.imshow(wordcloud)
jieba提取关键字import jieba.analyse

index = 1000
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))) # topK关键词数量
LDA:主题模型
from gensim import corpora,models,similarities
import gensim
# 做映射,相当于词袋
dictionary = corpora.Dictionary(contents_clean) # contents_clean要求:list of list形式(两个list),分词好的整个语料
corpus = [dictionary.doc2bow(sentence) for sentence in contents_clean]

lda = gensim.models.ldamodel.LdaModel(corpus=corpus,id2word=dictionary,num_topics=20) # num_topics:number of topics

print(lda.print_topic(1,topn=5))

for topic in lda.print_topics(num_topics=20,num_words=5): # 20个主题,5个关键词  print(topic[1])


基于贝叶斯算法的新闻分类
df_train = pd.DataFrame({‘contents_clean‘:contents_clean,‘label‘:fd_news[‘category‘]})
df_train.tail()
df_train.label.unique()


label_mapping = {"汽车":1,"财经":2,"科技":3,"健康":4,"体育":5,"教育":6,"文化":7,"军事":8,"娱乐":9,"时尚":10}
df_train[‘label‘] = df_train[‘label‘].map(label_mapping)
df_train.head()
from aklearn.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)
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]
from sklearn.feature_extraction.text import CountVectorizer

vec = CountVectorizer(analyzer=‘word‘,max_features=4000,lowercase=False)
vec.fit(words)
from sklearn.naive_bayes import MultinomialNB
classifier = MultinomialNB()
classifier.fit(vec.transform(words),y_train)
# 测试集
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]
classifier.score(vec.transform(test_words),y_test) # 输出:0.804000000000....
CountVectorizer的标准使用方式,跟案例无关from sklearn.feature_extraction.text import CountVectorizer
tests=["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))

from sklearn.feature_extraction.text import CountVectorizer
tests=["dog cat fish","dog cat cat","fish bird",‘bird‘] # 注意一定要将数据转化成这种格式
cv = CountVectorizer(ngram_range=(1,4)) # ngram_range进行组合
cv_fit = cv.fit_transform(texts)

print(cv.get_feature_names()) # 不重复的单词

print(cv_fit.toarray())

print(cv_fit.toarray().sum(axis=0))



相比之前,精确度稍微有些提升,只是稍微
from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer = TfidfVectorizer(analyzer=‘word‘,max_features=4000,lowercase=False)
vectorizer.fit(words)
from sklearn.naive_bayes import MultinomialNB
classifier = MultinomialNB()
classifier.fit(vectorizer.transform(words),y_train)
classifier.score(vectorizer.transform(test_words),y_test) # 输出结果:0.8152000000000......
时间: 2024-11-26 02:16:10

新闻数据与任务简介的相关文章

iOS开发UI篇—无限轮播(新闻数据展示)

一.实现效果        二.实现步骤 1.前期准备 (1)导入数据转模型的第三方框架MJExtension (2)向项目中添加保存有“新闻”数据的plist文件 (3)导入用到的图片素材 2.步骤和代码 (1)新建一个数据模型 该模型的代码设计如下: YYnews.h文件 1 // 2 // YYnews.h 3 // 08-无限滚动(新闻数据展示) 4 // 5 6 #import <Foundation/Foundation.h> 7 8 @interface YYnews : NSO

55种开源数据可视化工具简介

55种开源数据可视化工具简介 雪姬 2015-04-21 11:47:56 数据可视化 评论(2)   数据时代数据可视化成为理解和表达数据的有效甚至是唯一的手段. 一共56个,盘点最实用的大数据可视化分析工具 工欲善其事必先利其器,本文对55个流行的数据可视化工具开源协议,主页,文档,案例等资源的进行简单介绍,其中包括著名的D3.js,R,Gephi,Raphaël,Processing.js,Tableau Public,Google Chart Tools,Arbor.js等,资料来源ht

利用Abot 抓取博客园新闻数据

1. 引言 相比于Java而言,基于C#的开源爬虫就少了很多.入行这么多年也从未接触过爬虫.出于兴趣今天给大家介绍一个C# 的爬虫工具Abot. 需要使用可以通过Nuget获取.Abot本身就支持多线程的爬取, 内部使用CsQuery来解析爬取到的Html文档.熟悉jQuery的同学肯定能快速上手CsQuery, 它就是一个C#版本的jQuery. 这里以爬取博客园当天的新闻数据为例,看看如何使用Abot. 2. 博客园新闻页面 http://news.cnblogs.com/ 这是博客园的新闻

android 从服务器获取新闻数据并显示在客户端

新闻客户端案例 第一次进入新闻客户端需要请求服务器获取新闻数据,做listview的展示, 为了第二次再次打开新闻客户端时能快速显示新闻,需要将数据缓存到数据库中,下次打开可以直接去数据库中获取新闻直接做展示. 总体步骤: 1.写布局listview ok 2.找到listview,设置条目的点击事件. ok 3.获取数据提供给listview做展示. 3.1:获取本地数据库缓存的新闻数据,让listview显示.如果没有网络不至于显示空界面. 3.2:请求服务器获取新闻数据,是一个json字符

iOS中常用的四种数据持久化方法简介

iOS中常用的四种数据持久化方法简介 iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data 1.属性列表涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults standardUserDefaults]就够用了 @interface User : NSObject <NSCoding>@property (nonatomic, assign) NSInteger userID;@property (nonatomic,

Android——百度APIstore+Json——获取新闻频道+新闻数据

Android--百度APIstore+Json--获取新闻频道+新闻数据 <span style="font-size:18px;"><strong>package com.example.jreduch08.util; import android.content.Context; import android.os.Environment; import java.io.File; import java.io.FileNotFoundException;

无限轮播(新闻数据展示)

无限轮播(新闻数据展示) 一.实现效果        二.实现步骤 1.前期准备 (1)导入数据转模型的第三方框架MJExtension (2)向项目中添加保存有“新闻”数据的plist文件 (3)导入用到的图片素材 2.步骤和代码 (1)新建一个数据模型 该模型的代码设计如下: YYnews.h文件 5 6 #import <Foundation/Foundation.h> 7 8 @interface YYnews : NSObject 9 @property(nonatomic,copy

SequoiaDB数据水平分区简介

1. 数据水平分区简介 在SequoiaDB中,默认情况下,表(集合)的数据只会存储在一个复制组中.这样,对该表的CRUD操作只会落到一个复制组中. 随着对表的IO请求上升/数据量的增加,就会造成性能瓶颈,导致访问时延增加.为了解决这个问题,便引入了水平分区的功能. 水平分区可以将表(集合)切分成若干分区,并将分区指定到不同的复制组中.示意图如下: 上图中,将集合2切分成N个分区, 每个分区可以指定到不同的复制组.这样,当查询数据时,就会根据条件将请求发给不同的复制组,提升查询性能. 2. 如何

Android—SDCard数据存取&amp;Environment简介

1:Environment简介: Environment是android.os包下的一个类,谷歌官方文旦的解释为:Provides access to environment variables(提供访问环境的变量),由此可看出,该类是用于程序访问SDCard的一个设备访问类 Environment 常量 构造方法 方法如下: 解析:比如字段:DIRECTORY_PICTURES 是返回SDcard中Pictures目录的名字 其中的SDCardPicturesName==“Pictures”: