鱼C论坛

 找回密码
 立即注册
查看: 4874|回复: 40

[原创] 写了个升级版的有道词典

[复制链接]
发表于 2017-4-8 22:31:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
花了两个小时写了个升级版的有道词典,代码写的很乱(不是一般的乱)。。。
支持整句话的中英互译,
查询英语单词时可以查找:释义,近义词,同根词,音标,双语例句,网络词组,词根

最重要的一点
每次翻译过的词语或者句子程序会自动保存到本地(‘系统文件,勿删.sys’),第二次翻译是就可以实现离线翻译了
又正是因为这个原因,系统文件,勿删.sys这个文件会越来越大...

好了,废话不多说,好用不好用大家说了算!
show me the code!




游客,如果您要查看本帖隐藏内容请回复
po2.PNG
po3.PNG
po4.PNG

评分

参与人数 3荣誉 +5 鱼币 +15 贡献 +5 收起 理由
新手·ing + 5 支持楼主!
SixPy + 5 感谢楼主无私奉献!
~风介~ + 5 + 5 + 5 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-9 00:01:39 | 显示全部楼层
  1. from urllib.request import *
  2. from urllib.parse import *
  3. import pickle as p
  4. import json,re,os

  5. class Translate:
  6.     def __init__(self,key_words):
  7.         #存放网址
  8.         self.key_words = key_words
  9.         self.url_1 = Request('http://dict.youdao.com/search?q=' + self.key_words + '&keyfrom=fanyi.smartResult')
  10.         self.url_1.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36')
  11.         
  12.         self.url_2 = Request('http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=fanyi.logo')
  13.         self.url_2.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36')
  14.         self.url_list = [self.url_2,self.url_1]
  15.         #为self.find_meaning 初始化
  16.         self.date = {"type":'AUTO',
  17.             'i':self.key_words,
  18.             'doctype':'json',
  19.             'xmlVersion':'1.8',
  20.             'keyfrom':'fanyi.web',
  21.             'ue':'UTF-8',
  22.             'action':'FY_BY_CLICKBUTTON',
  23.             'typoResult':'true'}
  24.         self.date = urlencode(self.date).encode('utf-8')#编码
  25.         #存放翻译结果
  26.         self.translate_result = {self.key_words:{'meaning':[],
  27.                                                  'pronunciation':{'英':'','美':''},
  28.                                                  'serious_meaning':[],
  29.                                                  'internet_phrase':{},
  30.                                                  'synonym':{},
  31.                                                  'conjugate':{},
  32.                                                  'example_sentence':{}}}

  33.     def _load(self):
  34.         self.file = open('系统文件,勿删!.sys','rb')
  35.         self.dict = p.load(self.file)
  36.         self.file.close()
  37.         return self.dict

  38.     def _save(self):
  39.         self.old = self._load()
  40.         self.translate_result.update(self.old)
  41.         self.file = open('系统文件,勿删!.sys','wb')
  42.         dict = p.dump(self.translate_result,self.file)
  43.         self.file.close()

  44.    
  45.     #在'http://fanyi.youdao.com/查找释义
  46.     def _find_meaning(self):
  47.         self.cc = json.loads(urlopen(self.url_list[0],self.date).read().decode())
  48.         #查找翻译结果
  49.         try:
  50.             self.cc['smartResult']['entries'][1:]
  51.         except KeyError:
  52.             self.translate_result[self.key_words]['meaning'] = self.cc['translateResult'][0][0]['tgt']
  53.         else:
  54.             for i in self.cc['smartResult']['entries'][1:]:
  55.                 self.translate_result[self.key_words]['meaning'].append(i)
  56.     #查找发音
  57.     def _find_pronunciation(self):
  58.         self.cc = re.findall('<span class="pronounce">英(?:\n|.)+?</span>',self.html)
  59.         self.dd = re.findall('<span class="pronounce">美(?:\n|.)+?</span>',self.html)
  60.         #英式
  61.         self.a = str(self.cc[0]).find('[')
  62.         self.b = str(self.cc[0]).find(']')
  63.         self.translate_result[self.key_words]['pronunciation']['英'] = str(self.cc[0])[self.a:self.b+1]
  64.         #美式
  65.         self.a = str(self.dd[0]).find('[')
  66.         self.b = str(self.dd[0]).find(']')
  67.         self.translate_result[self.key_words]['pronunciation']['美'] = str(self.dd[0])[self.a:self.b+1]
  68.         
  69.     #查找详细的释义
  70.     def _find_meaning_seriously(self):
  71.         self.cc = re.findall(r'<div class="trans-container">(?:.|\n)+?</div>',self.html)
  72.         self.dd = re.findall(r'<li>[^\\].+?</li>',str(self.cc))
  73.         for each in self.dd:
  74.             self.ee = []
  75.             each = each.replace('<li>','')
  76.             each = each.replace('</li>','')
  77.             self.ee.append(each)
  78.             
  79.         self.translate_result[self.key_words]['serious_meaning'] = self.ee

  80.     #查找网络短语
  81.     def _find_internet_phrase(self):
  82.         self.cc = re.findall(r'<p class="wordGroup collapse">(?:.|\n)+?</p>',self.html)
  83.         self.dd = re.findall(r'<span(?:.|\n)+?</p>',str(self.cc))
  84.         for i in self.dd:
  85.             self.a = i.find('wordgroup')
  86.             self.b = i.find('</a>',self.a)
  87.             self.c = i.find('</span>',self.b)
  88.             self.d = i.find('</p>',self.c)
  89.             self.words = i[self.c+7:self.d]
  90.             #去除所有不好看的字符
  91.             self.words = self.words.replace(' ','')
  92.             self.words = self.words.replace('\\','')
  93.             self.words = self.words.replace('\n','')                              
  94.             self.translate_result[self.key_words]['internet_phrase'][i[self.a+11:self.b]] = self.words

  95.     #查找近义词
  96.     def _find_synonym(self):
  97.         self.cc = re.findall(r'<div id="synonyms".+>(?:.|\n)+?</div>',self.html)
  98.         self.dd = re.findall(r'<li>.+?</li>',str(self.cc))
  99.         self.ee = re.findall(r'syno">.+?</a>',str(self.cc))
  100.         self.a = []
  101.         for i in self.ee:
  102.             self.a.append(i[6:-4])
  103.         self.translate_result[self.key_words]['synonym'][self.dd[0][4:-5]] = self.a
  104.         
  105.     #查找同根词
  106.     def _find_conjugate(self):
  107.         if '同根词' in self.html:        
  108.             #查找词根
  109.             self.a = self.html.find('词根')
  110.             self.a = self.html.find('relword',self.a)
  111.             self.b = self.html.find('</a>',self.a)
  112.             self.d = self.html[self.a+9:self.b]
  113.             self.translate_result[self.key_words]['conjugate']['词根'] = self.d
  114.             self.cc = re.findall(r'<p class="wordGroup">\n.+?<span class="contentTitle">\n.+?<a class="search-js" href="/w/eng/.+/#keyfrom=dict.basic.relword">.+?</a>\n.+?</span>\n.+?\n.+</p>',self.html[self.a:])
  115.             for i in self.cc:
  116.                 self.a = i.find('relword')
  117.                 self.b = i.find('</a>',self.a)
  118.                 self.c = i.find('</a>')
  119.                 self.d = i.find('</p>',self.c)
  120.                 self.words = i[self.c+4:self.d]
  121.                 #去除所有不好看的字符
  122.                 self.words = self.words.replace(' ','')
  123.                 self.words = self.words.replace('\\','')
  124.                 self.words = self.words.replace('\n','')
  125.                 self.words = self.words.replace('</span>','')
  126.                 self.translate_result[self.key_words]['conjugate'][i[self.a+9:self.b]] = self.words

  127.         
  128.     #查找双语例句
  129.     def _find_example_sentence(self):
  130.         #英文
  131.         self.cc = re.findall(r'<span id="src_._." onmouseover="hlgt\(\'#src_._.,#tran_._.\'\)" onmouseout="unhlgt\(\'#src_._.,#tran_._.\'\)">.+</span>',self.html)
  132.         #释义
  133.         self.dd = re.findall(r'<span id="tran.+.+</span>',self.html)
  134.         self.ff = []
  135.         self.ee = []
  136.         for each in range(3):
  137.             self.ff.append(re.findall(r'>.+?</span>',self.cc[each]))
  138.             self.ee.append(re.findall(r'>.+?</span>',self.dd[each]))
  139.             for i in self.ff:
  140.                 if i[2] == ' ':
  141.                     self.ff.remove(i)
  142.             for i in self.ee:
  143.                 if i[2] == ' ':
  144.                     self.ee.remove(i)
  145.                     
  146.         #拼接为一句话
  147.         for each in range(3):
  148.             self.e = ''
  149.             self.c = ''
  150.             for i in self.ee[each]:
  151.                 self.e += i
  152.             for b in self.ff[each]:
  153.                 self.c += b
  154.             #去除不好看的字符
  155.             self.e = self.e.replace('</span>','')
  156.             self.e = self.e.replace('>','')
  157.             self.e = self.e.replace('<','')
  158.             self.e = self.e.replace('b','')
  159.             self.e = self.e.replace('/','')
  160.             self.c = self.c.replace('</span>','')
  161.             self.c = self.c.replace('>','')
  162.             self.c = self.c.replace('<','')
  163.             self.c = self.c.replace('b','')
  164.             self.c = self.c.replace('/','')
  165.             #添加换行符
  166.             self.e += '\n'
  167.             self.c += '\n'
  168.             self.translate_result[self.key_words]['example_sentence'][self.e] = self.c      
  169.                
  170.         

  171.     def _output(self):
  172.         #打印'meaning'
  173.         if self.translate_result[self.key_words]['meaning'] != []:
  174.             print('这个词的意思是: \n')
  175.             for i in self.translate_result[self.key_words]['meaning']:
  176.                 if not isinstance(i,str):
  177.                     print(i)
  178.                 else:
  179.                     print(self.translate_result[self.key_words]['meaning'])
  180.                     print('\n')
  181.                     break
  182.                
  183.         #打印发音
  184.         if self.translate_result[self.key_words]['pronunciation']['英'] != '':
  185.             print('发音:\n')
  186.             print('英式: %s' % self.translate_result[self.key_words]['pronunciation']['英'])
  187.             print('美式: %s' % self.translate_result[self.key_words]['pronunciation']['美'])
  188.             print('\n')
  189.             
  190.         #打印'serious_meaning'
  191.         if self.translate_result[self.key_words]['serious_meaning'] != []:
  192.             print('说专业一点,这个词的意思是:\n')
  193.             for i in self.translate_result[self.key_words]['serious_meaning']:
  194.                 print(i)
  195.             print(' ')
  196.             
  197.         #打印网络词组
  198.         if self.translate_result[self.key_words]['internet_phrase'] != {}:
  199.             print('相关的网络词组: \n')
  200.             for each in self.translate_result[self.key_words]['internet_phrase'].items():
  201.                 print('%s ------ %s' % (each[0],each[1]))
  202.             print('\n')
  203.             
  204.         #打印近义词
  205.         if self.translate_result[self.key_words]['synonym'] != {}:
  206.             print('这个词语的近义词是:\n')
  207.             for each in self.translate_result[self.key_words]['synonym'].items():
  208.                 print(each[0])
  209.                 for i in each[1]:
  210.                     print(i)
  211.                 print('\n')
  212.                
  213.         #打印同根词
  214.         if self.translate_result[self.key_words]['conjugate'] != {}:
  215.             for each in self.translate_result[self.key_words]['conjugate'].items():
  216.                 print('%s ------ %s' % (each[0],each[1]))
  217.             print('\n')
  218.             
  219.         #打印双语例句
  220.         if self.translate_result[self.key_words]['example_sentence'] != {}:
  221.             print('例如:\n')
  222.             for each in self.translate_result[self.key_words]['example_sentence'].items():
  223.                 print('%s ------ %s' % (each[0],each[1]))
  224.             print('\n')
  225.             print('------------------------------华丽的分割线-------------------------------')
  226.             print('\n\n')

  227.     #程序从这里开始运行
  228.     def start(self):
  229.         self.old_dict = self._load()
  230.         if self.key_words not in self.old_dict:
  231.             try:
  232.                 #'http://dict.youdao.com/search?q=' + self.key_words + '&keyfrom=fanyi.smartResult' 返回值
  233.                 self.html = self.html = urlopen(self.url_list[1]).read().decode()
  234.                 #在'http://fanyi.youdao.com/查找释义
  235.                 self._find_meaning()
  236.                 #查找发音
  237.                 self._find_pronunciation()
  238.                 #查找详细的释义
  239.                 self._find_meaning_seriously()
  240.                 #查找网络短语
  241.                 self._find_internet_phrase()
  242.                 #查找近义词
  243.                 self._find_synonym()
  244.                 #查找同根词
  245.                 self._find_conjugate()
  246.                 #查找双语例句
  247.                 self._find_example_sentence()
  248.                 #保存
  249.                 self._save()
  250.                 #打印
  251.                 self._output()
  252.             except:
  253.                 self._find_meaning()
  254.                 self._save()
  255.                 self._output()
  256.                
  257.         else:
  258.             self.translate_result = self.old_dict
  259.             self._output()

  260. def look_all():
  261.     file = open('系统文件,勿删!.sys','rb')
  262.     dict = p.load(file)
  263.     file.close()
  264.     for each in dict.keys():
  265.         print(each)

  266. def go(words):
  267.     url = 'http://dict.youdao.com/search?q=' + words + '&keyfrom=fanyi.smartResult'
  268.     os.system('start %s' % url)

  269. def restart():
  270.     while True:
  271.         key_words = input('请输入需要翻译的内容:【输入0退出:】 ')
  272.         if key_words == '':
  273.             print('你什么也不输入我也退出>_<')
  274.             break
  275.         if key_words != '0':
  276.             cc = Translate(key_words)
  277.             cc.start()
  278.         else:
  279.             print('谢谢使用!')
  280.             print('程序退出...')
  281.             break
  282.    


  283. if __name__ == '__main__':
  284.     restart()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-9 00:02:59 | 显示全部楼层
原来是老司机,失敬失敬 —— 代码写得很漂亮,足以见得功力深厚!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-9 00:06:19 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-9 01:00:43 | 显示全部楼层
用什么写的~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-9 08:24:15 | 显示全部楼层
一定要看的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-9 08:26:00 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-9 10:38:58 | 显示全部楼层
  1.             self.e = self.e.replace('</span>','')
  2.             self.e = self.e.replace('>','')
  3.             self.e = self.e.replace('<','')
  4.             self.e = self.e.replace('b','')
  5.             self.e = self.e.replace('/','')
  6.             self.c = self.c.replace('</span>','')
  7.             self.c = self.c.replace('>','')
  8.             self.c = self.c.replace('<','')
  9.             self.c = self.c.replace('b','')
  10.             self.c = self.c.replace('/','')
复制代码


写成循环好点吧,可以重用。

@~风介~ 调皮的介哥~。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-9 12:32:55 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-9 12:43:03 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-9 13:52:38 From FishC Mobile | 显示全部楼层
~风介~ 发表于 2017-4-9 00:02
原来是老司机,失敬失敬 —— 代码写得很漂亮,足以见得功力深厚!

哪里哪里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-9 13:53:37 From FishC Mobile | 显示全部楼层
SixPy 发表于 2017-4-9 01:00
用什么写的~

python
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-9 20:04:29 | 显示全部楼层
看看怎么写的,学习下,支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-9 21:38:57 | 显示全部楼层
厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-9 22:31:54 | 显示全部楼层
MSK好厉害。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-9 23:12:59 | 显示全部楼层
加个gui是更好滴
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-10 07:12:38 | 显示全部楼层
看看大神们的作品
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-10 14:08:23 From FishC Mobile | 显示全部楼层
因为在学校准备中考来不及一一回复,抱歉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-10 17:27:40 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-4-10 17:31:35 | 显示全部楼层
完美运行,不错,向上面说的加个GUI更好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-16 15:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表