想起高中的时候英语一直很差,后来发现背英语中出现频率最高的单词是一种很高效的学习方法,于是现在写出来一个小程序

  • 更新
    最近数据结构课程设计,老师给的题目里面有个就是分析文本,统计单词频率,用c++来写,所以就增加c++版本的,源码在github里已更新,因为是课程设计,就没用c++的map库来写,用自己定义的红黑树来实现的

github项目地址(如果觉得这个程序好,求个star)
这个小程序可以统计文件input.txt文本中所有英文单词的词频(由高到低排序),并给出每个单词的翻译
这个程序有两种方法,第一种用goole-cloud库,收费的,不过运行时间快一些,第二种模拟网页请求,时间略长,不能大量翻译.
本程序用的两种方法都可以运行,第一种在本机运行后,超出了免费翻译次数,于是就用的第二种,要用第一种的话,把源代码中注释的代码取消注释即可,再把第二种的注释就可以了

一.运行前需要安装google-cloud库,并安装Google Cloud SDK

1.安装相关模块

1
pip install --upgrade google-cloud-translate

2.调用api进行翻译之前,需要安装相关证书

安装 Google Cloud SDK
因为在本地上运行,使用的第一种方式,安装之后会有自动弹出验证邮箱的界面,如果没有在Google cloud sdk shell 运行

1
gcloud auth application-default login

二.使用urllib取googletranslate

模拟一个头部,请求到translate.google.com去,然后解析出翻译文本

运行方式

把将要统计的文本放入Input.txt文件中,直接运行即可

1
python word.py

源代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#coding=utf8
import re
# from google.cloud import translate
import urllib.request
import sys
# translate_client = translate.Client()

# language = 'zh_CN' #将要翻译的语言
length = 4 #提选出小于此长度的单词

input = open("words.txt",'r',encoding='utf-8')
output = open('ouput.txt','w+',encoding='utf-8')

typ = sys.getfilesystemencoding()

def translate(querystr, to_l="zh", from_l="en"):
C_agent = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"}
flag = 'class="t0">'
tarurl = "http://translate.google.com/m?hl=%s&sl=%s&q=%s \
" % (to_l, from_l, querystr.replace(" ", "+"))
request = urllib.request.Request(tarurl, headers=C_agent)
page = str(urllib.request.urlopen(request).read().decode(typ))
target = page[page.find(flag) + len(flag):]
target = target.split("<")[0]
return target

try:
all_word = input.read()
l = re.split(r'[^A-Za-z]+',all_word)
d = {}
for i in l:
i = i.lower()
if d.get(i)==None:
d[i] = 1
else:
d[i] = d[i] +1
ju = 0
for word in sorted(d,key=d.get,reverse=True):
if len(word)<length:
continue

# translation = translate_client.translate(word,target_language=language)
# tran = translation['translatedText']
tran = translate(word)
string = "%-18s%-10s%-7d\t"%(word,tran,d[word])
# string = "%-20s%-7d\t" %(word,d[word])
ju += 1
if ju%8==0:
string += '\n'
output.write(string)
finally:
input.close()
output.close()