Как стать автором
Обновить

Простой переводчик на Ruby

Время на прочтение1 мин
Количество просмотров1.2K
С помощью mechanize и hpricot написал класс очень полезного переводчика.

На даный момент доступно 3 сервера для перевода translate.meta.ua, translate.google.com и pereklad.online.ua

Пример кода:

def initialize(url=:meta)
Hpricot.buffer_size = 2621444

@agent = WWW::Mechanize.new
@url = url || :meta
@url = :meta unless BASE_URL.keys.include?(url)
@page = @agent.get BASE_URL[url]
end

def ru_to_ua(text)
translate(@url, :ru, :ua, text)
end

def translate(url, lang_from, lang_to, text)
self.send "translate_#{url.to_s}", text, @@default_options[url][lang_from.to_sym], @@default_options[url][lang_to.to_sym]
end

def translate_meta(text, lang_from, lang_to)
form = @page.form_with(:name => "form1")
form.field_with(:name => "SrcTxt").value = text
form.field_with(:name => "language").value = "{lang_from}-{lang_to}"
results = @agent.submit(form)
Hpricot(results.body).at('//textarea[@name="DstTxt"]').inner_text
end


Пример использования:

tr = Translate.new(:online)
tr.ru_to_en("пример") # => example
tr.en_to_ru("see") # => видеть
tr.ru_to_ua("пример") # => приклад


Мне эта штука очень пригодилась. Например, нужно было перевести колонку в файле xsl с украинского на русский (50 000 данных). Программа сделала это за 2-3 часа.

excel = WIN32OLE.new('excel.application')
excel.visible = true
excel.workbooks.open("шото.xlsx")
trans = Translate.new(:meta)
50000.times do |i|
if i>1
str = trans.ua_to_ru(excel.range('B' + i.to_s).value)
excel.range('C' + i.to_s).value = str
end
end


Если кому интересно, могу дать весь код :)
Теги:
Хабы:
Всего голосов 8: ↑5 и ↓3+2
Комментарии5

Публикации