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中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 Python
Django数据库操作的实例(增删改查)
Sep 04 Python
简单的python协同过滤程序实例代码
Jan 31 Python
tensorflow创建变量以及根据名称查找变量
Mar 10 Python
python3 面向对象__类的内置属性与方法的实例代码
Nov 09 Python
搭建python django虚拟环境完整步骤详解
Jul 08 Python
如何实现Django Rest framework版本控制
Jul 25 Python
手写一个python迭代器过程详解
Aug 27 Python
Python定时器线程池原理详解
Feb 26 Python
python 成功引入包但无法正常调用的解决
Mar 09 Python
基于python检查SSL证书到期情况代码实例
Apr 04 Python
python海龟绘图之画国旗实例代码
Nov 11 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
php数组中包含中文的排序方法
2014/06/03 PHP
解读PHP中上传文件的处理问题
2016/05/29 PHP
深入解析PHP中SESSION反序列化机制
2017/03/01 PHP
一次因composer错误使用引发的问题与解决
2019/03/06 PHP
告诉大家什么是JSON
2008/06/10 Javascript
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
jquery.mousewheel实现整屏翻屏效果
2015/08/30 Javascript
JS获取数组最大值、最小值及长度的方法
2015/11/24 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
express.js中间件说明详解
2019/03/19 Javascript
Vue中keep-alive组件作用详解
2020/02/04 Javascript
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
2020/08/10 Javascript
Zabbix实现微信报警功能
2016/10/09 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
python 三元运算符使用解析
2019/09/16 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
pandas 按日期范围筛选数据的实现
2021/02/20 Python
python实现控制台输出颜色
2021/03/02 Python
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
法学专业自我鉴定
2014/02/05 职场文书
建筑设计专业求职自我评价
2014/03/02 职场文书
比赛口号大全
2014/06/10 职场文书
租车协议书范本2014
2014/11/17 职场文书
高二英语教学反思
2016/03/03 职场文书
delete in子查询不走索引问题分析
2022/07/07 MySQL