stackoverfollowers!
我正在努力解决一项任务。这是:
''写一个函数相同的词(u1,u2,enc,k):
- 拿2个网址和enc ='utf8':
u1 ='http://...u1 ..'
u2 = “http://...u2 ...- 在此网页上,u1和u2会在两个页面上找到长度k 的字词
- 计算每页上出现的单词次数
- 返回包含3个参数组的列表:字(见第2段),发生1 (单词出现的次数)在页面u1), occurrence 2 (如何 很多时候,页面上出现一个单词u2)
- 根据两页“
上发生的总数,返回的列表应按递减顺序排列 醇>
使用此代码删除所有非字母字符
def mywords(s): # delet nonalphabetic characters
for c in '''!?/-,():;--'.\_[]"{}''':
s = s.replace(c, ' ')
return s.split() # return a list of all words from page with my url
import urllib.request as ul
def myurl(u, enc): #open my url
p = ul.urlopen(u)
t = p.read()
p.close()
return mywords(t.lower())
然后我遇到困难点3-5并且卡住(主要是因为如果有什么事情没有去,我用 pythontutor.com 在线查看代码但是在这种情况下我不能这样做因为它不支持urllib库)
谢谢!!!
答案 0 :(得分:0)
在我看来,你需要一个测试环境。 我会在本地机器上安装Python并在IDLE中测试代码,这是一个随Python一起提供的编辑器。
关于你的家庭作业的一些想法。 1.函数myurl读取远程html文件的内容,因为它只是一个文件。 您可以将代码放在read()和close()语句之间。您可以逐行浏览文件,然后逐字逐句查找符合您需求的文字。您可能希望首先使用mywords函数从单词中删除不需要的字符。
希望有所帮助。
答案 1 :(得分:0)
我们不清楚你遇到了什么问题,但是我制作了一个符合规格的程序,它可以作为你的基础。但是,在理解了这一点之后,你应该明确地做出自己的实现。
好的,首先:urllib api从python 2急剧变化到3. HTMLParser类也在不同的地方,具体取决于版本。这意味着如果您希望代码可移植,则必须执行一些额外的工作。从不同的方向来看,我选择隐藏这些问题,方法是使用requests来请求页面,BeautifulSoup来解析其内容。 显然,这是一种权衡,因为您必须安装非本机库:
在你的shell中:
$ pip install requests beautifulsoup4
好处是代码变得很短:
webpage_words_counter_example.py:
import re
from collections import Counter
import requests
from bs4 import BeautifulSoup
def get_words_from_url(url):
response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
for script in soup(["script", "style"]):
script.extract()
# returns a list of words.
return re.sub('\W', ' ', soup.get_text()).lower().split()
def samewords(u1, u2, enc, k):
# Retrieve content, filter words with specified
# length and initialize repetition counters.
w1, w2 = map(Counter,
(filter(lambda word: len(word) == k, words)
for words in map(get_words_from_url,
(u1, u2))))
# Map all words to a list of tuples (word, count_w1, count_w2)
# and sort this list by count_w1 and count_w2.
return sorted(map(lambda x: (x, w1[x], w2[x]),
set(w1.keys()) | set(w2.keys())),
# disregard the word itself when sorting,
# considering only its occurrence in each text.
key=lambda x: x[1:],
# reversed array, so most frequent words come first.
reverse=True)
if __name__ == '__main__':
word_count = samewords(
'https://www.theguardian.com/environment/2016/oct/27/scheme-to-reopen-river-severn-to-fish-wins-almost-20m-in-funding',
'https://www.theguardian.com/environment/2016/oct/27/world-on-track-to-lose-two-thirds-of-wild-animals-by-2020-major-report-warns',
'utf-8',
10
)
print('word count:', word_count)