Python爬取十篇新闻统计TF-IDF
作者:果7 发布时间:2023-07-20 12:23:28
统计十篇新闻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)
使用json.cn查看数据:
github地址:https://github.com/mqsee/learngit
来源:http://blog.csdn.net/coraline_m/article/details/51204988


猜你喜欢
- 本文实例讲述了Python实现监控Nginx配置文件的不同并发送邮件报警功能。分享给大家供大家参考,具体如下:因为项目中经常涉及到多个Ngi
- 最近看JavaScript高级程序设计,大有收获,接下来几天写一下读书笔记。之前写了一篇Ajax初步理解的随笔,里面有个函数用来创建XmlH
- 前言原理:Windows逆向,通过内联汇编的形式调用发消息的函数下面的代码PC微信版本是:3.7.0.26 , python使用的32位的3
- 析构函数:当某个对象成为垃圾或者当对象被显式销毁时执行。GC(Garbage Collector) 在PHP中,没有任何变量指向这个对象时,
- drop table if exists dd; create table dd ( user_id int , class_no int
- Python中pass的作用空语句 do nothing保证格式完整保证语义完整以if语句为例,在c或c++/java中:if(true);
- 解析url用的类库:python2版本: from urlparse import urlparseimport urllibpython3
- 一、什么是线程?线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程。车间负责把资源整合到一起,
- 最近这段时间研究Node感觉不错,自己做了一个增删改查,虽然有些简陋,但是思想是想通的,其实所有项目都是增删改查,有助于初学者快速掌握Nod
- 自带库一、datetimedatetime是Python处理日期和时间的标准库。1、获取当前日期和时间>>> from d
- 有需要的人可以参考一下,如果试用过,发现问题,欢迎留言告知,不胜感激。功能介绍:1、若页面无刷新,且第一次传值小于第二次传值或者圆环初始化时
- MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当 * 能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似
- 以下为引用的内容: <html> <head> <title>不刷新页面查询的方法&
- asp中怎么替换最后一个逗号为空字符串?举例 aaa,bbb,ccc,eee, 这个字符串怎么让最后一个逗号变没,其他的不变啊 ?问题补充:
- 最近写的资源策略管理,在ceilometer 中创建alarm时,name要求是不能重复的,所以在创建policy的时候,要对policy的
- 在做项目中遇到这样一个问题,就是我们需要添加几组数据到数据库,但是具体几组数据不确定,有客户来填写,比如我们需要添加打折策略,可能个策略有很
- 插入数据MySQL 表中使用 INSERT INTO SQL语句来插入数据。你可以通过 mysql> 命令提示窗口中向数据表中插入数据
- 本文实例演示了Python生成pdf文件的方法,是比较实用的功能,主要包含2个文件。具体实现方法如下:pdf.py文件如下:#!/usr/b
- 1. 安装Pyechartspip install pyecharts2. 图表基础2.1 主题风格添加主题风格使用的是 InitOpts(
- 使用django启动命令行和脚本,可以方便的使用django框架做开发,例如,数据库的操作等。下面分别介绍使用方法。django shell