def test_bind_multiple_service_urls(): service_urls = [ 'translate.google.com', 'translate.google.co.kr', ] translator = Translator(service_urls=service_urls) assert translator.service_urls == service_urls assert translator.translate('test', dest='ko') assert translator.detect('Hello')
class GoogleTranslator(MyTranslator.Translator): def __init__(self): self.translator = Translator(service_urls=['translate.google.cn']) def get_langlist(self): return GoogleLangList def lang2code(self, lang): return GoogleLanguages[lang] def translate(self, string, src, dest): return self.translator.translate(string, src=self.lang2code(src), dest=self.lang2code(dest)).text def detect(self, string): return GoogleCodes[self.translator.detect(string).lang.lower()]
def hello(): translator = Translator() input_src=request.form['inputtext'] print input_src #b=mtranslate.translate(name,"hi","utf8") #b=b.encode('utf-8') #print b.encode("utf-8") detected = translator.detect(input_src) if detected.lang == "hi": input_detected = "Hindi" output_detected = "English" destination_code = "en" if detected.lang == "en": input_detected = "English" output_detected = "Hindi" destination_code = "hi" output_src = translator.translate(input_src, src=detected.lang, dest=destination_code) print output_src.text #connect to the microsoft cloud for searching the various corpora of the english language with their corrosponding hindi corpora. #tokens = tokens = nltk.word_tokenize(name) #print tokens #pos_tagging = nltk.pos_tag(tokens) #print pos_tagging #client = support_library.MicrosoftTranslatorClient('machinetranslationmanishrana','mjbYdQ3SyROItdT1gJAXUcIxYlBDaEKs3oKZ8XcFq0w=') #language = langid.classify(name) '''if language[0] == 'en': translated = client.TranslateText(name, 'en', 'hi') input_detected = "English" output_detected = "Hindi" translated = translated.replace('"',"") data_set.append((name, translated)) else: translated = client.TranslateText(name, 'hi', 'en') input_detected = "Hindi" output_detected = "English" translated = translated.replace('"',"") data_set.append((translated, name))''' #output_detected="tst" #translated=name #input_detected="test" return render_template('index.html', name=input_src, translated=output_src.text, input_detected=input_detected,output_detected=output_detected)
def totranslate(bot: Bot, update: Update): msg = update.effective_message chat_id = update.effective_chat.id """ lang = str("af,am,ar,az,be,bg,bn,bs,ca,ceb,co,cs,cy,da,de,el,en,eo,es,et,eu,fa,fi,fr,fy,ga,gd,gl,gu,ha,haw,hi,hmn,hr,ht,hu,hy,id,ig,is,it,iw,ja,jw,ka,kk,km,kn,ko,ku,ky,la,lb,lo,lt,lv,mg,mi,mk,ml,mn,mr,ms,mt,my,ne,nl,no,ny,pa,pl,ps,pt,ro,ru,sd,si,sk,sl,sm,sn,so,sq,sr,st,su,sv,sw,ta,te,tg,th,tl,tr,uk,ur,uz,vi,xh,yi,yo,zh,zh_CN,zh_TW,zu".split(",")) try: if msg.reply_to_message and msg.reply_to_message.text: args = update.effective_message.text.split(None, 1) try: target = args[1].split(None, 1)[0] except: target = args[1] try: target2 = args[1].split(None, 2)[1] if target2 not in lang: target2 = None else: target = args[1].split(None, 2)[0] target2 = args[1].split(None, 2)[1] except: target2 = None text = msg.reply_to_message.text message = update.effective_message trl = Translator() if target2 == None: detection = trl.detect(text) tekstr = trl.translate(text, dest=target) if tekstr.pronunciation == None: return message.reply_text("Translated from `{}` to `{}`:\n`{}`".format(detection.lang, target, tekstr.text), parse_mode=ParseMode.MARKDOWN) else: return message.reply_text("Translated from `{}` to `{}`:\n*Characters:*\n`{}`\n*Text:*\n`{}`".format(detection.lang, target, tekstr.text, tekstr.pronunciation), parse_mode=ParseMode.MARKDOWN) else: tekstr = trl.translate(text, dest=target2, src=target) if tekstr.pronunciation == None: return message.reply_text("Translated from `{}` to `{}`:\n`{}`".format(target, target2, tekstr.text), parse_mode=ParseMode.MARKDOWN) else: return message.reply_text("Translated from `{}` to `{}`:\n*Characters:*\n`{}`\n*Text:*\n`{}`".format(target, target2, tekstr.text, tekstr.pronunciation), parse_mode=ParseMode.MARKDOWN) else: args = update.effective_message.text.split(None, 2) target = args[1] try: target2 = args[2].split(None, 1)[0] if target2 not in lang: target2 = None text = args[2] else: target2 = args[2].split(None, 1)[0] text = args[2].split(None, 1)[1] except: target2 = None text = args[2] message = update.effective_message trl = Translator() if target2 == None: detection = trl.detect(text) tekstr = trl.translate(text, dest=target) if tekstr.pronunciation == None: return message.reply_text("Translated from `{}` to `{}`:\n`{}`".format(detection.lang, target, tekstr.text), parse_mode=ParseMode.MARKDOWN) else: return message.reply_text("Translated from `{}` to `{}`:\n*Characters:*\n`{}`\n*Text:*\n`{}`".format(detection.lang, target, tekstr.text, tekstr.pronunciation), parse_mode=ParseMode.MARKDOWN) else: tekstr = trl.translate(text, dest=target2, src=target) if tekstr.pronunciation == None: return message.reply_text("Translated from `{}` to `{}`:\n`{}`".format(target, target2, tekstr.text), parse_mode=ParseMode.MARKDOWN) else: return message.reply_text("Translated from `{}` to `{}`:\n*Characters:*\n`{}`\n*Text:*\n`{}`".format(target, target2, tekstr.text, tekstr.pronunciation), parse_mode=ParseMode.MARKDOWN) """ try: if msg.reply_to_message and msg.reply_to_message.text: args = update.effective_message.text.split(None, 1) target2 = None try: target = args[1].split(None, 1)[0] except: target = args[1] if "-" in target: target2 = target.split("-")[1] target = target.split("-")[0] text = msg.reply_to_message.text #text = deEmojify(text) exclude_list = UNICODE_EMOJI.keys() for emoji in exclude_list: if emoji in text: text = text.replace(emoji, '') message = update.effective_message trl = Translator() if target2 == None: detection = trl.detect(text) tekstr = trl.translate(text, dest=target) if tekstr.pronunciation == None: return message.reply_text( "Translated from `{}` to `{}`:\n`{}`".format( detection.lang, target, tekstr.text), parse_mode=ParseMode.MARKDOWN) else: return message.reply_text( "Translated from `{}` to `{}`:\n`{}`".format( detection.lang, target, tekstr.pronunciation), parse_mode=ParseMode.MARKDOWN) else: tekstr = trl.translate(text, dest=target2, src=target) if tekstr.pronunciation == None: return message.reply_text( "Translated from `{}` to `{}`:\n`{}`".format( target, target2, tekstr.text), parse_mode=ParseMode.MARKDOWN) else: return message.reply_text( "Translated from `{}` to `{}`:\n`{}`".format( target, target2, tekstr.pronunciation), parse_mode=ParseMode.MARKDOWN) else: args = update.effective_message.text.split(None, 2) target = args[1] text = args[2] #text = deEmojify(text) exclude_list = UNICODE_EMOJI.keys() for emoji in exclude_list: if emoji in text: text = text.replace(emoji, '') target2 = None if "-" in target: target2 = target.split("-")[1] target = target.split("-")[0] message = update.effective_message trl = Translator() if target2 == None: detection = trl.detect(text) tekstr = trl.translate(text, dest=target) return message.reply_text( "Translated from `{}` to `{}`:\n`{}`".format( detection.lang, target, tekstr.text), parse_mode=ParseMode.MARKDOWN) #if tekstr.pronunciation == None: # return message.reply_text("Translated from `{}` to `{}`:\n`{}`".format(detection.lang, target, tekstr.text), parse_mode=ParseMode.MARKDOWN) #else: # return message.reply_text("Translated from `{}` to `{}`:\n`{}`".format(detection.lang, target, tekstr.pronunciation), parse_mode=ParseMode.MARKDOWN) else: tekstr = trl.translate(text, dest=target2, src=target) message.reply_text( "Translated from `{}` to `{}`:\n`{}`".format( target, target2, tekstr.text), parse_mode=ParseMode.MARKDOWN) #if tekstr.pronunciation == None: # return message.reply_text("Translated from `{}` to `{}`:\n`{}`".format(target, target2, tekstr.text), parse_mode=ParseMode.MARKDOWN) #else: # return message.reply_text("Translated from `{}` to `{}`:\n`{}`".format(target, target2, tekstr.pronunciation), parse_mode=ParseMode.MARKDOWN) except IndexError: update.effective_message.reply_text( "Reply to messages or write messages from other languages for translating into the intended language\n\nExample: `/tr en-ml` to translate from English to Malayalam\nOr use: `/tr ml` for automatic detection and translating it into Malayalam", parse_mode="markdown") except ValueError: update.effective_message.reply_text( "The intended language is not found!") else: return
def totranslate(bot: Bot, update: Update): msg = update.effective_message problem_lang_code = [] for key in LANGUAGES: if "-" in key: problem_lang_code.append(key) try: if msg.reply_to_message and msg.reply_to_message.text: args = update.effective_message.text.split(None, 1) text = msg.reply_to_message.text message = update.effective_message dest_lang = None try: source_lang = args[1].split(None, 1)[0] except: source_lang = "en" if source_lang.count('-') == 2: for lang in problem_lang_code: if lang in source_lang: if source_lang.startswith(lang): dest_lang = source_lang.rsplit("-", 1)[1] source_lang = source_lang.rsplit("-", 1)[0] else: dest_lang = source_lang.split("-", 1)[1] source_lang = source_lang.split("-", 1)[0] elif source_lang.count('-') == 1: for lang in problem_lang_code: if lang in source_lang: dest_lang = source_lang source_lang = None break if dest_lang == None: dest_lang = source_lang.split("-")[1] source_lang = source_lang.split("-")[0] else: dest_lang = source_lang source_lang = None exclude_list = UNICODE_EMOJI.keys() for emoji in exclude_list: if emoji in text: text = text.replace(emoji, '') trl = Translator() if source_lang == None: detection = trl.detect(text) tekstr = trl.translate(text, dest=dest_lang) return message.reply_text( "Translated from `{}` to `{}`:\n`{}`".format( detection.lang, dest_lang, tekstr.text), parse_mode=ParseMode.MARKDOWN) else: tekstr = trl.translate(text, dest=dest_lang, src=source_lang) message.reply_text( "Translated from `{}` to `{}`:\n`{}`".format( source_lang, dest_lang, tekstr.text), parse_mode=ParseMode.MARKDOWN) else: args = update.effective_message.text.split(None, 2) message = update.effective_message source_lang = args[1] text = args[2] exclude_list = UNICODE_EMOJI.keys() for emoji in exclude_list: if emoji in text: text = text.replace(emoji, '') dest_lang = None temp_source_lang = source_lang if temp_source_lang.count('-') == 2: for lang in problem_lang_code: if lang in temp_source_lang: if temp_source_lang.startswith(lang): dest_lang = temp_source_lang.rsplit("-", 1)[1] source_lang = temp_source_lang.rsplit("-", 1)[0] else: dest_lang = temp_source_lang.split("-", 1)[1] source_lang = temp_source_lang.split("-", 1)[0] elif temp_source_lang.count('-') == 1: for lang in problem_lang_code: if lang in temp_source_lang: dest_lang = None break else: dest_lang = temp_source_lang.split("-")[1] source_lang = temp_source_lang.split("-")[0] trl = Translator() if dest_lang == None: detection = trl.detect(text) tekstr = trl.translate(text, dest=source_lang) return message.reply_text( "Translated from `{}` to `{}`:\n`{}`".format( detection.lang, source_lang, tekstr.text), parse_mode=ParseMode.MARKDOWN) else: tekstr = trl.translate(text, dest=dest_lang, src=source_lang) message.reply_text( "Translated from `{}` to `{}`:\n`{}`".format( source_lang, dest_lang, tekstr.text), parse_mode=ParseMode.MARKDOWN) except IndexError: update.effective_message.reply_text( "Reply to messages or write messages from other languages for translating into the intended language\n\nExample: `/tr en ml` to translate from English to Malayalam\nOr use: `/tr ml` for automatic detection and translating it into Malayalam.\nSee [List of Language Codes](t.me/OnePunchSupport/12823) for a list of language codes.", parse_mode="markdown", disable_web_page_preview=True) except ValueError: update.effective_message.reply_text( "The intended language is not found!") else: return
Extracting abstract """ divs = art.findAll('div', class_= 'conteudo') for div in divs: pars = div.findAll('p') i = 1 for par in pars: if i == 5: abst = str(par) abst = abst.replace('<p>','') abst = abst.replace('</p>','') abst = abst.rstrip('\r\n') abst = abst.lstrip('\r\n') abstractlist.append(abst) # print(abst+'\n') langtit = translator.detect(titulo).lang if abst != "": lang = translator.detect(abst).lang else: lang = langtit if lang != langtit: lang = langtit langlist.append(lang) """ Translating title and abstract """ if lang != 'en': print("Translating paper "+str(k)+" title and abstract...") abstrans = translator.translate(abst) absen = abstrans.text tittrans = translator.translate(titulo, src='pt', dest='en')
class Setting(): def __init__(self): # Collect events until released self.mouseListener = mouse.Listener(on_click=self.onLongClick) self.keyboard = Controller() self._default_value = { 'author': 'Elliott Zheng', 'version': version, 'is_listen': False, 'is_copy': False, 'is_dete': False, 'stay_top': True, 'continus': False, 'is_main': True, 'pixel_size': 15, 'source': 'english', 'target': 'chinese (simplified)' } self.value = self._default_value self.filepath = os.path.expanduser('~/copytranslator.json') self.load() self.taskbar = TaskBarIcon(self) self.mainFrame = MainFrame(self) self.subFrame = SubFrame(self) self.mainFrame.Centre() # self.mainFrame.Show() self.valid = False self.translator = Translator(service_urls=['translate.google.cn']) self.src = '' self.last_append = '' self.result = '' self.patterns = [ re.compile(r'([?!.])[ ]?\n'), re.compile(r'([?!。])[ \n]') ] # 前面一个处理英语语系的,后面一个可以处理汉语系。 self.pattern2 = re.compile(r'\$([??!!.。])\$') self.initialize() def initialize(self): self.continus = self.continus self.stay_top = self.stay_top self.is_listen = self.is_listen self.is_dete = self.is_dete self.is_copy = self.is_copy self.is_main = self.is_main @property def source(self): return self.value['source'] @property def target(self): return self.value['target'] def save_config(self): self.value['source'] = self.mainFrame.tochoice.GetString( self.mainFrame.fromchoice.GetSelection()) self.value['target'] = self.mainFrame.tochoice.GetString( self.mainFrame.tochoice.GetSelection()) self.save_to(self.filepath) def get_normalized_append(self, src): src = src.replace('\r\n', '\n') src = src.replace('-\n', '') for pattern in self.patterns: src = pattern.sub(r'$\1$', src) src = src.replace('\n', ' ') src = self.pattern2.sub(r'\1\n', src) return src def get_normalized_src(self, append): if self.continus and self.src != '': return self.src + ' ' + append else: return append def paste(self, event): self.setSrc(self.last_append) def setSrc(self, append): self.src = self.get_normalized_src(append) self.mainFrame.srcText.SetValue(self.src) def setResult(self, string): self.result = "" + string.replace('\n', '\r\n') + '\r\n' self.mainFrame.destText.SetValue(self.result) self.subFrame.destText.SetValue(self.result) def getTgtLang(self): return LANGCODES[self.mainFrame.tochoice.GetString( self.mainFrame.tochoice.GetSelection())] def getSrcLang(self): return LANGCODES[self.mainFrame.fromchoice.GetString( self.mainFrame.fromchoice.GetSelection())] def getExpSrc(self): return self.mainFrame.srcText.GetValue() def getResult(self): return self.result def translate(self, event): src = self.translator.detect(self.src).lang if self.is_dete: self.mainFrame.fromchoice.SetSelection( self.mainFrame.fromchoice.FindString(LANGUAGES[src.lower()])) else: src = self.getSrcLang() dest = self.getTgtLang() if self.result != self.src: self.setResult( self.translator.translate(self.src, src=src, dest=dest).text) self.valid = True else: self.valid = False def translateCtrl(self, event): self.setSrc(self.getExpSrc()) self.translate(event) def check_valid(self): if self.result == pyperclip.paste(): return False append = self.get_normalized_append(pyperclip.paste()) if self.last_append != append: return True return False def translateCopy(self, event): if self.check_valid(): self.last_append = self.get_normalized_append(pyperclip.paste()) self.paste(event) self.translate(event) else: self.valid = False def Copy(self, event): pyperclip.copy(self.result) def OnTimer(self, event): self.translateCopy(event) if self.valid and self.is_copy: self.Copy(event) def ChangeMode(self, event): if event.Id == self.taskbar.ID_Main: self.is_main = True elif event.Id == self.taskbar.ID_Focus: self.is_main = False else: self.is_main = not self.is_main self.subFrame.Show(not self.is_main) self.mainFrame.Show(self.is_main) def SwitchMode(self, event): self.is_main = not self.is_main def OnTaskBarLeftDClick(self, event): if self.is_main: frame = self.mainFrame else: frame = self.subFrame if frame.IsIconized(): frame.Iconize(False) if not frame.IsShown(): frame.Show(True) frame.Raise() def BossKey(self, evt): if self.is_main: frame = self.mainFrame else: frame = self.subFrame frame.Iconize(not frame.IsIconized()) if not frame.IsIconized(): frame.Show(True) frame.Raise() def simulateCopy(self): with self.keyboard.pressed(Key.ctrl): self.keyboard.press('c') self.keyboard.release('c') def onLongClick(self, x, y, button, pressed): global t1, ori_x, ori_y if pressed: t1 = time.time() ori_x = x ori_y = y else: if time.time() - t1 > 0.3 and abs(ori_y - y) < 3 and abs(ori_x - x) < 3: self.simulateCopy() def load(self): if not os.path.exists(self.filepath): self.save_to(self.filepath) return self myfile = open(self.filepath, 'r') value = json.load(myfile) myfile.close() if value['version'] < self['version']: os.remove(self.filepath) self.save_to(self.filepath) return self self.value = value return self def save_to(self, filepath): myfile = open(filepath, 'w') json.dump(self.value, myfile, indent=4) myfile.close() def __getitem__(self, item): return self.value[item] def __setitem__(self, key, value): self.value[key] = value self.save_to(self.filepath) @property def is_listen(self): return self['is_listen'] @is_listen.setter def is_listen(self, value): self['is_listen'] = value self.mainFrame.listenCheck.SetValue(value) if value: self.mainFrame.timer.Start(3000) # 设定时间间隔为1000毫秒,并启动定时器 self.mouseListener.start() else: self.mainFrame.timer.Stop() def ReverseListen(self, event): self.is_listen = not self.is_listen @property def is_copy(self): return self['is_copy'] @is_copy.setter def is_copy(self, value): self['is_copy'] = value self.mainFrame.copyCheck.SetValue(self.is_copy) def ReverseCopy(self, event): self.is_copy = not self.is_copy @property def is_dete(self): return self['is_dete'] @is_dete.setter def is_dete(self, value): self['is_dete'] = value self.mainFrame.detectCheck.SetValue(value) if value: self.mainFrame.fromchoice.Disable() self.mainFrame.fromlabel.SetLabel("Detected language") else: self.mainFrame.fromchoice.Enable() self.mainFrame.fromlabel.SetLabel("Source language") def ReverseDete(self, event): self.is_dete = not self.is_dete @property def stay_top(self): return self['stay_top'] @stay_top.setter def stay_top(self, value): self['stay_top'] = value self.mainFrame.topCheck.SetValue(value) if value: self.subFrame.SetWindowStyle(wx.STAY_ON_TOP | SubFrame.subStyle) self.mainFrame.SetWindowStyle(wx.STAY_ON_TOP | MainFrame.mainStyle) else: self.subFrame.SetWindowStyle(SubFrame.subStyle) self.mainFrame.SetWindowStyle(MainFrame.mainStyle) def ReverseStayTop(self, event): self.stay_top = not self.stay_top @property def continus(self): return self['continus'] @continus.setter def continus(self, value): self['continus'] = value self.mainFrame.continusCheck.SetValue(value) def ReverseContinus(self, event): self.setSrc('') self.setResult('') self.last_append = '' self.continus = not self.continus @property def is_main(self): return self['is_main'] @is_main.setter def is_main(self, value): self['is_main'] = value self.subFrame.Show(not value) self.mainFrame.Show(value) @property def pixel_size(self): return self['pixel_size'] @pixel_size.setter def pixel_size(self, value): self['pixel_size'] = value
async def on_message(message): ####봇 dm 테스트코드 if message.content.startswith('whoami'): user_id = message.author.id user_name = message.author.name txt = '{} {}'.format(user_id, user_name) await app.send_message(message.channel, txt) if message.content.startswith('!제어'): user_id = message.author.id sentence = message.content.split(' ') word = ''.join(sentence[1:]) if user_id == '123456789': # bot_developer_id if word == 'pwd': n_dir = os.getcwd() await app.send_message(message.channel, n_dir) elif word == 'll': f = open('output.txt', 'w') output = subprocess.check_output(['ls -alh'], shell=True, encoding='utf-8') f.write(output) f.close() embed = discord.Embed(title='ls -alh', color=discord.Color.red()) with open('output.txt') as t: for i in t: embed.add_field(name='결과', value='{}\n'.format(i)) await app.send_message(message.channel, embed=embed) else: await app.send_message(message.channel, 'permission denied') if message.content.startswith('!기억'): m_sentence = message.content.split(' ') memories = ' '.join(m_sentence[1:]) u_id = message.author.id m_file = open('memory.txt', 'a', encoding='utf8') lines = u_id + ': ' + memories + '\n' m_file.write(lines) m_file.close() await app.send_message(message.channel, 'ㅇㅋ') if message.content.startswith('!망각'): u_id = message.author.id f = open('memory.txt', 'r') lines = f.readlines() f.close() f = open('memory.txt', 'w') for i in lines: if u_id not in i: f.write(i) f.close() await app.send_message(message.channel, '기억 삭제') if message.content.startswith('!회상'): u_id = message.author.id embed = discord.Embed(title='기억 목록', color=discord.Color.red()) count = 1 with open('memory.txt') as f: for i in f: stat = i.split(': ') s_ui = ''.join(stat[0]) s_tx = ' '.join(stat[1:]) if s_ui == u_id: embed.add_field(name=str(count) + '.', value='{}'.format(s_tx)) count += 1 await app.send_message(message.author, embed=embed) if message.content.startswith('!') and message.content.endswith('연차'): try: playgames = message.content[1:-2] if int(playgames) >= 1001: await app.send_message(message.channel, '도박문제 전화상담 서비스(국번 없이 ☎1336)') else: g_point = 0 player_name = message.author.name gotcha = np.random.choice(3, int(playgames), p=[0.01, 0.2, 0.79]) embed = discord.Embed(title='{}의 {}연차'.format( player_name, playgames), color=discord.Color.dark_blue()) for i in gotcha: if i == 1: g_point += 2 elif i == 2: g_point += 1 else: g_point += 3 embed.add_field( name='결과', value='1성:{}, 2성:{}, 3성:{}\n가챠포인트:{}'.format( Counter(gotcha)[2], Counter(gotcha)[1], Counter(gotcha)[0], g_point)) gotcha_per = int(Counter(gotcha)[0]) / int(playgames) * 100 if gotcha_per >= 2.0: await app.send_message(message.channel, embed=embed) await app.send_file(message.channel, fp='img_con/icon_96.png') else: await app.send_message(message.channel, embed=embed) gotcha_ran = [ 'img_con/icon_55.png', 'img_con/icon_22.png', 'img_con/icon_58.png' ] await app.send_file(message.channel, fp=random.choice(gotcha_ran)) except: await app.send_message(message.channel, 'command not found') if message.content.startswith('!이마트'): sentence = message.content.split(' ') mart = ' '.join(sentence[1:]) f = open('emart.txt', 'r') line = f.read().splitlines() for i in line: stat = i.split(' ') if mart in stat and len(stat) == 2: await app.send_message( message.channel, '점포명:{} 영업여부:{}'.format(stat[0], stat[-1])) elif mart in stat and len(stat) == 3: await app.send_message( message.channel, '점포명:{} 영업여부:{}'.format(stat[0] + stat[1], stat[-1])) # 네이버 뉴스 사회면 출력 if message.content.startswith('!사회'): embed = discord.Embed(title='사회면 뉴스 순위', color=discord.Color.red()) html = urllib.request.urlopen( 'https://news.naver.com/main/main.nhn?mode=LSD&mid=shm&sid1=102' ) news_url = 'https://news.naver.com' soup = BeautifulSoup(html, 'lxml') news1 = soup.find('div', {'id': 'ranking_102'}) news2 = news1.find('ul', 'section_list_ranking') news3 = news2.find_all('a', "nclicks(rig.ranksoc)") count = 1 for i in news3: re_title = i.text news_href = i.get('href') embed.add_field(name=str(count) + '위: ', value='[%s](<%s>)' % (re_title, news_url + news_href)) count += 1 await app.send_message(message.channel, embed=embed) if message.content.startswith('!요약'): sentence = message.content.split(' ') txt_url = ''.join(sentence[1]) news = Article(txt_url, language='ko') news.download() news.parse() embed = discord.Embed(title='url의 텍스트를 요약', color=discord.Color.dark_purple()) text_summ = summarize(news.text, word_count=50) embed.add_field(name='요약', value='[%s](<%s>)' % (text_summ, txt_url)) await app.send_message(message.channel, embed=embed) if message.content.startswith('!주사위'): number = message.content.split(' ') dice_num = int(number[1]) dice = [] for i in range(1, dice_num + 1): dice.append(random.randint(1, 6)) await app.send_message(message.channel, dice) if message.content.startswith('!다나와'): options = webdriver.ChromeOptions() options.add_argument('--headless') options.add_argument('--disable--gpu') options.add_argument('–no-sandbox') chromedriver_dir = r'chromedriver_ver/linux/chromedriver' driver = webdriver.Chrome(chromedriver_dir, chrome_options=options) sentence = message.content.split(' ') word = ' '.join(sentence[1:]) s_word = urllib.parse.quote(word) driver.get('http://search.danawa.com/dsearch.php?k1=' + s_word + '&module=goods&act=dispMain') time.sleep(3) source = driver.page_source soup = bs4.BeautifulSoup(source, 'lxml') stat = soup.find_all('p', 'prod_name') price_stat = soup.find_all('p', 'price_sect') driver.quit() embed = discord.Embed(title='다나와 ' + word + ' 검색결과', color=discord.Color.dark_purple()) count = 1 for i, k in zip(stat, price_stat): title = i.text.strip() price = k.find('a').text.strip() embed.add_field(name=str(count) + '.', value='{}\n{}'.format(title, price)) count += 1 if count == 7: break await app.send_message(message.channel, embed=embed) if message.content.startswith('!유튭'): sentence = message.content.split(' ') word = ' '.join(sentence[1:]) search_word = urllib.parse.quote(word) html = urllib.request.urlopen( 'https://www.youtube.com/results?search_query=' + search_word) soup = BeautifulSoup(html, 'lxml') tt = soup.find('ol', 'item-section') stat = tt.find_all('h3', 'yt-lockup-title') embed = discord.Embed(title='유튜브 검색결과', color=discord.Color.blue()) count = 1 for i in stat: url = 'https://www.youtube.com' tx = i.text tx = tx.split(' ')[:-3] ti = ' '.join(tx) link = i.find('a').get('href') embed.add_field(name=str(count) + '.', value='[%s](<%s>)' % (ti, url + link)) count += 1 if count == 6: break await app.send_message(message.channel, embed=embed) if message.content.startswith('!파파고'): sentence = message.content.split(' ') trans_text = ''.join(sentence[1:]) request_url = "https://openapi.naver.com/v1/papago/n2mt" headers = { "X-Naver-Client-Id": "123456789", "X-Naver-Client-Secret": "12345678" } # personal_token params = {"source": "ko", "target": "en", "text": trans_text} response = requests.post(request_url, headers=headers, data=params) result = response.json() await app.send_message( message.channel, result['message']['result']['translatedText']) if message.content.startswith('!번역'): sentence = message.content.split(' ') convert_sentence = ' '.join(sentence[1:]) translator = Translator() if translator.detect(convert_sentence).lang != 'ko': result = translator.translate(convert_sentence, dest='ko').text await app.send_message(message.channel, result) if translator.detect(convert_sentence).lang == 'ko': result = translator.translate(convert_sentence, dest='en').text await app.send_message(message.channel, result) if message.content.startswith('!날씨'): try: sentence = message.content.split(' ') area = ' '.join(sentence[1:]) location = urllib.parse.quote(area + '+날씨') html = urllib.request.urlopen( 'https://search.naver.com/search.naver?sm=top_hty&fbm=1&ie=utf8&query=' + location) soup = BeautifulSoup(html, 'lxml') area_loca = soup.find('div', 'select_box').find('em').text embed = discord.Embed(title=area_loca + '의 날씨정보', color=discord.Color.blue()) # ------오늘 날씨 정보------------ today_weather = soup.select( '#main_pack > div.sc.cs_weather._weather > div:nth-child(2) > div.weather_box > div.weather_area._mainArea > div.today_area._mainTabContent > div.main_info' )[0] today_dust_stat = soup.select( '#main_pack > div.sc.cs_weather._weather > div:nth-child(2) > div.weather_box > div.weather_area._mainArea > div.today_area._mainTabContent > div.sub_info > div > dl' )[0] today_temp = today_weather.find('span', 'todaytemp').text today_stat = today_weather.find('p', 'cast_txt').text skin_temp = today_weather.find('span', 'sensible').find('span', 'num').text # ------내일 날씨 정보------------ tomm_weather = soup.select( '#main_pack > div.sc.cs_weather._weather > div:nth-child(2) > div.weather_box > div.weather_area._mainArea > div:nth-child(4)' )[0] temp_am, temp_pm = tomm_weather.find_all('span', 'todaytemp') air_am, air_pm = tomm_weather.find_all('p', 'cast_txt') # ------언패킹 오류 발생 위치----- try: t_dust = today_dust_stat.find_all('dd') mise, c_mise, o_z = t_dust mise_am, mise_pm = tomm_weather.find_all( 'div', 'detail_box') except ValueError: embed.add_field(name='오늘', value='현재온도 : {}도, 체감온도 : {}도\n{}'.format( today_temp, skin_temp, today_stat)) embed.add_field( name='내일', value='오전온도 : {}도, {}\n오후온도 : {}도, {}'.format( temp_am.text, air_am.text, temp_pm.text.strip(), air_pm.text)) else: embed.add_field( name='오늘', value='현재온도 : {}도, 체감온도 : {}도\n{}\n미세먼지 : {}\n초미세먼지 : {}' .format(today_temp, skin_temp, today_stat, mise.text, c_mise.text)) embed.add_field( name='내일', value='오전온도 : {}도, {}\n{}\n오후온도 : {}도, {}\n{}'.format( temp_am.text, air_am.text, mise_am.text.strip(), temp_pm.text.strip(), air_pm.text, mise_pm.text.strip())) await app.send_message(message.channel, embed=embed) if float(skin_temp) >= 30.0 and float(skin_temp) < 35.0: await app.send_file(message.channel, fp='img_con/icon_49.png') elif float(skin_temp) >= 35.0: await app.send_file(message.channel, fp='img_con/icon_38.gif') except: await app.send_message(message.channel, 'command not found') if message.content.startswith("!주간날씨"): try: sentence = message.content.split(' ') area = sentence[1] location = urllib.parse.quote(area + '+날씨') html = urllib.request.urlopen( 'https://search.naver.com/search.naver?sm=top_hty&fbm=1&ie=utf8&query=' + location) soup = BeautifulSoup(html, 'lxml') title = soup.find('div', 'select_box').find('em') week = soup.find_all('li', 'date_info') embed = discord.Embed(title=title.text + '의 주간 날씨 정보', color=discord.Color.blue()) for i in week: day = i.find('span', 'day_info').text am = i.find('span', 'point_time morning').text.strip() pm = i.find('span', 'point_time afternoon').text.strip() temp = i.find('dd').text embed.add_field(name=day, value='오전:{}\n오후:{}\n{}'.format( am, pm, temp)) await app.send_message(message.author, embed=embed) except: await app.send_message(message.channel, 'command not found') if message.content.startswith('!세계날씨'): try: sentence = message.content.split(' ') out_area = ''.join(sentence[1:]) headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' } base_url = 'https://www.google.com/search?ei=2FIQXbn7OIuU8wXRtonYCA&q=' + out_area + '+날씨' html = requests.get(base_url, headers=headers).text soup = BeautifulSoup(html, 'lxml') stat = soup.find_all('div', 'vk_c card-section') for i in stat: location = i.find('div', 'vk_gy vk_h').text.strip() loca_time = i.find('div', 'vk_gy vk_sh').text.strip() air = i.find('span', {'id': 'wob_dc'}).text.strip() temp = i.find('span', {'id': 'wob_ttm'}).text.strip() air_s = i.find_all('div', 'vk_gy vk_sh wob-dtl') for k in air_s: rain = k.find('span', {'id': 'wob_pp'}).text.strip() wet = k.find('span', {'id': 'wob_hm'}).text.strip() wind = k.find('span', 'wob_t').text.strip() embed = discord.Embed(title=location + '의 날씨정보', color=discord.Color.blue()) embed.add_field( name=loca_time, value='현재온도: {}도 , {}\n강수확률: {}\n습도: {} 풍속: {}'.format( temp, air, rain, wet, wind)) await app.send_message(message.channel, embed=embed) if int(temp) >= 30 and int(temp) <= 34: await app.send_file(message.channel, fp='img_con/icon_49.png') elif int(temp) >= 35: await app.send_file(message.channel, fp='img_con/icon_38.gif') except: await app.send_message(message.channel, 'command not found') if message.content.startswith('!영화'): sentence = message.content.split(' ') word = sentence[1] if word == '예정': embed = discord.Embed(title='영화개봉예정', color=discord.Color.dark_orange()) html = urllib.request.urlopen( 'https://movie.naver.com/movie/running/premovie.nhn') soup = BeautifulSoup(html, 'lxml') name = soup.find_all('dl', 'lst_dsc') for i in name: c_name = i.find('a').text c_kind = i.find('span', 'link_txt').text c_kind = ''.join(c_kind.split()) embed.add_field(name='{}'.format(c_name), value='{}'.format(c_kind)) await app.send_message(message.channel, embed=embed) if word == '상영중': embed = discord.Embed(title='상영중인 영화', color=discord.Color.dark_orange()) html = urllib.request.urlopen( 'https://movie.naver.com/movie/running/current.nhn') soup = BeautifulSoup(html, 'lxml') pre_order = soup.find_all('div', 'star_t1 b_star') title = soup.find_all('dt', 'tit') count = 1 for i, k in zip(title, pre_order): order_per = k.text.strip() order_title = i.find('a').text embed.add_field(name=str(count) + '번쨰', value='{}\n예매율: {}'.format( order_title, order_per)) count += 1 if count == 6: break await app.send_message(message.channel, embed=embed) if message.content.startswith('!예매'): try: # str = '!예매 청주 목록' dt = datetime.datetime.now() today_time = dt.strftime('%Y%m%d') sentence = message.content.split(' ') user_loca = ''.join(sentence[1]) user_word = ''.join(sentence[2:]) data = {'title': [], 'link': []} df = pd.DataFrame(data) f = open('cgv_code.txt', 'r') embed = discord.Embed(title=user_loca, color=discord.Color.blue()) while True: line = f.readline() if not line: break re_line = line.split('//') data['title'].append(re_line[0][3:]) data['link'].append(re_line[1][8:] + today_time) df = pd.DataFrame(data) base_url = 'http://www.cgv.co.kr/common/showtimes/iframeTheater.aspx' cgv_url = 'http://www.cgv.co.kr' for q, w in zip(df['title'], df['link']): if user_loca == q: base_url = base_url + w headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' } html = requests.get(base_url, headers=headers).text soup = BeautifulSoup(html, 'lxml') stat = soup.find_all('div', 'col-times') cgv_data = {'movie': [], 'time': [], 'link': []} cgv_df = pd.DataFrame(cgv_data) for i in stat: title = i.find('div').find('a').text.strip() time_table = i.find_all('div', 'type-hall') for k in time_table: t_d = k.find('div', 'info-timetable').text.strip() try: link = k.find( 'div', 'info-timetable').find('a').get('href') except AttributeError: continue cgv_data['movie'].append(title) cgv_data['time'].append(t_d) cgv_data['link'].append(link) cgv_df = pd.DataFrame(cgv_data) if user_word == '목록': count = 1 re_df = cgv_df.drop_duplicates(['movie'], keep='first') for re_title, re_link in zip(re_df['movie'], re_df['link']): d_link = '[%s](<%s>)' % (re_title, cgv_url + re_link) embed.add_field(name=str(count) + '.', value='{}'.format(d_link)) count += 1 await app.send_message(message.channel, embed=embed) else: await app.send_message(message.channel, 'command not found') except: await app.send_message(message.channel, 'command not found') if message.content.startswith('!환전'): try: sentence = message.content.split(' ') word = ''.join(sentence[1:]) headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' } # h_word = urllib.parse.quote(word) url = 'https://www.google.co.kr/search?biw=531&bih=592&ei=YTQHXd7ZOJHm8wXhqrWQCA&q=' + word html = requests.get(url, headers=headers).text soup = BeautifulSoup(html, 'lxml') h_result = soup.find('div', 'dDoNo vk_bk gsrt') result = h_result.text.split(' ') await app.send_message(message.channel, result[0][:-3] + sentence[2]) except: await app.send_message(message.channel, 'command not found') if message.content.startswith('!계산'): sentence = message.content.split(' ') word = ''.join(sentence[1:]) n_word = urllib.parse.quote(word) headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' } url = 'https://www.google.com/search?q=' + n_word html = requests.get(url, headers=headers).text soup = BeautifulSoup(html, 'lxml') n_result = soup.find('span', 'cwcot gsrt').text.strip() await app.send_message(message.channel, n_result) if message.content.startswith('!환율'): try: sentence = message.content.split(' ') user_input = sentence[1] p_word = urllib.parse.quote(user_input) embed = discord.Embed(title='실시간 환율', color=discord.Color.blue()) headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' } url = 'https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=' + p_word + '+환율' html = requests.get(url, headers=headers).text soup = BeautifulSoup(html, 'lxml') stat = soup.find_all('div', 'rate_tlt') for i in stat: price = i.find('span', 'spt_con').text.strip().split(' ') embed.add_field(name=user_input + '의 환율 정보', value='{}\n{} {}'.format( price[0][2:], price[2], price[3])) await app.send_message(message.channel, embed=embed) except: await app.send_message(message.channel, 'command not found') if message.content.startswith('!증시'): sentence = message.content.split(' ') n_word = ''.join(sentence[1:]) h_url = 'https://www.wpws.kr/hangang/' headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' } h_html = requests.get(h_url, headers=headers).text h_soup = BeautifulSoup(h_html, 'lxml') w_stat = h_soup.find('p', {'id': 'temp'}).text url = 'https://finance.naver.com/sise/' base_url = 'https://finance.naver.com' context = ssl._create_unverified_context() html = urlopen(url, context=context) soup = BeautifulSoup(html.read(), 'lxml') if n_word == '해외': embed = discord.Embed(title='주요 해외 증시', color=discord.Color.dark_orange()) url = 'http://finance-service.daum.net/global/index.daum' headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' } html = requests.get(url, headers=headers).text soup = BeautifulSoup(html, 'lxml') stat = soup.select('#worldInfo')[0] i_title = stat.find_all('li') for i in i_title: aa = re.sub('<.+?>', ' ', str(i)).strip().split(' ') embed.add_field(name=aa[0], value='{} {} {}'.format( aa[1], aa[2], aa[3])) await app.send_message(message.channel, embed=embed) if n_word == '주요': embed = discord.Embed(title='{}\n{}: {}'.format( '주요 국내 증시', '현재 한강 수온', w_stat), color=discord.Color.dark_orange()) k_stat = soup.find('div', 'lft') kos_price = k_stat.find_all('span', 'num') kos_stat = k_stat.find_all('span', 'num_s') kos = ['코스피', '코스닥', '코스피200'] for a, b, c, in zip(kos_price, kos_stat, kos): n_p = a.text n_s = b.text n_n = c embed.add_field(name=n_n, value='{}\n{}'.format(n_p, n_s)) await app.send_message(message.channel, embed=embed) if n_word == '유가': embed = discord.Embed(title='국내외 유가', color=discord.Color.dark_orange()) url = 'https://finance.naver.com/marketindex/?tabSel=gold#tab_section' context = ssl._create_unverified_context() html = urlopen(url, context=context) soup = BeautifulSoup(html.read(), 'lxml') stat = soup.find('table', 'tbl_exchange').find_all('tr') for i in stat: try: oil_name = i.find('a').text price = i.find_all('td', 'num') n, y, p = price unit = i.find('td', 'unit').text y_stat = i.find('img').get('alt') except AttributeError: continue embed.add_field( name=oil_name, value='현재가: {}{}\n전일비: {} 등락율: {}\n{}'.format( n.text, unit, y.text, p.text, y_stat)) await app.send_message(message.channel, embed=embed) if n_word == '인기': embed = discord.Embed(title='인기 검색 종목', color=discord.Color.dark_orange()) stat = soup.find('ul', 'lst_pop').find_all('li') count = 1 for i in stat: n_title = i.find('a').text n_href = i.find('a').get('href') price = i.find('span').text link = base_url + n_href title = '[%s](<%s>)' % (n_title, link) embed.add_field(name=str(count) + '위', value='{}\n{}원'.format(title, price)) count += 1 await app.send_message(message.channel, embed=embed) if message.content.startswith('!해축'): embed = discord.Embed(title='해축 정보', color=discord.Color.dark_orange()) sentence = message.content.split(' ') word = ''.join(sentence[1:]) html = urllib.request.urlopen( 'https://sports.news.naver.com/wfootball/index.nhn') soup = BeautifulSoup(html, 'lxml') base_url = 'https://sports.news.naver.com' if word == '주요': s_count = 1 stat = soup.find('div', 'home_news').find_all('li') for i in stat: title = i.find('a').text.strip() link = i.find('a').get('href') i_s_n = '[%s](<%s>)' % (title, base_url + link) embed.add_field(name=str(s_count) + '.', value='{}'.format(i_s_n)) s_count += 1 await app.send_message(message.channel, embed=embed) else: await app.send_message(message.channel, 'command not found') if message.content.startswith('!남대문'): embed = discord.Embed(title='위스키 판매 목록', color=discord.Color.red()) sentence = message.content.split(' ') w_name = ''.join(sentence[1:]) df = pd.read_csv('new_namdeon_list.csv') for a, b, c, d, e, k, q in zip(df['title'], df['price'], df['year'], df['cask'], df['seller'], df['date'], df['ml']): try: if w_name in a: embed.add_field(name='{} {}({})\n{}원'.format( a, c, d, int(float(b))), value='{} {} {}'.format(e, q, k)) except: continue await app.send_message(message.channel, embed=embed) # w_dict= {} # for i in sheet1.iter_rows(min_row=3): # title = i[1].value # price = i[4].value # w_dict[title]=price if message.content.startswith('!스팀'): embed = discord.Embed(title='스팀 특별할인 목록', color=discord.Color.green()) headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36' } url = 'https://store.steampowered.com/search/?specials=1&os=win' html = requests.get(url, headers=headers).text soup = BeautifulSoup(html, 'lxml') stat = soup.find_all('div', 'responsive_search_name_combined') game_page = soup.find('div', {'id': 'search_results'}) game_stat = game_page.find('div', {'id': 'search_result_container'}) link = game_stat.find_all('a') count = 1 for i, k in zip(stat, link): try: title = i.find('div', 'col search_name ellipsis').text.strip() price = i.find( 'div', 'col search_price discounted responsive_secondrow' ).text.strip().split('$') per = i.find('div', 'col search_discount responsive_secondrow' ).text.strip() g_link = k.get('href') url = '[%s](<%s>)' % (title, g_link) except AttributeError: continue embed.add_field( name=str(count) + '.', value=url + '\n' '정가:{} , 할인가:{}\n할인률:{}'.format( '~~' + '$' + price[1] + '~~', '$' + price[2], per)) count += 1 await app.send_message(message.channel, embed=embed)
from googletrans import Translator text = input('Enter your text:- ') # Creating an instance of Translator to use # Google Translate ajax API translator = Translator() # detect- auto detects language of the input text dt = translator.detect(text) print(dt) # translate()-translates the text from source language to destination language # translate(self, text, dest='en', src='auto', **kwargs) # if we don't specify the dest(destination language) then # it translates to english translated = translator.translate(text) print(translated.text)
def translate(update, context): msg = update.effective_message getlang = langsql.get_lang(update.effective_message.from_user.id) try: if msg.reply_to_message and msg.reply_to_message.text: args = update.effective_message.text.split() if len(args) >= 2: target = args[1] if "-" in target: target2 = target.split("-")[1] target = target.split("-")[0] else: target2 = None else: if getlang: target = getlang target2 = None else: raise IndexError teks = msg.reply_to_message.text exclude_list = UNICODE_EMOJI.keys() for emoji in exclude_list: if emoji in teks: teks = teks.replace(emoji, '') trl = Translator() if target2 is None: deteksibahasa = trl.detect(teks) tekstr = trl.translate(teks, dest=target) send_message(update.effective_message, tl(update.effective_message, "Diterjemahkan dari `{}` ke `{}`:\n`{}`").format( deteksibahasa.lang, target, tekstr.text), parse_mode=ParseMode.MARKDOWN) else: tekstr = trl.translate(teks, dest=target2, src=target) send_message(update.effective_message, tl(update.effective_message, "Diterjemahkan dari `{}` ke `{}`:\n`{}`").format(target, target2, tekstr.text), parse_mode=ParseMode.MARKDOWN) else: args = update.effective_message.text.split(None, 2) if len(args) != 1: target = args[1] teks = args[2] target2 = None if "-" in target: target2 = target.split("-")[1] target = target.split("-")[0] else: target = getlang teks = args[1] exclude_list = UNICODE_EMOJI.keys() for emoji in exclude_list: if emoji in teks: teks = teks.replace(emoji, '') trl = Translator() if target2 is None: deteksibahasa = trl.detect(teks) tekstr = trl.translate(teks, dest=target) return send_message(update.effective_message, tl(update.effective_message, "Diterjemahkan dari `{}` ke `{}`:\n`{}`").format( deteksibahasa.lang, target, tekstr.text), parse_mode=ParseMode.MARKDOWN) else: tekstr = trl.translate(teks, dest=target2, src=target) send_message(update.effective_message, tl(update.effective_message, "Diterjemahkan dari `{}` ke `{}`:\n`{}`").format(target, target2, tekstr.text), parse_mode=ParseMode.MARKDOWN) except IndexError: send_message(update.effective_message, tl(update.effective_message, "Balas pesan atau tulis pesan dari bahasa lain untuk " "diterjemahkan kedalam bahasa yang di dituju\n\n" "Contoh: `/tr en-id` untuk menerjemahkan dari Bahasa inggris ke Bahasa Indonesia\n" "Atau gunakan: `/tr id` untuk deteksi otomatis dan menerjemahkannya kedalam bahasa indonesia"), parse_mode="markdown") except ValueError: send_message(update.effective_message, tl(update.effective_message, "Bahasa yang di tuju tidak ditemukan!")) else: return
if(filang == ''): filang = 'en' surl = input("Please input server url [default=translate.google.com]:") if(surl == ''): surl = 'translate.google.com' trans = Translator(service_urls=[surl]) infile = input("Please input input file [default=input.txt]:") if(infile == ''): infile = 'input.txt' fin = open(infile, 'r') outfile = input("Please input output file [default=output.txt]:") if(outfile == ''): outfile = 'output.txt' fout = open(outfile, 'w') intext = fin.read() pdl = trans.detect(intext).lang for i in range(1, n): dl = lang[random.randint(0, len(lang)-1)] while (dl == pdl): dl = lang[random.randint(0, len(lang)-1)] intext = trans.translate(intext, src=pdl, dest=dl).text eprint(i, 'from', pdl, 'to', dl) pdl = dl intext = trans.translate(intext, src=pdl, dest=filang).text eprint(n, 'from', pdl, 'to', filang) fout.write(intext)
print("_" * 40) print("Bi-gram") biData = biChat(zin[1]) if biData[0] == zin[0]: totalBi += biData[1] else: failBi += 1 print("\nTri-gram") triData = triChat(zin[1]) if triData[0] == zin[0]: totalTri += triData[1] else: failTri += 1 print("\nGoogle Translate") print(zin[1]) info = translator.detect(zin[1]) print("Taal: %s" % info.lang) print("Zekerheid: %s" % info.confidence) if zin[0] == "Nederlands": langCode = "nl" elif zin[0] == "Duits": langCode = "de" elif zin[0] == "Engels": langCode = "en" elif zin[0] == "Frans": langCode = "fr" elif zin[0] == "Zweeds": langCode = "sv" elif zin[0] == "Italiaans": langCode = "it" if info.lang == langCode:
) # specify source language translation = translator.translate("Wie gehts ?", src="de") print( f"{translation.origin} ({translation.src}) --> {translation.text} ({translation.dest})" ) # print all translations and other data pprint(translation.extra_data) # translate more than a phrase sentences = [ "Hello everyone", "How are you ?", "Do you speak english ?", "Good bye!" ] translations = translator.translate(sentences, dest="tr") for translation in translations: print( f"{translation.origin} ({translation.src}) --> {translation.text} ({translation.dest})" ) # detect a language detection = translator.detect("नमस्ते दुनिया") print("Language code:", detection.lang) print("Confidence:", detection.confidence) # print the detected language print("Language:", constants.LANGUAGES[detection.lang]) # print all available languages print("Total supported languages:", len(constants.LANGUAGES)) print("Languages:") pprint(constants.LANGUAGES)
class DialectWindow(Handy.ApplicationWindow): __gtype_name__ = 'DialectWindow' # Get widgets main_stack = Gtk.Template.Child() translator_box = Gtk.Template.Child() title_stack = Gtk.Template.Child() langs_button_box = Gtk.Template.Child() switch_btn = Gtk.Template.Child() src_lang_btn = Gtk.Template.Child() src_lang_label = Gtk.Template.Child() dest_lang_btn = Gtk.Template.Child() dest_lang_label = Gtk.Template.Child() return_btn = Gtk.Template.Child() forward_btn = Gtk.Template.Child() menu_btn = Gtk.Template.Child() char_counter = Gtk.Template.Child() src_text = Gtk.Template.Child() clear_btn = Gtk.Template.Child() paste_btn = Gtk.Template.Child() translate_btn = Gtk.Template.Child() dest_box = Gtk.Template.Child() dest_text = Gtk.Template.Child() trans_spinner = Gtk.Template.Child() trans_warning = Gtk.Template.Child() copy_btn = Gtk.Template.Child() voice_btn = Gtk.Template.Child() actionbar = Gtk.Template.Child() src_lang_btn2 = Gtk.Template.Child() switch_btn2 = Gtk.Template.Child() dest_lang_btn2 = Gtk.Template.Child() notification_revealer = Gtk.Template.Child() notification_label = Gtk.Template.Child() # Language values lang_codes = list(LANGUAGES.keys()) lang_names = list(LANGUAGES.values()) lang_speech = None # Current input Text current_input_text = '' current_history = 0 history = [] type_time = 0 trans_queue = [] active_thread = None # These are for being able to go backspace first_key = 0 second_key = 0 mobile_mode = False # Connectivity issues monitoring trans_failed = False voice_loading = False def __init__(self, **kwargs): super().__init__(**kwargs) # GSettings object self.settings = Gio.Settings.new(APP_ID) # Get saved languages self.src_langs = list(self.settings.get_value('src-langs')) self.dest_langs = list(self.settings.get_value('dest-langs')) # Google Translate object self.translator = Translator() # GStreamer playbin object and related setup self.player = Gst.ElementFactory.make('playbin', 'player') bus = self.player.get_bus() bus.add_signal_watch() bus.connect('message', self.on_gst_message) self.player_event = threading.Event( ) # An event for letting us know when Gst is done playing # Clipboard self.clipboard = Gtk.Clipboard.get( Gdk.SELECTION_CLIPBOARD) # This is only for the Clipboard button # Setup window self.setup() def setup(self): self.set_default_icon_name(APP_ID) # Load saved dark mode gtk_settings = Gtk.Settings.get_default() dark_mode = self.settings.get_boolean('dark-mode') gtk_settings.set_property('gtk-application-prefer-dark-theme', dark_mode) # Connect responsive design function self.connect('check-resize', self.responsive_listener) self.connect('destroy', self.on_destroy) self.setup_headerbar() self.setup_actionbar() self.setup_translation() self.toggle_mobile_mode() # Get languages available for speech threading.Thread(target=self.load_lang_speech, daemon=True).start() # Load saved src lang self.src_lang_selector.set_property('selected', 'auto') # Load saved dest lang self.dest_lang_selector.set_property('selected', self.dest_langs[0]) def on_listen_failed(self): self.voice_btn.set_image(self.voice_warning) self.voice_spinner.stop() self.voice_btn.set_tooltip_text( _('A network issue has occured. Retry?')) self.send_notification( _('A network issue has occured.\nPlease try again.')) dest_text = self.dest_buffer.get_text( self.dest_buffer.get_start_iter(), self.dest_buffer.get_end_iter(), True) if self.lang_speech: self.voice_btn.set_sensitive( self.dest_lang_selector.get_property('selected') in self.lang_speech and dest_text != '') else: self.voice_btn.set_sensitive(dest_text != '') def load_lang_speech(self, listen=False, text=None, language=None): """ Load the language list for gTTS. text and language parameters are only needed with listen parameter. """ try: self.voice_loading = True self.lang_speech = list(lang.tts_langs(tld='com').keys()) if not listen: GLib.idle_add(self.toggle_voice_spinner, False) elif language in self.lang_speech and text != '': self.voice_download(text, language) except RuntimeError as exc: GLib.idle_add(self.on_listen_failed) print('Error: ' + str(exc)) finally: if not listen: self.voice_loading = False def setup_headerbar(self): # Connect history buttons self.return_btn.connect('clicked', self.ui_return) self.forward_btn.connect('clicked', self.ui_forward) # Left lang selector self.src_lang_selector = DialectLangSelector() self.src_lang_selector.connect('notify::selected', self.on_src_lang_changed) # Set popover selector to button self.src_lang_btn.set_popover(self.src_lang_selector) self.src_lang_selector.set_relative_to(self.src_lang_btn) # Right lang selector self.dest_lang_selector = DialectLangSelector() self.dest_lang_selector.connect('notify::selected', self.on_dest_lang_changed) # Set popover selector to button self.dest_lang_btn.set_popover(self.dest_lang_selector) self.dest_lang_selector.set_relative_to(self.dest_lang_btn) # Add languages to both list for code, name in LANGUAGES.items(): self.src_lang_selector.insert(code, name.capitalize()) self.dest_lang_selector.insert(code, name.capitalize()) self.langs_button_box.set_homogeneous(False) # Switch button self.switch_btn.connect('clicked', self.ui_switch) # Add menu to menu button builder = Gtk.Builder.new_from_resource(f'{RES_PATH}/menu.ui') menu = builder.get_object('app-menu') menu_popover = Gtk.Popover.new_from_model(self.menu_btn, menu) self.menu_btn.set_popover(menu_popover) def setup_actionbar(self): # Set popovers to lang buttons self.src_lang_btn2.set_popover(self.src_lang_selector) self.dest_lang_btn2.set_popover(self.dest_lang_selector) # Switch button self.switch_btn2.connect('clicked', self.ui_switch) def setup_translation(self): # Left buffer self.src_buffer = self.src_text.get_buffer() self.src_buffer.set_text('') self.src_buffer.connect('changed', self.on_src_text_changed) self.src_buffer.connect('end-user-action', self.user_action_ended) self.connect('key-press-event', self.update_trans_button) # Clear button self.clear_btn.connect('clicked', self.ui_clear) # Paste button self.paste_btn.connect('clicked', self.ui_paste) # Translate button self.translate_btn.connect('clicked', self.translation) # Right buffer self.dest_buffer = self.dest_text.get_buffer() self.dest_buffer.set_text('') self.dest_buffer.connect('changed', self.on_dest_text_changed) # Clipboard button self.copy_btn.connect('clicked', self.ui_copy) # Translation progress spinner self.trans_spinner.hide() self.trans_warning.hide() # Voice button prep-work self.voice_warning = Gtk.Image.new_from_icon_name( 'dialog-warning-symbolic', Gtk.IconSize.BUTTON) self.voice_btn.connect('clicked', self.ui_voice) self.voice_image = Gtk.Image.new_from_icon_name( 'audio-speakers-symbolic', Gtk.IconSize.BUTTON) self.voice_spinner = Gtk.Spinner( ) # For use while audio is running or still loading. self.toggle_voice_spinner(True) def responsive_listener(self, _window): size = self.get_size() if size.width < 600: if self.mobile_mode is False: self.mobile_mode = True self.toggle_mobile_mode() else: if self.mobile_mode is True: self.mobile_mode = False self.toggle_mobile_mode() def toggle_mobile_mode(self): if self.mobile_mode: # Show actionbar self.actionbar.set_reveal_child(True) # Change headerbar title self.title_stack.set_visible_child_name('label') # Change translation box orientation self.translator_box.set_orientation(Gtk.Orientation.VERTICAL) # Change lang selectors position self.src_lang_selector.set_relative_to(self.src_lang_btn2) self.dest_lang_selector.set_relative_to(self.dest_lang_btn2) else: # Hide actionbar self.actionbar.set_reveal_child(False) # Reset headerbar title self.title_stack.set_visible_child_name('selector') # Reset translation box orientation self.translator_box.set_orientation(Gtk.Orientation.HORIZONTAL) # Reset lang selectors position self.src_lang_selector.set_relative_to(self.src_lang_btn) self.dest_lang_selector.set_relative_to(self.dest_lang_btn) def on_destroy(self, _window): self.settings.set_value('src-langs', GLib.Variant('as', self.src_langs)) self.settings.set_value('dest-langs', GLib.Variant('as', self.dest_langs)) def send_notification(self, text, timeout=5): """ Display an in-app notification. Args: text (str): The text or message of the notification. timeout (int, optional): The time before the notification disappears. Defaults to 5. """ self.notification_label.set_text(text) self.notification_revealer.set_reveal_child(True) timer = threading.Timer( timeout, GLib.idle_add, args=[self.notification_revealer.set_reveal_child, False]) timer.start() def toggle_voice_spinner(self, active=True): if active: self.voice_btn.set_sensitive(False) self.voice_btn.set_image(self.voice_spinner) self.voice_spinner.start() else: dest_text = self.dest_buffer.get_text( self.dest_buffer.get_start_iter(), self.dest_buffer.get_end_iter(), True) self.voice_btn.set_sensitive( self.dest_lang_selector.get_property('selected') in self.lang_speech and dest_text != '') self.voice_btn.set_image(self.voice_image) self.voice_spinner.stop() def on_src_lang_changed(self, _obj, _param): code = self.src_lang_selector.get_property('selected') dest_code = self.dest_lang_selector.get_property('selected') if code == dest_code: code = self.dest_langs[1] if code == self.src_langs[ 0] else dest_code self.dest_lang_selector.set_property('selected', self.src_langs[0]) if code in LANGUAGES: self.src_lang_label.set_label(LANGUAGES[code].capitalize()) # Updated saved left langs list if code in self.src_langs: # Bring lang to the top index = self.src_langs.index(code) self.src_langs.insert(0, self.src_langs.pop(index)) else: self.src_langs.pop() self.src_langs.insert(0, code) else: self.src_lang_label.set_label(_('Auto')) # Rewrite recent langs self.src_lang_selector.clear_recent() self.src_lang_selector.insert_recent('auto', _('Auto')) for code in self.src_langs: name = LANGUAGES[code].capitalize() self.src_lang_selector.insert_recent(code, name) # Refresh list self.src_lang_selector.refresh_selected() # Translate again self.translation(None) def on_dest_lang_changed(self, _obj, _param): code = self.dest_lang_selector.get_property('selected') src_code = self.src_lang_selector.get_property('selected') dest_text = self.dest_buffer.get_text( self.dest_buffer.get_start_iter(), self.dest_buffer.get_end_iter(), True) if code == src_code: code = src_code self.src_lang_selector.set_property('selected', self.dest_langs[0]) # Disable or enable listen function. if self.lang_speech: self.voice_btn.set_sensitive(code in self.lang_speech and dest_text != '') name = LANGUAGES[code].capitalize() self.dest_lang_label.set_label(name) # Updated saved right langs list if code in self.dest_langs: # Bring lang to the top index = self.dest_langs.index(code) self.dest_langs.insert(0, self.dest_langs.pop(index)) else: self.dest_langs.pop() self.dest_langs.insert(0, code) # Rewrite recent langs self.dest_lang_selector.clear_recent() for code in self.dest_langs: name = LANGUAGES[code].capitalize() self.dest_lang_selector.insert_recent(code, name) # Refresh list self.dest_lang_selector.refresh_selected() # Translate again self.translation(None) """ User interface functions """ def ui_return(self, _button): """Go back one step in history.""" if self.current_history != TRANS_NUMBER: self.current_history += 1 self.history_update() def ui_forward(self, _button): """Go forward one step in history.""" if self.current_history != 0: self.current_history -= 1 self.history_update() def add_history_entry(self, src_language, dest_language, src_text, dest_text): """Add a history entry to the history list.""" new_history_trans = { 'Languages': [src_language, dest_language], 'Text': [src_text, dest_text] } if self.current_history > 0: del self.history[:self.current_history] self.current_history = 0 if len(self.history) > 0: self.return_btn.set_sensitive(True) if len(self.history) == TRANS_NUMBER: self.history.pop() self.history.insert(0, new_history_trans) GLib.idle_add(self.reset_return_forward_btns) def switch_all(self, src_language, dest_language, src_text, dest_text): self.src_lang_selector.set_property('selected', dest_language) self.dest_lang_selector.set_property('selected', src_language) self.src_buffer.set_text(dest_text) self.dest_buffer.set_text(src_text) self.add_history_entry(src_language, dest_language, src_text, dest_text) # Re-enable widgets self.langs_button_box.set_sensitive(True) self.translate_btn.set_sensitive(self.src_buffer.get_char_count() != 0) def switch_auto_lang(self, dest_language, src_text, dest_text): src_language = str(self.translator.detect(src_text).lang) # Switch all GLib.idle_add(self.switch_all, src_language, dest_language, src_text, dest_text) def ui_switch(self, _button): # Get variables self.langs_button_box.set_sensitive(False) self.translate_btn.set_sensitive(False) src_language = self.src_lang_selector.get_property('selected') dest_language = self.dest_lang_selector.get_property('selected') src_text = self.src_buffer.get_text(self.src_buffer.get_start_iter(), self.src_buffer.get_end_iter(), True) dest_text = self.dest_buffer.get_text( self.dest_buffer.get_start_iter(), self.dest_buffer.get_end_iter(), True) if src_language == 'auto': if src_text == '': src_language = self.src_langs[0] else: threading.Thread(target=self.switch_auto_lang, args=(dest_language, src_text, dest_text), daemon=True).start() return # Switch all self.switch_all(src_language, dest_language, src_text, dest_text) def ui_clear(self, _button): self.src_buffer.set_text('') self.src_buffer.emit('end-user-action') def ui_copy(self, _button): dest_text = self.dest_buffer.get_text( self.dest_buffer.get_start_iter(), self.dest_buffer.get_end_iter(), True) self.clipboard.set_text(dest_text, -1) self.clipboard.store() def ui_paste(self, _button): text = self.clipboard.wait_for_text() if text is not None: end_iter = self.src_buffer.get_end_iter() self.src_buffer.insert(end_iter, text) def ui_voice(self, _button): dest_text = self.dest_buffer.get_text( self.dest_buffer.get_start_iter(), self.dest_buffer.get_end_iter(), True) dest_language = self.dest_lang_selector.get_property('selected') # Add here code that changes voice button behavior if dest_text != '': self.toggle_voice_spinner(True) if self.lang_speech: threading.Thread(target=self.voice_download, args=(dest_text, dest_language), daemon=True).start() else: threading.Thread(target=self.load_lang_speech, args=(True, dest_text, dest_language), daemon=True).start() def on_gst_message(self, _bus, message): if message.type == Gst.MessageType.EOS: self.player.set_state(Gst.State.NULL) self.player_event.set() elif message.type == Gst.MessageType.ERROR: self.player.set_state(Gst.State.NULL) self.player_event.set() print('Some error occured while trying to play.') def voice_download(self, text, language): try: self.voice_loading = True tts = gTTS(text, lang=language, lang_check=False) with NamedTemporaryFile() as file_to_play: tts.write_to_fp(file_to_play) file_to_play.seek(0) self.player.set_property('uri', 'file://' + file_to_play.name) self.player.set_state(Gst.State.PLAYING) self.player_event.wait() except Exception as exc: print(exc) print('Audio download failed.') GLib.idle_add(self.on_listen_failed) else: GLib.idle_add(self.toggle_voice_spinner, False) finally: self.voice_loading = False # This starts the translation if Ctrl+Enter button is pressed def update_trans_button(self, button, keyboard): modifiers = keyboard.get_state( ) & Gtk.accelerator_get_default_mod_mask() control_mask = Gdk.ModifierType.CONTROL_MASK shift_mask = Gdk.ModifierType.SHIFT_MASK unicode_key_val = Gdk.keyval_to_unicode(keyboard.keyval) if (GLib.unichar_isgraph(chr(unicode_key_val)) and modifiers in (shift_mask, 0) and not self.src_text.is_focus()): self.src_text.grab_focus() if not self.settings.get_boolean('live-translation'): if control_mask == modifiers: if keyboard.keyval == Gdk.KEY_Return: if not self.settings.get_value('translate-accel'): self.translation(button) return Gdk.EVENT_STOP return Gdk.EVENT_PROPAGATE elif keyboard.keyval == Gdk.KEY_Return: if self.settings.get_value('translate-accel'): self.translation(button) return Gdk.EVENT_STOP return Gdk.EVENT_PROPAGATE return Gdk.EVENT_PROPAGATE def on_src_text_changed(self, buffer): sensitive = buffer.get_char_count() != 0 self.translate_btn.set_sensitive(sensitive) self.clear_btn.set_sensitive(sensitive) def on_dest_text_changed(self, buffer): sensitive = buffer.get_char_count() != 0 self.copy_btn.set_sensitive(sensitive) if not self.voice_loading and self.lang_speech: self.voice_btn.set_sensitive( self.dest_lang_selector.get_property('selected') in self.lang_speech and sensitive) elif not self.voice_loading and not self.lang_speech: self.voice_btn.set_sensitive(sensitive) def user_action_ended(self, buffer): # If the text is over the highest number of characters allowed, it is truncated. # This is done for avoiding exceeding the limit imposed by Google. if buffer.get_char_count() >= MAX_LENGTH: self.send_notification(_('5000 characters limit reached!')) src_text = buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter(), True) self.src_buffer.set_text(src_text[:MAX_LENGTH]) self.char_counter.set_text( f'{str(buffer.get_char_count())}/{MAX_LENGTH}') if self.settings.get_boolean('live-translation'): self.translation(None) # The history part def reset_return_forward_btns(self): self.return_btn.set_sensitive( self.current_history < len(self.history) - 1) self.forward_btn.set_sensitive(self.current_history > 0) # Retrieve translation history def history_update(self): self.reset_return_forward_btns() lang_hist = self.history[self.current_history] self.src_lang_selector.set_property('selected', lang_hist['Languages'][0]) self.dest_lang_selector.set_property('selected', lang_hist['Languages'][1]) self.src_buffer.set_text(lang_hist['Text'][0]) self.dest_buffer.set_text(lang_hist['Text'][1]) # THE TRANSLATION AND SAVING TO HISTORY PART def appeared_before(self): src_language = self.src_lang_selector.get_property('selected') dest_language = self.dest_lang_selector.get_property('selected') src_text = self.src_buffer.get_text(self.src_buffer.get_start_iter(), self.src_buffer.get_end_iter(), True) if (self.history[self.current_history]['Languages'][0] == src_language and self.history[self.current_history]['Languages'][1] == dest_language and self.history[self.current_history]['Text'][0] == src_text and not self.trans_failed): return True return False def translation(self, _button): # If it's like the last translation then it's useless to continue if len(self.history) == 0 or not self.appeared_before(): src_text = self.src_buffer.get_text( self.src_buffer.get_start_iter(), self.src_buffer.get_end_iter(), True) src_language = self.src_lang_selector.get_property('selected') dest_language = self.dest_lang_selector.get_property('selected') if self.trans_queue: self.trans_queue.pop(0) self.trans_queue.append({ 'src_text': src_text, 'src_language': src_language, 'dest_language': dest_language }) # Check if there are any active threads. if self.active_thread is None: # Show feedback for start of translation. self.trans_spinner.show() self.trans_spinner.start() self.dest_box.set_sensitive(False) self.langs_button_box.set_sensitive(False) # If there is no active thread, create one and start it. self.active_thread = threading.Thread( target=self.run_translation, daemon=True) self.active_thread.start() def run_translation(self): def on_trans_failed(): self.trans_warning.show() self.send_notification( _('Translation failed.\nPlease check for network issues.')) self.copy_btn.set_sensitive(False) self.voice_btn.set_sensitive(False) def on_trans_success(): self.trans_warning.hide() def on_trans_done(): self.trans_spinner.stop() self.trans_spinner.hide() self.dest_box.set_sensitive(True) self.langs_button_box.set_sensitive(True) while self.trans_queue: # If the first language is revealed automatically, let's set it trans_dict = self.trans_queue.pop(0) src_text = trans_dict['src_text'] src_language = trans_dict['src_language'] dest_language = trans_dict['dest_language'] if src_language == 'auto' and src_text != '': try: src_language = str(self.translator.detect(src_text).lang) GLib.idle_add(self.src_lang_selector.set_property, 'selected', src_language) if not src_language in src_langs: self.src_langs[0] = src_language except Exception: self.trans_failed = True # If the two languages are the same, nothing is done if src_language != dest_language: dest_text = '' # THIS IS WHERE THE TRANSLATION HAPPENS. The try is necessary to circumvent a bug of the used API if src_text != '': try: dest_text = self.translator.translate( src_text, src=src_language, dest=dest_language).text self.trans_failed = False except Exception: self.trans_failed = True # Finally, everything is saved in history self.add_history_entry(src_language, dest_language, src_text, dest_text) else: self.trans_failed = False GLib.idle_add(self.dest_buffer.set_text, dest_text) if self.trans_failed: GLib.idle_add(on_trans_failed) else: GLib.idle_add(on_trans_success) GLib.idle_add(on_trans_done) self.active_thread = None
nn = 'l\'' + name nc = name + ',' n.append(nn) n.append(nc) teacher_names = teacher_names + n #teacher_names for elem in db.enquestes_professors.find({}, no_cursor_timeout=True): pdf_id = elem['pdf_id'] q1_answers = elem['q1_answers'] for comment in q1_answers: dict = {} dict["form_type"] = "enquestes_professors" dict["pdf_id"] = pdf_id dict["question_nr"] = 1 language = translator.detect(str(comment).replace('\0', '')).lang if comment == 'Cap.' or comment == 'Cap' or comment == 'cap' or comment == 'CAP': language = 'ca' if language == "haw" or language == "ptca": break if language == 'espt' or language == 'esca' or language == "gl": language = 'es' if language == 'nl' or language == 'fr': language = 'ca' dict["language"] = language ### REPLACE PROFESSOR NAMES WITH "PROFESSOR_NAME" c = comment.split() c_lower = [x.lower() for x in c] for name in teacher_names: if name in c_lower:
def detectlang(text): translator = Translator() detector = translator.detect(text) return detector.lang
def detect(input_text): translator = Translator() return translator.detect(input_text)