Использование Python из Java [дубликат]
Возможные Дубликаты:
Интеграция Java Python
У меня есть большая существующая кодовая база, написанная на 100% Java, но я хотел бы использовать Python для некоторых новых разделов. Мне нужно сделать некоторую обработку текста и языка, и я бы предпочел использовать Python и библиотеку, такую как NLTK для этого.
Я знаю о проекте Jython, но похоже, что это представляет собой способ использовать Java и его библиотеки изнутри Python, а не наоборот - я ошибаюсь в этом?
если нет, то какой был бы лучший метод для взаимодействия между Java и Python, такой, что (в идеале) я могу вызвать метод в Python и вернуть результат на Java?
спасибо.
7 ответов:
Я знаю о проекте Jython, но похоже, это представляет собой способ использование языка Java и его библиотек изнутри Питон, а не наоборот круглый - я ошибаюсь?
Да, вы не ошибаетесь. Вы можете либо вызовите интерпретатор командной строки для запуска кода python с помощью Jyton или используйте код python из Java. В прошлом также был компилятор python-to-Java, но он был прекращен с Jython 2.2
Я бы написал модуль Python для обработки текста и обработки языка, а затем построил небольшой мост в jython, с которым может взаимодействовать ваша программа java. Мост jython будет очень простым, который действительно отвечает только за переадресацию вызовов в модуль python и возвращает ответ из модуля python в модуль java. Jython очень прост в использовании, и настройка не должна занимать у вас более 15 минут.
удачи!
Я не думаю, что вы могли бы использовать NLTK от Jython, так как это зависит от Numpy, который не портирован на JVM. Если вам нужен NLTK или любое другое собственное расширение CPython, вы можете рассмотреть возможность использования некоторого механизма IPC для связи между CPython и JVM. При этом существует проект, позволяющий вызывать CPython из Java, называемый Jepp:
обратное (вызов кода Java из CPython) является целью JPype и javaclass:
sourceforge.net/projects/jpype/
pypi.python.org/pypi/javaclass/0.1
Я никогда не использовал ни один из этих проектов, поэтому я не могу поклясться за их качество.
Jython-это реализация Python, работающая на JVM. Вы можете найти информацию о внедрении Python в существующее приложение Java в руководство пользователя.
Я не знаю среду, в которой вы работаете, но имейте в виду, что смешивание языков в одном приложении может быстро привести к беспорядку. Я рекомендую создавать интерфейсы Java для представления операций, которые вы планируете использовать, а также отдельно упакованные классы реализации, которые обертывают код Python.
по-моему, Jython-это именно то, на что вы смотрите.
Это реализация Python в JVM; таким образом, вы можете свободно обмениваться объектами и, например, наследовать от класса Java (с некоторыми ограничениями).обратите внимание, что его основная сила (находящаяся поверх JVM) также является его основным недостатком, потому что он не может использовать все (C)расширение Python, написанное на C (или на любом другом скомпилированном языке); это может повлиять на то, что вы готовы сделать с вашей обработки текста.
для получения дополнительной информации о том, что такое Jython, его потенциал и его ограничения, я предлагаю вам прочитать Jython FAQ.
просто запустите интерпретатор Python как подпроцесс из Java.
напишите свою функциональность Python как правильный скрипт, который читает из stdin и записывает в stdout.
используйте Java
Runtimeкласс для создания подпроцесса, который запускает ваш скрипт Python. Это очень простой и очень понятный интерфейс.
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" )интерфейс прост, структурирован и очень низкие накладные расходы.
Не забудьте сначала проверить у тех, кто платит за разработку, что они в порядке с кодовой базой, нуждающейся в разработчике, который теперь знает как Python, так и Java, и другие эффекты стоимости и ремонтопригодности, которые вы, несомненно, уже учитывали.
посмотреть: http://www.acm.org/about/se-code 1.06, 2.03, 2.09, 4.03, 4.05, 6.07
Comments