Traducción automática utilizando babelize_shell () en NLTK

Hola, estoy aprendiendo el procesamiento del lenguaje natural usando NLTK. Estoy tratando de implementar babelize_shell () ejemplo del libro. Lo que estoy haciendo es ejecutar babelize_shell (), después de eso entro en mi cadena, seguido de alemán como se indica en el libro, seguido de ejecutar.

El error que estoy recibiendo es:

Traceback (most recent call last): File "", line 1, in  babelize_shell() File "C:\Python27\lib\site-packages\nltk\misc\babelfish.py", line 175, in babelize_shell for count, new_phrase in enumerate(babelize(phrase, 'english', language)): File "C:\Python27\lib\site-packages\nltk\misc\babelfish.py", line 126, in babelize phrase = translate(phrase, next, flip[next]) File "C:\Python27\lib\site-packages\nltk\misc\babelfish.py", line 106, in translate if not match: raise BabelfishChangedError("Can't recognize translated string.") BabelfishChangedError: Can't recognize translated string. 

Aquí hay una sesión de ejemplo:

 >>> babelize_shell() NLTK Babelizer: type 'help' for a list of commands. Babel> how long before the next flight to Alice Springs? Babel> german Babel> run 0> how long before the next flight to Alice Springs? 1> wie lang vor dem folgenden Flug zu Alice Springs? 2> how long before the following flight to Alice jump? 3> wie lang vor dem folgenden Flug zu Alice springen Sie? 4> how long before the following flight to Alice do you jump? 5> wie lang, bevor der folgende Flug zu Alice tun, Sie springen? 6> how long, before the following flight to Alice does, do you jump? 7> wie lang bevor der folgende Flug zu Alice tut, tun Sie springen? 8> how long before the following flight to Alice does, do you jump? 9> wie lang, bevor der folgende Flug zu Alice tut, tun Sie springen? 10> how long, before the following flight does to Alice, do do you jump? 11> wie lang bevor der folgende Flug zu Alice tut, Sie tun Sprung? 12> how long before the following flight does leap to Alice, does you? 

Estoy teniendo el mismo problema ahora mismo.

He encontrado esto: http://nltk.googlecode.com/svn/trunk/doc/api/nltk.misc.babelfish-module.html

y dice: BabelfishChangedError Se lanza cuando babelfish.yahoo.com cambia algunos detalles de su diseño HTML, y babelizer ya no envía los datos en la forma correcta, o ya no puede analizar los resultados.

Voy a ver si hay una manera de arreglar esto.

La solución que saqué ahora usa el servicio web Microsoft Translator (SOAP). No es una solución fácil, pero divertida de codificar.

Seguí las instrucciones en http://msdn.microsoft.com/en-us/library/hh454950 y luego modifiqué el babelfish.py que se encuentra en nltk / misc / babelfish.py

  1. Suscríbase a la API de Microsoft Translator en Azure Marketplace

Suscribirme a la API de Microsoft Translator en Azure Marketplace, elegí la suscripción gratuita.

  1. Registre su aplicación Azure DataMarket

Para registrar su aplicación en Azure DataMarket, visite datamarket.azure.com/developer/applications/ utilizando las credenciales de LiveID del paso 1 y haga clic en “Registrar”. Escriba su identificación de cliente y su secreto de cliente para su uso posterior

  1. Instale suds para Python fedorahosted.org/suds/

  2. Modifique el babelfish.py (use su propio cliend_id y secreto):

// importaciones para agregar

 from suds.client import Client import httplib import ast ... #added function def soaped_babelfish(TextToTranslate,codeLangFrom, codeLangTo): #Oauth credentials params = urllib.urlencode({'client_id': 'babelfish_soaped', 'client_secret': '1IkIG3j0ujiSMkTueCZ46iAY4fB1Nzr+rHBciHDCdxw=', 'scope': 'http://api.microsofttranslator.com', 'grant_type': 'client_credentials'}) headers = {"Content-type": "application/x-www-form-urlencoded"} conn = httplib.HTTPSConnection("datamarket.accesscontrol.windows.net") conn.request("POST", "/v2/OAuth2-13/", params, headers) response = conn.getresponse() #print response.status, response.reason data = response.read() #obtain access_token respondeDict = ast.literal_eval(data) access_token = respondeDict['access_token'] conn.close() #use the webservice with the accesstoken client = Client('http://api.microsofttranslator.com/V2/Soap.svc') result = client.service.Translate('Bearer'+' '+access_token,TextToTranslate,codeLangFrom, codeLangTo, 'text/plain','general') return result ... #modified translate method def translate(phrase, source, target): phrase = clean(phrase) try: source_code = __languages[source] target_code = __languages[target] except KeyError, lang: raise ValueError, "Language %s not available " % lang return clean(soaped_babelfish(phrase,source_code,target_code)) 

¡Y eso es todo para la versión SOAPed! Algún otro día probaré una solución basada solo en la web (similar a babelfish.py actual pero adaptada a los cambios)