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
@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:
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
export
? 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
Komentar yang paling membantu
apa 'st' dalam perintah 'stanford_dir = st._stanford_jar.rpartition('/')[0]'