Java lub Python do przetwarzania języka naturalnego [zamknięte]

112

Chciałbym wiedzieć, który język programowania jest lepszy do przetwarzania języka naturalnego. Java czy Python ? Znalazłem wiele pytań i odpowiedzi na ten temat. Ale wciąż jestem zagubiony w wyborze, którego użyć.

Chcę wiedzieć, której biblioteki NLP użyć w Javie, ponieważ istnieje wiele bibliotek (LingPipe, GATE, OpenNLP, StandfordNLP). W przypadku Pythona większość programistów zaleca NLTK.

Ale jeśli mam zająć się przetwarzaniem tekstu lub wyodrębnianiem informacji z nieustrukturyzowanych danych (po prostu swobodnie sformatowany zwykły tekst angielski), aby uzyskać przydatne informacje, jaka jest najlepsza opcja? Java czy Python? Odpowiednia biblioteka?

Zaktualizowano

Chcę tylko wydobyć użyteczne informacje o produkcie z nieustrukturyzowanych danych (np. Użytkownicy tworzą różne formy reklamy telefonów komórkowych lub laptopów z niezbyt standardowym językiem angielskim)

Jin Ling
źródło
47
Nienawidzę, że tego typu pytania nie są mile widziane w SO. Myślę, że intencją było zapobieganie świętym wojnom, ale to przyczynia się do treści IMO.
L0j1k
2
Gdyby sformułowanie brzmiało „Jakie są wiodące biblioteki NLP Java i Python i ich względne mocne strony?” może to rozwiązuje problem? Odpowiedź zmienia się w czasie, ale takie pytania są dla mnie bardzo przydatne.
Scott Smith
5
Chciałbym również, żeby tego rodzaju pytania były mile widziane na SO. Niedawno próbowałem zbadać mocne strony NLP w Python kontra R i natychmiast został zerwany. Nie dla tych, którzy próbują oprawić swoje projekty we właściwym języku.
Ksofiac

Odpowiedzi:

133

Java vs Python dla NLP jest w dużej mierze preferencją lub koniecznością. W zależności od firmy / projektów będziesz musiał użyć jednego lub drugiego i często nie ma dużego wyboru, chyba że kierujesz projektem.

Poza NLTK(www.nltk.org) istnieją inne biblioteki do przetwarzania tekstu w python:

(aby uzyskać więcej informacji, zobacz https://pypi.python.org/pypi?%3Aaction=search&term=natural+language+processing&submit=search )

Bo Javajest mnóstwo innych, ale oto kolejna lista:

To ładne porównanie do podstawowego przetwarzania ciągów, patrz http://nltk.googlecode.com/svn/trunk/doc/howto/nlp-python.html

Przydatne porównanie GATE, UIMA i OpenNLP, zobacz https://www.assembla.com/spaces/extraction-of-cost-data/wiki/Gate-vs-UIMA-vs-OpenNLP?version=4

Jeśli nie masz pewności, który język wybrać dla NLP, osobiście powiem: „jakikolwiek język, który da ci pożądaną analizę / wyjście”, zobacz, jakiego języka lub narzędzi należy się nauczyć do przetwarzania języka naturalnego?

Oto całkiem niedawne (2017) narzędzia NLP: https://github.com/alvations/awesome-community-curated-nlp

Starsza lista narzędzi NLP (2013): http://web.archive.org/web/20130703190201/http://yauhenklimovich.wordpress.com/2013/05/20/tools-nlp


Poza narzędziami do przetwarzania języka bardzo potrzebowałbyś machine learningnarzędzi do włączenia do NLPpotoków.

Jest cała gama w Pythoni Java, i po raz kolejny to zależy od preferencji i czy biblioteki są wystarczająco przyjazne dla użytkownika:

Biblioteki Machine Learning w Pythonie:

(aby uzyskać więcej informacji, zobacz https://pypi.python.org/pypi?%3Aaction=search&term=machine+learning&submit=search )


W związku z niedawnym (2015) tsunami głębokiego uczenia się w NLP , być może warto rozważyć: https://en.wikipedia.org/wiki/Comparison_of_deep_learning_software

Uniknę wymieniania narzędzi do głębokiego uczenia się z powodu braku faworyzowania / neutralności.


Inne pytania dotyczące Stackoverflow, które dotyczyły również narzędzi NLP / ML:

alvas
źródło
1
Dziękuję za udzielenie wielu informacji o narzędziach NLP i ML
Jin Ling,
42

Pytanie jest bardzo otwarte. To powiedziawszy, zamiast wybierać jedno, poniżej znajduje się porównanie w zależności od języka, którego chcesz używać (ponieważ istnieją dobre biblioteki dostępne w obu językach).

Pyton

Jeśli chodzi o Python, pierwsze miejsce, na które należy zwrócić uwagę, to Python Natural Language Toolkit . Jak zauważają w swoim opisie, NLTK jest wiodącą platformą do tworzenia programów w Pythonie do pracy z danymi języka ludzkiego. Zapewnia łatwe w użyciu interfejsy do ponad 50 korpusów i zasobów leksykalnych, takich jak WordNet, wraz z zestawem bibliotek przetwarzania tekstu do klasyfikacji, tokenizacji, wyprowadzania, znakowania, analizowania i rozumowania semantycznego.

Istnieje również doskonały kod, który można znaleźć, a który pochodzi z projektu Google Natural Language Toolkit opartego na Pythonie. Możesz znaleźć link do tego kodu tutaj na GitHub .

Jawa

Pierwszym miejscem, na które warto zwrócić uwagę, byłaby Grupa Przetwarzania Języka Naturalnego Stanforda . Całe rozpowszechniane tam oprogramowanie jest napisane w języku Java. Wszystkie najnowsze dystrybucje wymagają Oracle Java 6+ lub OpenJDK 7+. Pakiety dystrybucyjne zawierają komponenty do wywoływania z wiersza poleceń, pliki jar, interfejs API języka Java i kod źródłowy.

Inną świetną opcją, którą widzisz tutaj w wielu środowiskach uczenia maszynowego (opcja ogólna), jest Weka . Weka to zbiór algorytmów uczenia maszynowego do zadań eksploracji danych. Algorytmy można zastosować bezpośrednio do zbioru danych lub wywołać z własnego kodu Java. Weka zawiera narzędzia do wstępnego przetwarzania danych, klasyfikacji, regresji, grupowania, reguł asocjacyjnych i wizualizacji. Jest również dobrze przystosowany do tworzenia nowych schematów uczenia maszynowego.

Nathaniel Payne
źródło
9
Świetna odpowiedź. Naprawdę nie rozumiem, dlaczego tego rodzaju pytania są tu pomijane. +1
L0j1k
8
Zgadzam się całkowicie. Zadane pytanie ma charakter ogólny. To powiedziawszy, są to dokładnie rodzaje pytań, z którymi często się stykam, szczególnie gdy jestem nowy w jakimś obszarze.
Nathaniel Payne
1
Jeśli chodzi o biblioteki i narzędzia oparte na Javie, kolejnym świetnym narzędziem, na które możesz spojrzeć, jest LingPipe. alias-i.com/lingpipe
Nathaniel Payne
2
@NathanielPayne: Bardzo dziękuję za sugestie. To daje mi przewodnik po rozpoczęciu NLP.
Jin Ling,