Comments 38
UFO just landed and posted this here
о-ё-ёй, спасибо, вот так ошибка, просмотрел (:
PEP 8 (Style Guide for Python Code):
Indentation
Use 4 spaces per indentation level.
For really old code that you don't want to mess up, you can continue to
use 8-space tabs.
Maximum Line Length
Limit all lines to a maximum of 79 characters.
Indentation
Use 4 spaces per indentation level.
For really old code that you don't want to mess up, you can continue to
use 8-space tabs.
Maximum Line Length
Limit all lines to a maximum of 79 characters.
«Канонические» способы проверить тип в питоне:
Причём второй метод проверит принадлежность объекта не только к самому классу, но и к inherited классам.
type(x) is str
isinstance(x, str)
Причём второй метод проверит принадлежность объекта не только к самому классу, но и к inherited классам.
UFO just landed and posted this here
А-а-а, что я наделал, сказав автору топика про type()… Стало хуже.
UFO just landed and posted this here
isinstance(str, basestring);
UFO just landed and posted this here
Наверное просто shift не нажал. Кстати basestring fixed (:
Ну простите пожалуйста, очень важно не поставить точку с запятой в комментарии :)
В коде на пистоне я не ставлю, но сегодня я писал на javascript, мозг не переключился.
В коде на пистоне я не ставлю, но сегодня я писал на javascript, мозг не переключился.
для разминки предлагаю убрать ";" в следующем коде:
python -c «import os; print 'Current working dir is %s' % os.getcwd()»
python -c «import os; print 'Current working dir is %s' % os.getcwd()»
UFO just landed and posted this here
Why So Serious?
Я конечно же не писал, что это невозможно, или сложно, я всего навсего клоню к тому, что фраза
>> точно мог сказать, что в питоне ";" появляется только в очень кривом коде
в некотором роде перегиб. Дети читают и повторяют такое бездумно. Ваш пример прекрасен, но я бы не стал использовать его, скажем, в инициализирующих систему shell-скриптах.
И я сдаюсь, представить даже не могу чем мой милый on-liner отличается от полноценного кода
Я конечно же не писал, что это невозможно, или сложно, я всего навсего клоню к тому, что фраза
>> точно мог сказать, что в питоне ";" появляется только в очень кривом коде
в некотором роде перегиб. Дети читают и повторяют такое бездумно. Ваш пример прекрасен, но я бы не стал использовать его, скажем, в инициализирующих систему shell-скриптах.
И я сдаюсь, представить даже не могу чем мой милый on-liner отличается от полноценного кода
UFO just landed and posted this here
Прекрасно информативный топик и максимально документированный код. Браво.
Вы наверное красьненьким забыли покрасить.
Топик минусанул. И вот почему.
Информативность топика стремится к нулю, к тому же приведенный код является примером того, как не надо писать на питоне. Особенно если ориентирован на новичков.
Несоблюдение PEP8.
Использование исключений в таком виде:
И в if засунули большой блок кода, хотя можно было поступить более красиво. Вывести справку и выйти.
Топик минусанул. И вот почему.
Информативность топика стремится к нулю, к тому же приведенный код является примером того, как не надо писать на питоне. Особенно если ориентирован на новичков.
Несоблюдение PEP8.
Использование исключений в таком виде:
try: except Exception: pass
И в if засунули большой блок кода, хотя можно было поступить более красиво. Вывести справку и выйти.
# translate «hi» en ru
Я бы сделал как минимум два алиаса en2ru и ru2en, чем избавился бы от лишних ключей и от кавычек одновременно
Я бы сделал как минимум два алиаса en2ru и ru2en, чем избавился бы от лишних ключей и от кавычек одновременно
Так выглядит чуть лучше, ИМХО:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import re
import urllib
import urllib2
import json
url = "http://translate.google.com/translate_a/t?client=t&text={0}&hl=en&sl={1}&tl={2}&multires=1"
def printParams(data):
for x in data:
print(u"\t{0}".format(x))
def tr(text, sourcelang, targetlang):
"""
Translates given string(text) from sourcelang to targetlang
using Google Translate
"""
request = urllib2.Request(url.format(text, sourcelang, targetlang),
headers={ 'User-Agent': 'Mozilla/5.0', 'Accept-Charset': 'utf-8' })
response = urllib2.urlopen(request).read()
fixedJSON = re.sub(r',{2,}', ',', response).replace(',]', ']')
data = json.loads(fixedJSON)
result = {}
result["definition"] = data[0][0]
for row in data[1]:
try:
result[row[0]] = row[1]
except:
pass
return result
def main():
"""
Usage:
first arg - string to translate
second arg - source lang
third arg - target lang
"""
if len(sys.argv) == 4:
text = urllib.quote(sys.argv[1])
sl = sys.argv[2]
tl = sys.argv[3]
r = tr(text, sl, tl)
print(u"{0} / {1} / {2}".format(r["definition"][0],
r["definition"][1],
r["definition"][2] or r["definition"][3]))
del r["definition"]
for key, val in r.iteritems():
print(key)
printParams(val)
else:
print(main.__doc__)
if __name__ == '__main__':
main()
Чем улучшить…
1) использовать вместоurllib.quote urllib.urlencode() для генерации GET параметров из словаря (нагляднее, надежнее и, пожалуй, удобнее)
2) использовать официальный REST API code.google.com/intl/ru-RU/apis/language/translate/overview.html (хотя не понял есть ли там вывод альтернатив)
1) использовать вместо
2) использовать официальный REST API code.google.com/intl/ru-RU/apis/language/translate/overview.html (хотя не понял есть ли там вывод альтернатив)
И еще придумал — можно сделать прием текста из stdin, чтоб можно было вызывать как
./translate ru en — < ru_text.txt
или
cat ru_text.txt | ./translate ru en -
./translate ru en — < ru_text.txt
или
cat ru_text.txt | ./translate ru en -
Немного подправил под себя, может изменения будут интересны.
@@ -11,0 +12,5 @@
+# Set utf-8 for some stupid terminals
+import codecs
+if sys.stdout.encoding == None:
+ sys.stdout = codecs.getwriter('utf8')(sys.stdout)
+
@@ -16 +21 @@
- print "\t " + val
+ print " " + val
@@ -35,4 +40,5 @@
- if len(sys.argv) == 4:
- list_of_params.update({'text' : sys.argv[1],
- 'sl' : sys.argv[2],
- 'tl' : sys.argv[3] })
# You can run "gtrans en ru hello world" now
+ if len(sys.argv) >= 4:
+ list_of_params.update({'text' : " ".join(sys.argv[3:]),
+ 'sl' : sys.argv[1],
+ 'tl' : sys.argv[2] })
восклицательный знак в исходном тексте режет весь дальнейший текст.
translate «hi! bifidokk»
привет! / hi! / privet!
translate «hi bifidokk»
привет bifidokk / hi bifidokk / privet bifidokk
translate «hi! bifidokk»
привет! / hi! / privet!
translate «hi bifidokk»
привет bifidokk / hi bifidokk / privet bifidokk
Потому что надо писать в одинарных кавычках :) '
python translate.py 'hi! bifidokk goooooooogle' en ru
аналогично, попробуйте сами
аналогично, попробуйте сами
Ответ парсится неверно просто. Гугл отдает переводы по отдельным приложениям, а тут анализируется только первое. Если делать клиент для текстов с произвольным числом предложений, надо конечно же скорректировать алгоритм. Вот например для node.js вариант из моей либы:
response.on('end', function () { data = data.replace(/,+/g, ',').replace(/,\]/g,']'); var obj = JSON.parse(data); callback(obj[0].map(function (sentence) { return sentence[0]; }).join('')); });
Немного не в тему, но вот другой интересный вариант использования google translate в Linux консоли (увидел, кажется, на welinux.ru):
mplayer "http://translate.google.com/translate_tts?tl=en&q=hello+world"
Sign up to leave a comment.
google translate script