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进阶教程之循环对象
Aug 30 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
Feb 19 Python
python 队列详解及实例代码
Oct 18 Python
Python之Scrapy爬虫框架安装及使用详解
Nov 16 Python
django+mysql的使用示例
Nov 23 Python
关于Python作用域自学总结
Jun 10 Python
python实现飞船大战
Apr 24 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 Python
聊聊python中的循环遍历
Sep 07 Python
Python中的datetime包与time包包和模块详情
Feb 28 Python
Elasticsearch 数据类型及管理
Apr 19 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 开发环境配置(Zend Studio)
2010/04/28 PHP
ThinkPHP模板输出display用法分析
2014/11/26 PHP
php使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
2015/12/09 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
PHPMAILER实现PHP发邮件功能
2018/04/18 PHP
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
Javascript变量函数浅析
2011/09/02 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
jqgrid 编辑添加功能详细解析
2013/11/08 Javascript
与Math.pow 相反的函数使用介绍
2014/08/04 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
JS获取元素多层嵌套思路详解
2016/05/16 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
jstree的简单实例
2016/12/01 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
微信小程序 动态传参实例详解
2017/04/27 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
Python实现的检测web服务器健康状况的小程序
2014/09/17 Python
Python使用itertools模块实现排列组合功能示例
2018/07/02 Python
从0开始的Python学习016异常
2019/04/08 Python
python selenium登录豆瓣网过程解析
2019/08/10 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
Python for i in range ()用法详解
2020/09/18 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
Django 404、500页面全局配置知识点详解
2020/03/10 Python
台湾森森购物网:U-mall
2017/10/16 全球购物
师范大学音乐表演专业求职信
2013/10/23 职场文书
办理信用卡工作证明
2014/01/11 职场文书
酒店财务总监岗位职责
2015/04/03 职场文书
电影建国大业观后感
2015/06/01 职场文书
新娘婚礼致辞
2015/07/27 职场文书
员工工作心得体会
2019/05/07 职场文书
MongoDB balancer的使用详解
2021/04/30 MongoDB
Vue接口封装的完整步骤记录
2021/05/14 Vue.js