Nltk: OSError: Perintah Java gagal saat menggunakan contoh parser stanford

Dibuat pada 25 Des 2015  ·  18Komentar  ·  Sumber: nltk/nltk

Hai,

Saya mencoba menjalankan contoh parser stanford. Misalnya

from nltk.parse.stanford import * 
dep_parser=StanfordDependencyParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
[parse.tree() for parse in dep_parser.raw_parse("The quick brown fox jumps over the lazy dog.")]

mengeksekusi hasil perintah terakhir dengan kesalahan:

OSError: Java command failed : [u'/usr/bin/java', u'-mx1000m', '-cp', ....

ketika saya mereproduksi perintah yang sama pada baris perintah, saya mendapatkan kesalahan Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory

Oleh karena itu, setelah menambahkan slf4j-api.jar ke classpath _pada commandline_, parsing berhasil.

Bagaimana slf4j-api.jar dapat ditambahkan ke nltk classpath, sehingga penguraian akan berhasil?

Terima kasih!
Selamat berlibur

Komentar yang paling membantu

apa 'st' dalam perintah 'stanford_dir = st._stanford_jar.rpartition('/')[0]'

Semua 18 komentar

@yuvval Hanya untuk memastikan apakah Anda menggunakan Stanford Parser versi 2015-12-09? Jika demikian, kesalahan ini terjadi karena StanfordNLP baru menggunakan lebih banyak dependensi daripada sebelumnya. Ini mirip dengan #1237

Anda harus menunggu beberapa saat sebelum #1237 diperbaiki dan NLTK menyusul dengan alat Standford.

Solusi perbaikan cepat adalah dengan:

  1. gunakan versi sebelumnya 2015-04-20 dari http://nlp.stanford.edu/software/stanford-parser-full-2015-04-20.zip dan NLTK API akan berfungsi, lihat http://stackoverflow.com /questions/13883277/stanford-parser-and-nltk/34112695#34112695 atau
  2. retas classpath parser stanford:
from nltk.internals import find_jars_within_path
from nltk.parse.stanford import StanfordDependencyParser
dep_parser=StanfordDependencyParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
stanford_dir = st._stanford_jar.rpartition('/')[0]
# or in windows comment the line above and uncomment the one below:
#stanford_dir = st._stanford_jar.rpartition("\\")[0]
stanford_jars = find_jars_within_path(stanford_dir)
st.stanford_jar = ':'.join(stanford_jars)
[parse.tree() for parse in dep_parser.raw_parse("The quick brown fox jumps over the lazy dog.")]

Terima kasih! Ini bekerja dengan versi 2015-04-20.

Apakah peretasan classpath juga berfungsi?

Saya tidak mencoba - saya baru saja menghapus versi terbaru dan mengunduh versi 20-04-2015.

Hai! Saya mencoba mengikuti peretasan Anda tetapi bagi saya tidak ada `StanfordDependencyParser``:

print(nltk.__version__)
from nltk.tag import StanfordDependencyParser

3.1
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-7-67bb74c3494a> in <module>()
----> 1 from nltk.tag import StanfordDependencyParser

ImportError: cannot import name 'StanfordDependencyParser'

Ada ide untuk mengatasi ini? Saya sangat ingin menggunakan versi stanford terbaru.

@methodds Maaf salah ketik, ini from nltk.parse.stanford import StanfordDependencyParser . Silakan lihat https://Gist.github.com/alvations/e1df0ba227e542955a8a untuk penjelasan rinci.

Terima kasih atas tautannya. Sayangnya, saya tidak bisa membuat variabel lingkungan bekerja di os linux mint saya.

bashrc terlihat seperti ini:

export JAVA_HOME="/usr/lib/jvm/java-8-oracle/"
export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH="/home/cs/stanford_nlp/stanford-postagger-full-2015-04-20/stanford-postagger.jar:$CLASSPATH"

export CLASSPATH="/home/cs/stanford_nlp/stanford-ner-2015-04-20/stanford-ner.jar:$CLASSPATH"

export STANFORD_MODELS="/home/cs/stanford_nlp/stanford-ner-2015-04-20/classifiers:$STANFORD_MODELS"

export STANFORD_MODELS="/home/cs/stanford_nlp/stanford-postagger-full-2015-04-20/models:$STANFORD_MODELS"

Menggemakan variabel terlihat benar:

echo $CLASSPATH
/home/cs/stanford_nlp/stanford-ner-2015-04-20/stanford-ner.jar:/home/cs/stanford_nlp/stanford-postagger-full-2015-04-20/stanford-postagger.jar

echo $STANFORD_MODELS
/home/cs/stanford_nlp/stanford-postagger-full-2015-04-20/models:/home/cs/stanford_nlp/stanford-ner-2015-04-20/classifiers

Namun (bahkan setelah reboot) NLTK masih tidak menemukan penanda:

from nltk.tag.stanford import StanfordPOSTagger
st = StanfordPOSTagger('english-bidirectional-distsim.tagger')
st.tag('What is the airspeed of an unladen swallow ?'.split())

NLTK was unable to find stanford-postagger.jar! Set the CLASSPATH
environment variable.

Lakukan source .bashrc dan itu akan berfungsi sementara itu, lihat http://Apple.stackexchange.com/questions/12993/why-doesnt-bashrc-run-automatically untuk mempelajari cara kerja bashrc.

Terima kasih atas tip Anda, tetapi saya telah melakukan source .bashrc sebelumnya dan tidak berhasil. Saya mencobanya lagi dan sayangnya masih tidak berhasil.

Apa distribusi dan versi Linux Anda? Bisakah Anda melakukan lsb_release -a ? Atau apakah Anda bekerja dengan Mac?

Terima kasih telah menyelidiki. ` lsb_release -a kembali

No LSB modules are available.
Distributor ID: LinuxMint
Description:    Linux Mint 17.3 Rosa
Release:    17.3
Codename:   rosa
  • Di mana Anda melakukan perintah export ? Direktori yang mana?
  • Di mana Anda menjalankan skrip python Anda? Direktori yang mana?

Pergi ke tempat Anda ingin menjalankan skrip python Anda, lakukan ini: import os; print os.environ .

Lalu pergi ke direktori home Anda, mulai python dan lakukan hal yang sama: import os; print os.environ

Apakah Anda melihat 2 set variabel lingkungan berbeda?

Saya kira Anda ingin saya menggunakan import os; print(os.environ) , yang tidak mengungkapkan variabel lingkungan yang saya ekspor .bashrc . Setelah itu saya salin tempel konten ke .profile (di folder rumah saya) dan sekarang berfungsi dengan baik. Entah kenapa =D.

Senang bahwa .profile berfungsi, saya pikir ini masalah distro OS. Saya tidak akan merekomendasikan untuk menyimpan variabel lingkungan sebagai statis, secara pribadi, saya menjalankannya kembali setiap kali saya memulai skrip python saya, sehingga saya dapat yakin bahwa tidak ada konflik. Bersenang-senanglah dengan API NLTK dan alat Stanford!

Terima kasih :)

apa 'st' dalam perintah 'stanford_dir = st._stanford_jar.rpartition('/')[0]'

Saya memiliki pertanyaan yang sama dengan hansen7

untuk beberapa yang telah mencari apa itu st,
st = StanfordNERTagger(os.environ.get('STANFORD_MODELS'))
Ref: https://Gist.github.com/manashmndl/810db10809cbc1209b34c7d25efe95d5#file -stanfordnertagger-py

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

alvations picture alvations  ·  4Komentar

BLKSerene picture BLKSerene  ·  4Komentar

stevenbird picture stevenbird  ·  3Komentar

alvations picture alvations  ·  4Komentar

ndvbd picture ndvbd  ·  4Komentar