Список форумов Форум пользователей Свободного Офиса

Форум пользователей Свободного Офиса

Добро пожаловать на Форум!
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

English French German Italian Portuguese Russian Spanish
Google translator (Python) для Linux & Windows

 
Начать новую тему   Ответить на тему    Список форумов Форум пользователей Свободного Офиса -> Basic
Предыдущая тема :: Следующая тема  
Автор Сообщение
covar



Репутация: 0    

Зарегистрирован: 04.09.2011
Сообщения: 7

СообщениеДобавлено: Сб Сен 10, 2011 1:03 pm    Заголовок сообщения: Google translator (Python) для Linux & Windows Ответить с цитатой

Предыдущий переводчик Google http://libreoffice.3nx.ru/viewtopic.php?t=16 работает только на Windows и служит для иллюстрации использования ActiveX.

Google переводчик, пригодный для использования и на Windows и на Linux, легко пишется на языке Python.

Программа (скрипт) gt.py на Python, выполняющая перевод:
Код:
 # -*- coding: utf-8 -*-

import re, urllib

import json


class UrlOpener(urllib.FancyURLopener):

    version = "py-gtranslate/1.0"



base_uri = "http://ajax.googleapis.com/ajax/services/language/translate"



def translate(phrase):

    src="en"

    to="ru"

    data = urllib.urlencode({'v': '1.0', 'langpair': '%s|%s' % (src, to), 'q': phrase.encode('utf-8')})

    resp = json.load(UrlOpener().open('%s?%s' % (base_uri, data)))

    return resp['responseData']['translatedText']

размещается в папке, где обычно хранятся скрипты Python (в этой папке обычно уже лежит демонстрационный скрипт HelloWorld.py, поставляемый с дистрибутивом Office).
Например,
в Windows: C:\Program Files\LibreOffice 3.4\Basis\share\Scripts\python
в Linux: /opt/libreoffice/basis3.3/share/Script/python

Макрос для Calc, выполняющий этот скрипт:
Код:
Sub gt
oDoc=ThisComponent

oSheet=oDoc.CurrentController.getActiveSheet()

'Получаем текст для перевода из выбранной ячейки

oCell1 = oDoc.CurrentSelection

ncol=oCell1.CellAddress.Column
nrow=oCell1.cellAddress.Row

TextEN=oCell1.getString()

script="gt.py"
   
script = createUnoService("com.sun.star.script.provider.MasterScriptProviderFactory")._
   createScriptProvider("")._
    getScript("vnd.sun.star.script:" & script & "$translate?language=Python&location=share")
   
stret = script.invoke(array(TextEN), array(), array())
   
oCell=oSheet.getCellByposition(ncol+1,nrow)
oCell.setString(stret)
End Sub


PS. Выбор направления перевода из всех возможных специально исключен, чтобы излишне не усложнять пример. Ничего принципиально нового этот выбор не дает.

Файлы примера (gt.py и GT.ods): http://ifolder.ru/25670080


Вернуться к началу
Посмотреть профиль Отправить личное сообщение
clio



Репутация: 0    

Зарегистрирован: 15.11.2011
Сообщения: 1

СообщениеДобавлено: Вт Ноя 15, 2011 1:03 pm    Заголовок сообщения: Ответить с цитатой

Можно целиком сделать на Питоне. (Вот только Гугл, кажется, позволяет делать запросы не чаще чем примерно раз в несколько минут)

Код:
# -*- encoding: UTF-8 -*-
import uno, unohelper, re, urllib, json

from com.sun.star.awt import WindowDescriptor
from com.sun.star.awt.WindowClass import MODALTOP
from com.sun.star.awt.VclWindowPeerAttribute import OK, OK_CANCEL, YES_NO, YES_NO_CANCEL, RETRY_CANCEL, DEF_OK, DEF_CANCEL, DEF_RETRY, DEF_YES, DEF_NO

class UrlOpener(urllib.FancyURLopener):
   
   version = "py-gtranslate/1.0"

base_uri = "http://ajax.googleapis.com/ajax/services/language/translate"

def main(self):
   oDoc = XSCRIPTCONTEXT.getDocument()
   OS = oDoc.CurrentSelection
   CC = oDoc.CurrentController
   if OS.Count==1:
      OS0= OS.getByIndex(0)
      sOS0=OS0.String
      if sOS0 != "":
         src,to=lang(sOS0)
         sNewOS0 = translate(sOS0,src,to)
         if sNewOS0 != "":
            OS0.String = sNewOS0
         else:
            OS0.String = sOS0+" (google can't translate for now)"
   else:
      for i in range(1,OS.Count):
         OSi= OS.getByIndex(i)
         sOSi=OSi.String
         if sOSi != "":
            src,to=lang(sOSi)
            sNewOSi = translate(sOSi,src,to)
            if sNewOSi != "":
               OSi.String = sNewOSi
            else:
               OSi.String = sOSi+" (google can't translate for now)"
   #MessageBox(oDoc, u'Готово!')

def MessageBox(document, MsgText, MsgTitle=u'information'):
   ParentWin = document.getCurrentController().Frame.ContainerWindow
   descriptor = WindowDescriptor()
   descriptor.Type = MODALTOP
   descriptor.WindowServiceName ='infobox' #available MsgTypes('messbox', 'infobox', 'errorbox', 'warningbox', 'querybox')
   descriptor.ParentIndex = -1
   descriptor.Parent = ParentWin
   descriptor.WindowAttributes = OK
   tk = ParentWin.getToolkit()
   msgbox = tk.createWindow(descriptor)
   msgbox.setMessageText(MsgText)
   msgbox.setCaptionText(MsgTitle)
   return msgbox.execute()

def lang(string):
   strre=re.compile(u'[a-z]', re.IGNORECASE)
   m=strre.search(string)
   if m:
      return ('en','ru')
   else:
      return ('ru','en')

def translate(phrase,src='en',to='ru'):
   data = urllib.urlencode({'v': '1.0', 'langpair': '%s|%s' % (src, to), 'q': phrase.encode('utf-8')})
   resp = json.load(UrlOpener().open('%s?%s' % (base_uri, data)))
   try:
      return resp['responseData']['translatedText']
   except:
      return ""

g_exportedScripts = main,
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
covar



Репутация: 0    

Зарегистрирован: 04.09.2011
Сообщения: 7

СообщениеДобавлено: Вт Ноя 15, 2011 5:21 pm    Заголовок сообщения: Ответить с цитатой

С Google Translate всё довольно плохо. Google хочет денег, много денег.

http://code.google.com/intl/ru/apis/language/translate/v1/getting_started.html
Цитата:
Important: Google Translate API v1 was officially deprecated on May 26, 2011; it will be shut off completely on December 1, 2011. For text translations, you can use the Google Translate API v2, which is now available as a paid service. For website translations, we encourage you to use the Google Website Translator gadget.

http://code.google.com/intl/ru/apis/language/translate/overview.html
Цитата:
Important: Google Translate API v2 is now available as a paid service. The courtesy limit for existing Translate API v2 projects created prior to August 24, 2011 will be reduced to zero on December 1, 2011. In addition, the number of requests your application can make per day will be limited. Google Translate API v1 will be shut off completely on the same date (December 1, 2011); it was officially deprecated on May 26, 2011. These changes are being made due to the substantial economic burden caused by extensive abuse. For website translations, we encourage you to use the Google Website Translator gadget.


Смысл в том, что Google Translate API будет платным с 1 декабря 2011 г., а в данное время количество запросов сильно ограничено.

Пожалуй, следует переходить на Microsoft Translate, он пока бесплатен, но требует получения собственного AppId, впрочем, совершенно бесплатно.
Я то уже перешел на Microsoft Translate, изменения в коде минимальны (base_uri), изменить код вполне по силам любому, только получите свой AppId.
Описание Microsoft Translate:
http://msdn.microsoft.com/en-us/library/dd576287.aspx
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Форум пользователей Свободного Офиса -> Basic Часовой пояс: GMT
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Вы можете бесплатно создать форум на MyBB2.ru, RSS