机器学习入门-分群实例-新闻分类

数据获取

爬虫新浪新闻获得新闻标题和内容

import requests
import json
from bs4 import BeautifulSoup
import pandas as pd
res = requests.get('http://api.roll.news.sina.com.cn/zt_list?channel=news&cat_1=gjxw&level==1||=2&show_ext=1&show_all=1&show_num=500&tag=1&format=json') #通过新浪新闻API获取国际新闻信息,show_num可以设置一次获得多少新闻
data = json.loads(res.text) #将json格式数据转换成字典
def get_article(url):  #定义一个通过网址获取页面内新闻内容的函数
    res = requests.get(url)
    res.encoding='utf-8'
    soup=BeautifulSoup(res.text,'lxml')
    article = soup.select('div#artibody')[0].text.strip()
    return article
news = []
for i in data['result']['data']:
    article = get_article(i['url'])
    news.append({'title':i['title'],'article':article})  # 将新闻标题,新闻内容保存到news列表
df = pd.DataFrame(news)  # 将news列表转化成dataframe格式

使用结巴分词

import jieba
titles = []
articles = []
for rec in df.iterrows():
    articles.append(' '.join(jieba.cut(rec[1].article))) #articles中每一项为新闻内容分词后的结果
    titles.append(rec[1].title) # titles为新闻标题列表

建立词频矩阵

from sklearn.feature_extraction.text import CountVectorizer
vertorizer = CountVectorizer()
X = vertorizer.fit_transform(articles)

计算余弦距离

from sklearn.metrics.pairwise import cosine_similarity
cosine_similarity = cosine_similarity(X,X)

使用kmeans分群

from sklearn.cluster import KMeans
c = KMeans(n_clusters = 10,init='k-means++',random_state=123)
k_data = c.fit_predict(cosine_similarity)

分群结果

import numpy
titles_ary = numpy.array(titles)
print(titles_ary[k_data ==0])
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 常用概念: 自然语言处理(NLP) 数据挖掘 推荐算法 用户画像 知识图谱 信息检索 文本分类 常用技术: 词级别...
    御风之星阅读 9,363评论 1 25
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,360评论 25 709
  • 概述及标签体系搭建 1 概述 随着信息技术的迅速发展和信息内容的日益增长,“信息过载”问题愈来愈严重,愈发带来很大...
    JinkeyAI阅读 23,013评论 10 241
  • 很早之前看了几篇博文,只留下模糊印象 。这次是在学习人工智能的基础知识后再看,其中研究自然语言的方法从基于规则转变...
    轻舟阅读 5,984评论 0 9
  • 旱烟这个名字来源于清朝,当时东北民间有一种椭圆形的烟叶,由于努尔哈赤大汉很喜欢抽这种关东烟,所以后来久而久...
    枭雄科技阅读 1,932评论 0 0