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 相关文章推荐
Windows8下安装Python的BeautifulSoup
Jan 22 Python
使用Python脚本将Bing的每日图片作为桌面的教程
May 04 Python
Python利用itchat对微信中好友数据实现简单分析的方法
Nov 21 Python
详解Python使用tensorflow入门指南
Feb 09 Python
Python简单获取二维数组行列数的方法示例
Dec 21 Python
Python面向对象之多态原理与用法案例分析
Dec 30 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
Apr 16 Python
python使用for...else跳出双层嵌套循环的方法实例
May 17 Python
python自动提取文本中的时间(包含中文日期)
Aug 31 Python
Python实现列表索引批量删除的5种方法
Nov 16 Python
Pytorch中的数据集划分&正则化方法
May 27 Python
Python爬虫实战之爬取携程评论
Jun 02 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 5.0对象模型深度探索之类的静态成员
2008/03/27 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
PHP实现的限制IP投票程序IP来源分析
2016/05/04 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
JqueryMobile动态生成listView并实现刷新的两种方法
2014/03/05 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
jQuery选择器总结之常用元素查找方法
2016/08/04 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
Vuex之理解state的用法实例
2017/04/19 Javascript
详解Vue打包优化之code spliting
2018/04/09 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
Python3.6简单反射操作示例
2018/06/14 Python
python 字典 按key值大小 倒序取值的实例
2018/07/06 Python
Selenium的使用详解
2018/10/19 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
Tensorflow Summary用法学习笔记
2020/01/10 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
美国在线医疗分销商:MedEx Supply
2020/02/04 全球购物
介绍下Java的输入输出流
2014/01/22 面试题
技术经理的自我评价范文
2013/12/03 职场文书
精通CAD能手自荐书
2014/01/31 职场文书
国庆节文艺活动方案
2014/02/03 职场文书
优秀大学生职业生涯规划书
2014/02/27 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
2014年绿化工作总结
2014/12/09 职场文书
车间统计员岗位职责
2015/04/14 职场文书
追悼会答谢词范文
2015/09/29 职场文书
诉讼和解协议书
2016/03/23 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书