【我爱背单词】用Python提炼3000英语新闻高频词汇

学英语,无论目的何在,词汇量总是一个绕不过去的坎,没有足够的词汇量,都难以用文法来组词造句。
前段时间,恶魔的奶爸提供了几份偏向于各个领域的高频词汇,很是不错。
最近用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高频词

猜你也喜欢

  1. Ace说道:

    可以把代码2和3的代码解释下吗

    1. zmister说道:

      代码2:请求一个网页,然后解析响应的html,剔除html中的标签和非英语单词,最后写入文本文件。
      代码3:(使用nltk这个库)加载代码2获取到的英语单词文本文件为语料库,计算单词数量,计算非重复性单词数量,计算词频并输出新的文本文件

  2. Ace说道:

    text = re.sub(r'\.*?\',' ',text)
    text = re.sub(r'\'," ",text)
    text = re.sub(r'[^a-zA-Z]',' ',text)
    这三段正则表达式中括号里面第一个都表示什么啊,或者博主有什么好的正则表达式的学习材料和网站,能否推荐给我。

    1. zmister说道:

      re.sub(正则匹配条件,需要替换成的字符串,原始字符串),
      网上有一个正则表达式30分钟入门,很不错

  3. Yang说道:

    请问这个停用词stopwords是这个库自带的吗?还是自己弄的一个文件啊?

    1. zmister说道:

      那个是nltk的语料库里面自带的,你也可以使用自己制作的

  4. Lee Zec说道:

    作者你好。
    代码1中的 pages 没有定义啊?这个问题怎么解决?

  5. 匿名说道:

    在爬取ChinaDaily全站网页URL时报错了
    程序出错:maximum recursion depth exceeded in comparison

  6. pan说道:

    1.爬取ChinaDaily全站网页URL 里面的pages 集合没设置

    爬到一半 出现程序出错:maximum recursion depth exceeded in comparison

  7. pan说道:

    1.爬取ChinaDaily全站网页URL 里面的 pages集合 开始没有设置
    程序爬取中出现 程序出错:maximum recursion depth exceeded in comparison 报错

  8. hahaha说道:

    第三段代码的第十六行中的item[0]是怎么回事啊,item不是单词吗,怎么变成频数了。。。

  9. 无怀氏说道:

    问题在于还没有爬什么网站的欲望怎么破 :lol:

    1. zmister说道:

      工具而已,有需要的时候,使用便是了

发表评论

电子邮件地址不会被公开。