Подтвердить что ты не робот

Использование Python из Java

Возможный дубликат:
Интеграция Java Python

У меня есть большая существующая база кода, написанная на 100% Java, но я бы хотел использовать Python для некоторых новых разделов. Мне нужно сделать некоторую обработку текста и языка, и я бы скорее использовал Python и библиотеку, например NLTK, чтобы сделать это.

Я знаю проект Jython, но похоже, что это способ использовать Java и его библиотеки из Python, а не наоборот. Я ошибаюсь в этом?

Если нет, то какой будет лучший способ для взаимодействия между Java и Python, так что (в идеале) я могу вызвать метод в Python и вернуть результат на Java?

Спасибо.

4b9b3361

Ответ 1

Я знаю проект Jython, но похоже, это представляет собой способ использовать Java и его библиотеки изнутри Python, а не наоборот круглый - я не прав?

Да, вы ошибаетесь. Вы можете либо вызвать интерпретатор командной строки для запуска кода python с помощью Jyton или используйте код python из Java. В прошлом был также компилятор python-to-Java, но он был прекращен с помощью Jython 2.2

Ответ 2

Я бы написал модуль Python для обработки текста и языка, а затем построил небольшой мост в jython, с которым может взаимодействовать ваша Java-программа. Мост jython будет очень простым, который действительно отвечает только за пересылку вызовов в модуль python и возвращает ответ от модуля python в модуль java. Jython очень прост в использовании, и настройка не должна занимать вас более 15 минут.

Удачи!

Ответ 3

Я не думаю, что вы могли бы использовать NLTK из Jython, поскольку это зависит от Numpy, который не переносится на JVM. Если вам нужно NLTK или любое другое родное расширение CPython, вы можете рассмотреть возможность использования некоторого механизма IPC для связи между CPython и JVM. При этом существует проект, позволяющий вызывать CPython с Java, называемый Jepp:

http://jepp.sourceforge.net/

Обратный (вызов кода Java из CPython) является целью JPype и javaclass:

sourceforge.net/projects/jpype/

pypi.python.org/pypi/javaclass/0.1

Я никогда не использовал ни один из этих проектов, поэтому я не могу поклясться в их качестве.

Ответ 4

Jython - это реализация Python, запущенная на JVM. Вы можете найти информацию о встраивании Python в существующее приложение Java в руководство пользователя.

Я не знаю среду, в которой вы работаете, но помните, что смешивание языков в одном приложении может быстро привести к беспорядку. Я рекомендую создавать Java-интерфейсы для представления операций, которые вы планируете использовать, а также отдельно упакованных классов реализации, которые обертывают код Python.

Ответ 5

По моему мнению, Jython - это именно то, что вы смотрите.
Это реализация Python в JVM; Таким образом, вы можете свободно обменивать объекты и, например, наследовать от класса Java (с некоторыми ограничениями).

Обратите внимание, что его основная точка силы (находящаяся на вершине JVM) также является ее основным недостатком, поскольку она не может использовать все (C) расширение Python, написанное на C (или на любом другом скомпилированном языке); это может повлиять на то, что вы готовы сделать с обработкой текста.

Для получения дополнительной информации о том, что такое Jython, его потенциал и его ограничения, я предлагаю вам прочитать Jython FAQ.

Ответ 6

Просто запустите интерпретатор Python как подпроцесс из Java.

Напишите свою функциональность Python как правильную script, которая читает из stdin и записывает в stdout.

Используйте класс Java Runtime для создания подпроцесса, который запускает ваш Python script. Это очень просто сделать и обеспечивает очень чистый интерфейс.


Edit

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" )

Интерфейс прост, структурирован и очень невысокий.

Ответ 7

Не забудьте сначала проверить у тех, кто платит за разработку, что они в порядке с кодовой базой, требующей разработчика, который знает и Python и Java с этого момента, и другие эффекты затрат и ремонтопригодности, которые вы, несомненно, уже учли.

Смотрите: http://www.acm.org/about/se-code 1.06, 2.03, 2.09, 4.03, 4.05, 6.07