Usando Python desde Java

Posible duplicado:
Integración Java Python

Tengo una gran base de código existente escrita en 100% Java, pero me gustaría usar Python para algunas secciones nuevas. Necesito hacer un procesamiento de texto e idioma, y ​​prefiero usar Python y una biblioteca como NLTK para hacer esto.

Soy consciente del proyecto Jython, pero parece que esto representa una forma de usar Java y sus bibliotecas desde Python, en lugar de al revés. ¿Me equivoco al respecto?

Si no, ¿cuál sería el mejor método para establecer una interfaz entre Java y Python, de manera que (idealmente) pueda llamar a un método en Python y que el resultado sea devuelto a Java?

Gracias.

Soy consciente del proyecto Jython, pero parece que esto representa una forma de usar Java y sus bibliotecas desde Python, en lugar de al revés. ¿Me equivoco al respecto?

Si, estas equivocado Puede llamar a un intérprete de línea de comandos para ejecutar el código de Python usando Jyton o usar el código de Python de Java . En el pasado también había un comstackdor de Python a Java, pero se suspendió con Jython 2.2

Escribiría un módulo de Python para manejar el texto y el procesamiento del idioma, y ​​luego construiría un pequeño puente en Jython con el que su progtwig Java pueda interactuar. El puente jython será muy simple, ya que solo es responsable de reenviar las llamadas al módulo python, y devolver la respuesta del módulo python al módulo java. Jython es realmente fácil de usar, y la configuración no debería llevarle más de 15 minutos.

¡La mejor de las suertes!

No creo que puedas usar NLTK de Jython, ya que depende de Numpy que no está adaptado a la JVM. Si necesita NLTK o cualquier otra extensión nativa de CPython, puede considerar usar algún mecanismo de IPC para comunicarse entre CPython y la JVM. Dicho esto, hay un proyecto para permitir llamar a CPython desde Java, llamado Jepp:

http://jepp.sourceforge.net/

El reverso (llamar código Java desde CPython) es el objective de JPype y javaclass:

sourceforge.net/projects/jpype/

pypi.python.org/pypi/javaclass/0.1

Nunca he usado ninguno de estos proyectos, así que no puedo prometer por su calidad.

Jython es una implementación de Python que se ejecuta en la JVM. Puede encontrar información sobre cómo incrustar Python en una aplicación Java existente en la guía del usuario .

No conozco el entorno en el que está trabajando, pero tenga en cuenta que mezclar idiomas en la misma aplicación puede provocar un desastre rápidamente. Recomiendo crear interfaces de Java para representar las operaciones que planea utilizar, junto con clases de implementación empaquetadas por separado que envuelven el código de Python.

En mi opinión, Jython es exactamente lo que estás viendo.
Es una implementación de Python dentro de la JVM; como tal, puede intercambiar libremente objetos y, por ejemplo, heredar de una clase Java (con algunas limitaciones).

Tenga en cuenta que su principal punto fuerte (estar en la parte superior de JVM) es también su principal inconveniente, ya que no puede usar todas las extensiones (C) de Python escritas en C (o en cualquier otro lenguaje comstackdo); Esto puede tener un impacto en lo que está dispuesto a hacer con su procesamiento de texto.

Para obtener más información sobre qué es Jython, su potencial y sus limitaciones, le sugiero que lea las Preguntas frecuentes sobre Jython .

Simplemente ejecute el intérprete de Python como un subproceso desde Java.

Escriba su funcionalidad de Python como un script adecuado, que se lee desde la entrada estándar y escribe en la salida estándar.

Use la clase Java Runtime para generar un subproceso que ejecute su script Python. Esto es muy simple de hacer y proporciona una interfaz muy limpia.


Editar

 import simplejson import sys for request in sys.stdin.readlines(): args = simplejson.loads( request ) result = myFunction( args['this'], args['that'] ) sys.stdout.writeline( simplejson.dumps( result ) + "\n" ) 

La interfaz es simple, estructurada y de muy baja sobrecarga.

Recuerde que los pagadores del desarrollo que están pagando primero están de acuerdo con el código base que necesita un desarrollador que conozca Python y Java a partir de ahora, y otros efectos de costo y mantenimiento que sin duda ya han tenido en cuenta.

Ver: http://www.acm.org/about/se-code 1.06, 2.03, 2.09, 4.03, 4.05, 6.07