Używanie Pythona z poziomu Javy [duplikat]

Możliwy Duplikat:
Java Python Integration

Mam dużą istniejącą bazę kodową napisaną w 100% w Javie, ale chciałbym użyć Pythona dla kilku nowych jego sekcji. Muszę trochę przetworzyć tekst i język, i wolałbym użyć Pythona i biblioteki jak NLTK , aby to zrobić.

Jestem świadomy projektu Jython, ale wygląda na to, że reprezentuje to sposób użycia Javy i jej bibliotek z poziomu Pythona, a nie na odwrót - czy mylę się co do tego?

Jeśli nie, jaka byłaby najlepsza metoda do łączenia się pomiędzy Javą i Pythonem, taka, że (najlepiej) mogę wywołać metodę w Pythonie i mieć wynik zwrócony do Javy?

Dziękuję.
Author: Community, 2009-07-22

7 answers

Wiem o projekcie Jython, ale wygląda na to, że stanowi to sposób na używaj Javy i jej bibliotek od wewnątrz Python, a nie w drugą stronę runda - czy mylę się co do tego?
Tak, mylisz się. Możesz albo wywołać interpreter wiersza poleceń, aby uruchomić kod Pythona za pomocą Jyton lub użyć kodu Pythona z Javy. W przeszłości istniał również kompilator python-to-Java, ale został wycofany z Jython 2.2
 33
Author: Michael Borgwardt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-07 11:42:08

Napisałbym moduł Pythona do obsługi przetwarzania tekstu i języka, a następnie zbudował mały most w jython, z którym twój program java może współdziałać. Most jython będzie bardzo prosty, który tak naprawdę odpowiada tylko za przekierowanie wywołań do modułu Pythona i zwrócenie odpowiedzi z modułu Pythona do modułu Javy. Jython jest naprawdę łatwy w użyciu, a konfiguracja nie powinna zająć więcej niż 15 minut.

Powodzenia!

 6
Author: Mia Clarke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-22 12:12:29

Nie sądzę, aby można było użyć NLTK z Jython, ponieważ zależy to od Numpy, która nie jest przeniesiona do JVM. Jeśli potrzebujesz NLTK lub innego natywnego rozszerzenia CPython, możesz rozważyć użycie jakiegoś mechanizmu IPC do komunikacji między CPython a JVM. Jest to projekt pozwalający na wywołanie Cpythona z Javy, o nazwie Jepp:

Http://jepp.sourceforge.net/

Odwrotne (wywołanie kodu Javy z CPython) jest celem JPype i javaclass:

Sourceforge.net/projects/jpype/

Pypi.python.org/pypi/javaclass/0.1

Nigdy nie korzystałem z żadnego z tych projektów, więc nie mogę ślubować ich jakości.

 4
Author: Carlos Santos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-22 15:21:17

Jython jest implementacją Pythona działającą na JVM. Informacje na temat osadzania Pythona w istniejącej aplikacji Java można znaleźć w user guide .

Nie znam środowiska, w którym pracujesz, ale pamiętaj, że mieszanie języków w tej samej aplikacji może szybko doprowadzić do bałaganu. Zalecam tworzenie interfejsów Java, które reprezentują operacje, które planujesz użyć, wraz z oddzielnie pakowanymi klasami implementacji, które zawijają Kod Pythona.

 2
Author: kdgregory,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-22 12:11:43

Moim zdaniem Jython jest dokładnie tym, na co patrzysz.
Jest to implementacja Pythona w JVM; jako taka można dowolnie wymieniać obiekty i, na przykład, dziedziczyć z klasy Javy (z pewnymi ograniczeniami).

Zauważ, że jego główna siła (bycie na szczycie JVM) jest również jego główną wadą, ponieważ nie może używać wszystkich (C)rozszerzeń Pythona napisanych w C (lub w jakimkolwiek innym skompilowanym języku); może to mieć wpływ na to, co chcesz zrobić z Twoje przetwarzanie tekstu.

Aby uzyskać więcej informacji o tym, czym jest Jython, jego potencjale i ograniczeniach, proponuję przeczytać Jython FAQ.

 2
Author: Roberto Liffredo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-22 12:29:52

Po prostu uruchom interpreter Pythona jako podproces z poziomu Javy.

Zapisz swoją funkcjonalność Pythona jako właściwy skrypt, który odczytuje ze standardowego wejścia i zapisuje na standardowe wyjście.

Użyj klasy Java Runtime, aby wywołać podproces uruchamiający skrypt Pythona. Jest to bardzo proste i zapewnia bardzo czysty interfejs.


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

Interfejs jest prosty, uporządkowany i bardzo niski narzut.

 0
Author: S.Lott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-22 12:24:26

Pamiętaj, aby najpierw sprawdzić od tych, którzy płacą za rozwój, że są w porządku z bazą kodową potrzebującą programisty, który zna zarówno Python i Java od teraz, i inne efekty kosztów i konserwacji, które niewątpliwie już uwzględniłeś.

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

 0
Author: Mikael Gueck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-22 17:45:24