所以,代码实际上几乎完成了,我只需要解决这个生活质量问题:将这个元组转换为字符串。
我的代码应该做的是从我选择的 5 个网站中获取文本并计算前 15 个单词。我成功了,但输出太难看了。
它是所有内容的元组,但我需要一个只有前 15 个的字符串。
如何将这个已计数并排序的元组转换为字符串,而仅打印前 15 个单词?
法典:
#!/usr/bin/python
from urllib2 import *
from collections import Counter
from bs4 import BeautifulSoup
import re
from re import split
import string
import sys
def url_to_text(url, fp):
file= urlopen(url)
str_html = file.read()
obj_html = BeautifulSoup(str_html, "html.parser")
for element in obj_html(["script", "style"]):
element.extract()
str_text = obj_html.get_text()
#Clean the text
for char in '[]/:0123456789""()-.,\n':
str_text = str_text.replace(char, ' ')
str_text = str_text.lower()
word_list = str_text.split()
count_unique(word_list)
fp.write(str_text.encode('utf-8'))
def count_unique(chunk):
d = {}
word_freq = []
for word in chunk:
d[word] = d.get(word, 0) + 1
for key, value in d.items():
word_freq.append((value,key))
word_freq.sort(reverse=True)
convertTuple(word_freq)
print(word_freq)
def convertTuple(tup):
str_join = "n".join(str(tup) for x in tup)
return str_join
fp=open("tmp.txt", "w+")
url_to_text("https://en.wikipedia.org/wiki/AA", fp)
url_to_text("https://en.wikipedia.org/wiki/AB", fp)
url_to_text("https://en.wikipedia.org/wiki/AC", fp)
url_to_text("https://en.wikipedia.org/wiki/ZY", fp)
url_to_text("https://en.wikipedia.org/wiki/ZZ", fp)
使用列表切片获取前 15 名:
print(convertTuple(word_freq[0:15]))
假设你的元组被命名为 Results
top15 = str(results[:15])
您应该考虑使用 pandas 数据帧来制作一个漂亮的表概述。
Python 为此提供了 Collections 模块。
from collections import Counter
在url_to_text函数
word_list = str_text.split()
words=Counter(word_list).most_common(15)
top_words=list(map(lambda x:x[0],top_words))
您将获得前 15 个单词的列表。