Python爬取十篇新闻统计TF-IDF


Posted in Python onJanuary 03, 2018

统计十篇新闻TF-IDF

统计TF-IDF词频,每篇文章的 top10 的高频词存储为 json 文件

TF-IDF

TF-IDF(term frequency?inverse document frequency)是一种用于资讯检索与文本挖掘的常用加权技术。TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,互联网上的搜索引擎还会使用基于连结分析的评级方法,以确定文件在搜寻结果中出现的顺序。
假如一篇文件的总词语数是100个,而词语“母牛”出现了3次,那么“母牛”一词在该文件中的词频就是3/100=0.03。一个计算文件频率(DF)的方法是测定有多少份文件出现过“母牛”一词,然后除以文件集里包含的文件总数。所以,如果“母牛”一词在1,000份文件出现过,而文件总数是10,000,000份的话,其逆向文件频率就是log(10,000,000 / 1,000)=4。最后的TF-IDF的分数为0.03 * 4=0.12。 —— [ 维基百科 ]

博主选择的是chinadaily的十篇新闻.

1.使用http request请求
2.使用Beautiful Soup来抓取文章标题和内容
3.统计TF-IDF
4.保存到json文件中

代码块

@requires_authorization
#coding=utf-8

import requests
import bs4
import sys
import math
import json
reload(sys)
sys.setdefaultencoding('utf-8')

url_list = ['http://www.chinadaily.com.cn/china/2016-04/20/content_24701635.htm',
      'http://www.chinadaily.com.cn/china/2016-04/20/content_24700746.htm',
      'http://www.chinadaily.com.cn/china/2016-04/20/content_24681482.htm',
      'http://www.chinadaily.com.cn/china/2016-04/19/content_24675530.htm',
      'http://www.chinadaily.com.cn/china/2016-04/19/content_24675455.htm',
      'http://www.chinadaily.com.cn/china/2016-04/19/content_24674074.htm',
      'http://www.chinadaily.com.cn/china/2016-04/19/content_24655536.htm',
      'http://www.chinadaily.com.cn/china/2016-04/18/content_24643685.htm',
      'http://www.chinadaily.com.cn/china/2016-04/18/content_24636917.htm',
      'http://www.chinadaily.com.cn/china/2016-04/15/content_24562198.htm'
      ]

articles_title = []
articles_content = []

for pos,url in enumerate(url_list):
  r = requests.get(url)
  soup1 = bs4.BeautifulSoup(r.text)
  soup2 = bs4.BeautifulSoup(str(soup1.find_all(id="Title_e")))
  articles_title.append(soup2.h1.string)
  mystr = ""
  soup3 = bs4.BeautifulSoup(str(soup1.find_all(id="Content")))
  for x in soup3.find_all("p"):
    mystr = mystr + x.string

  str_p = ""
  contents = []
  for pos,x in enumerate(mystr):
    if x == '.' or x == ',':
      if pos < (len(mystr) - 1) and mystr[pos+1] >= '0' and mystr[pos+1] <= '9':
        str_p = str_p + x
      elif str_p == "":
        continue
      else:
        contents.append(str_p)
        str_p = ""
    elif x == '(' or x == ')' or x == ' ' or x == '"' or x == '[' or x == ']' or x == '-':
      if str_p == "":
        continue
      else:
        contents.append(str_p)
        str_p = ""
    else:
      str_p = str_p + x

  articles_content.append(contents)

Dict_idf = {}
DictList = []

for content in articles_content:
  Dict_tf = {}
  for x in content:
    if not Dict_tf.has_key(x):
      Dict_tf[x] = 1.0
      if not Dict_idf.has_key(x):
        Dict_idf[x] = 1.0
      else:
        Dict_idf[x] += 1.0
    else:
      Dict_tf[x] += 1.0

  for k, v in Dict_tf.items():
    Dict_tf[k] = v / len(content)

  DictList.append(Dict_tf)

for k, v in Dict_idf.items():
  Dict_idf[k] = math.log(float(len(url_list)) / v)

for pos,x in enumerate(DictList):
  for k,v in x.items():
    DictList[pos][k] = v*Dict_idf[k]
  DictList[pos] = sorted(x.iteritems(), key=lambda d: d[1], reverse=True)

"""
[
  [
    article_titile:"XXXX"
    [
      {
        word:"hello"
        value:3.5
      }
      {
        word:"hello"
        value:3.5
      }
      {
        word:"hello"
        value:3.5
      }
      ...
    ]
  ]
]
"""

data = []
for pos in range(10):
  data2=[]
  data2.append("article_titile:")
  data2.append(articles_title[pos])
  data2.append([{"word": k,"value":round(v,4)} for k,v in DictList[pos][:10]])
  data.append(data2)

# Writing JSON data
with open('data.json', 'w') as f:
  json.dump(data, f)

Python爬取十篇新闻统计TF-IDF

使用json.cn查看数据:

Python爬取十篇新闻统计TF-IDF

github地址:https://github.com/mqsee/learngit

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的GUI框架PySide的安装配置教程
Feb 16 Python
Python抓取手机号归属地信息示例代码
Nov 28 Python
Django项目中用JS实现加载子页面并传值的方法
May 28 Python
Python使用Pickle库实现读写序列操作示例
Jun 15 Python
Python中asyncio与aiohttp入门教程
Oct 16 Python
Python 实现王者荣耀中的敏感词过滤示例
Jan 21 Python
python 实现矩阵上下/左右翻转,转置的示例
Jan 23 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
Feb 26 Python
python科学计算之numpy——ufunc函数用法
Nov 25 Python
python数据爬下来保存的位置
Feb 17 Python
Django中从mysql数据库中获取数据传到echarts方式
Apr 07 Python
Pyinstaller打包Scrapy项目的实现步骤
Sep 22 Python
Python制作词云的方法
Jan 03 #Python
Python读取Json字典写入Excel表格的方法
Jan 03 #Python
python基于ID3思想的决策树
Jan 03 #Python
python遍历文件夹下所有excel文件
Jan 03 #Python
Python将多份excel表格整理成一份表格
Jan 03 #Python
Python将多个excel文件合并为一个文件
Jan 03 #Python
python中的字典操作及字典函数
Jan 03 #Python
You might like
微信公众号开发客服接口实例代码
2016/10/21 PHP
php基于dom实现的图书xml格式数据示例
2017/02/03 PHP
php图像验证码生成代码
2017/06/08 PHP
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
javascript数组的使用
2013/03/28 Javascript
js实现页面转发功能示例代码
2013/08/05 Javascript
Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例
2015/01/01 NodeJs
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
javascript制作幻灯片(360度全景图片)
2015/07/28 Javascript
jQuery多条件筛选如何实现
2015/11/04 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
jquery siblings获取同辈元素用法实例分析
2016/07/25 Javascript
JS之相等操作符详解
2016/09/13 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
详解nodejs微信公众号开发——5.素材管理接口
2017/04/11 NodeJs
JavaScript运动框架 多物体任意值运动(三)
2017/05/17 Javascript
详解element-ui表格中勾选checkbox,高亮当前行
2019/09/02 Javascript
在vue中使用vuex,修改state的值示例
2019/11/08 Javascript
关于vue3.0中的this.$router.replace({ path: '/'})刷新无效果问题
2020/01/16 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
[58:21]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第二场
2018/04/04 DOTA
Python 随机生成中文验证码的实例代码
2013/03/20 Python
python列表操作实例
2015/01/14 Python
将Python中的数据存储到系统本地的简单方法
2015/04/11 Python
Python实现简单的多任务mysql转xml的方法
2017/02/08 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
2017/04/24 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
2019/02/26 Python
使用Keras预训练模型ResNet50进行图像分类方式
2020/05/23 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
2020/10/21 Python
HTML5录音实践总结(Preact)
2020/05/07 HTML / CSS
J2EE是技术还是平台还是框架
2016/08/14 面试题
电子商务专业毕业生工作推荐信
2013/11/17 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
2015年服务员工作总结
2015/04/08 职场文书
浅析Django接口版本控制
2021/06/26 Python