学英语,无论目的何在,词汇量总是一个绕不过去的坎,没有足够的词汇量,都难以用文法来组词造句。
前段时间,恶魔的奶爸提供了几份偏向于各个领域的高频词汇,很是不错。
最近用Python写爬虫入门教程的时候,碰到过几个英文网站,便有了统计一份网站英文单词词频的念头。
3000高频单词库说明:
来源:http://www.chinadaily.com.cn/ 全站4700+个网页
剔除127个常见停用词,剔除单词长度为1的单词,剔除网站英文名chinadaily。
我年纪还轻,阅历不深的时候,我父亲教导过我一句话,我至今还念念不忘。 “每逢你想要批评任何人的时候, ”他对我说,“你就记住,这个世界上所有的人,并不是个个都有过你拥有的那些优越条件。”
——《了不起的盖茨比》
以下为3000高频词汇的提取过程,如需最后的单词库,直接拉到文末。
1.爬取ChinaDaily全站网页URL
def get_all_link(url): try: # 分割网址 host = url.split('/') # print(host[2]) wbdata = requests.get(url).text soup = BeautifulSoup(wbdata,'lxml') for link in soup.find_all('a'): # 判断网页中提取的URl形式 if link.get('href') not in pages and link.get('href') is not None: if link.get('href').startswith('http'): if link.get('href').split('/')[2] == host[2]: newpage = link.get('href') # print(newpage) pages.add(newpage) get_all_link(newpage) elif link.get('href').startswith('/'): newpage = link.get('href') pages.add(newpage) newpage_url = 'http://'+host[2]+newpage # print(newpage_url) get_all_link(newpage_url) print('url数量:'+str(len(pages))) except BaseException as e: print('程序出错:{0}'.format(e))
2.请求爬取的URL并解析网页单词
# 解析网页单词并写入文本文件 def resolve_html(url): wbdata = requests.get(url).content soup = BeautifulSoup(wbdata,'lxml') # 替换换行字符 text = str(soup).replace('\n','').replace('\r','') # 替换<script>标签 text = re.sub(r'\<script.*?\>.*?\</script\>',' ',text) # 替换HTML标签 text = re.sub(r'\<.*?\>'," ",text) text = re.sub(r'[^a-zA-Z]',' ',text) # 转换为小写 text = text.lower() text = text.split() text = [i for i in text if len(i) > 1 and i != 'chinadaily'] text = ' '.join(text) print(text) with open("j:\python\words.txt",'a+',encoding='utf-8') as file: file.write(text+' ') print("写入成功") if __name__ == '__main__': pool = Pool(processes=2) pool.map_async(resolve_html,urllist) pool.close() pool.join() print('运行完成')
3.对单词文本文件进行词频处理
# 对单词文本文件进行词频处理 def resolve_words(): corpath = 'J:\\python\\words' wordlist = PlaintextCorpusReader(corpath,'.*') allwords = nltk.Text(wordlist.words('words.txt')) print("单词总数",len(allwords)) print("单词个数",len(set(allwords))) stop = stopwords.words('english') swords = [i for i in allwords if i not in stop] print("去除停用词的单词总数:",len(swords)) print("去除停用词的单词个数:",len(set(swords))) print("开始词频统计") fdist = nltk.FreqDist(swords) print(fdist.most_common(3000)) for item in fdist.most_common(3000): print(item,item[0]) with open('J:\\python\\words3000.txt','a+',encoding='utf-8') as file: file.write(item[0]+'\r') print("写入完成")
结果为:
单词总数 3537063 单词个数 38201 去除停用词的单词总数: 2603450 去除停用词的单词个数: 38079
部分单词及词频为:
('online', 8788) ('business', 8772) ('society', 8669) ('people', 8646) ('content', 8498) ('story', 8463) ('multimedia', 8287) ('cdic', 8280) ('travel', 7959) ('com', 7691) ('cover', 7679) ('cn', 7515) ('hot', 7219) ('shanghai', 7064) ('first', 6941) ('photos', 6739) ('page', 6562) ('years', 6367) ('paper', 6289) ('festival', 6188) ('offer', 6064) ('sports', 6025) ('africa', 6008) ('forum', 5983)
最后得到一个包含3000个高频词汇的txt文本文件,大家可以将其导入到各大单词软件的单词本中。
下载地址:
关注微信公众号:州的先生
回复关键字:3000高频词
文章版权所有:州的先生博客,转载必须保留出处及原文链接
可以把代码2和3的代码解释下吗
代码2:请求一个网页,然后解析响应的html,剔除html中的标签和非英语单词,最后写入文本文件。
代码3:(使用nltk这个库)加载代码2获取到的英语单词文本文件为语料库,计算单词数量,计算非重复性单词数量,计算词频并输出新的文本文件
text = re.sub(r'\.*?\',' ',text)
text = re.sub(r'\'," ",text)
text = re.sub(r'[^a-zA-Z]',' ',text)
这三段正则表达式中括号里面第一个都表示什么啊,或者博主有什么好的正则表达式的学习材料和网站,能否推荐给我。
re.sub(正则匹配条件,需要替换成的字符串,原始字符串),
网上有一个正则表达式30分钟入门,很不错
请问这个停用词stopwords是这个库自带的吗?还是自己弄的一个文件啊?
那个是nltk的语料库里面自带的,你也可以使用自己制作的
作者你好。
代码1中的 pages 没有定义啊?这个问题怎么解决?
在爬取ChinaDaily全站网页URL时报错了
程序出错:maximum recursion depth exceeded in comparison
1.爬取ChinaDaily全站网页URL 里面的pages 集合没设置
爬到一半 出现程序出错:maximum recursion depth exceeded in comparison
1.爬取ChinaDaily全站网页URL 里面的 pages集合 开始没有设置
程序爬取中出现 程序出错:maximum recursion depth exceeded in comparison 报错
第三段代码的第十六行中的item[0]是怎么回事啊,item不是单词吗,怎么变成频数了。。。
问题在于还没有爬什么网站的欲望怎么破
工具而已,有需要的时候,使用便是了