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 相关文章推荐
Python3字符串学习教程
Aug 20 Python
好用的Python编辑器WingIDE的使用经验总结
Aug 31 Python
Python异常对代码运行性能的影响实例解析
Feb 08 Python
python远程连接MySQL数据库
Apr 19 Python
Python列表的切片实例讲解
Aug 20 Python
python使用 request 发送表单数据操作示例
Sep 25 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
Dec 19 Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 Python
如何理解Python中的变量
Jun 01 Python
pyqt5实现井字棋的示例代码
Dec 07 Python
Python深度学习之Pytorch初步使用
May 20 Python
matlab xlabel位置的设置方式
May 21 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面向对象全攻略 (十七) 自动加载类
2009/09/30 PHP
用PHP书写安全的脚本代码
2012/02/05 PHP
php MessagePack介绍
2013/10/06 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
PHP基于Closure类创建匿名函数的方法详解
2017/08/17 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
js实现简单的左右两边固定广告效果实例
2015/04/10 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
mui上拉加载功能实例详解
2017/04/13 Javascript
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
使用JS模拟锚点跳转的实例
2018/02/01 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
vue+springboot+element+vue-resource实现文件上传教程
2020/10/21 Javascript
python的变量与赋值详细分析
2017/11/08 Python
python3实现随机数
2018/06/25 Python
python中计算一个列表中连续相同的元素个数方法
2018/06/29 Python
django基于存储在前端的token用户认证解析
2019/08/06 Python
Python获取excel内容及相关操作代码实例
2020/08/10 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
突袭HTML5之Javascript API扩展3—本地存储全新体验
2013/01/31 HTML / CSS
HTML5 LocalStorage 本地存储详细概括(多图)
2017/08/18 HTML / CSS
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
金蝶的一道SQL笔试题
2012/12/18 面试题
学员自我鉴定
2014/03/19 职场文书
体育系毕业生自荐信
2014/06/28 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
前台接待岗位职责范本
2015/04/03 职场文书
家长会感言
2015/08/01 职场文书
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python