Halo,
Berikut kodenya:
>>> s = nltk.parse.corenlp.CoreNLPServer(path_to_jar='/usr/local/share/stanford/stanford-corenlp-3.8.0.jar', path_to_models_jar='/usr/local/share/stanford/stanford-english-corenlp-2017-06-09-models.jar')
Traceback (most recent call last):
File "<input>", line 1, in <module>
s = nltk.parse.corenlp.CoreNLPServer(path_to_jar='/usr/local/share/stanford/stanford-corenlp-3.8.0.jar', path_to_models_jar='/usr/local/share/stanford/stanford-english-corenlp-2017-06-09-models.jar')
File "/Users/adiep/feedback-sentiment/.env/src/nltk/nltk/parse/corenlp.py", line 69, in __init__
key=lambda model_name: re.match(self._JAR, model_name)
TypeError: '>' not supported between instances of 'NoneType' and 'NoneType'
Fungsi max
melempar pengecualian ini.
Saya pikir yang terjadi adalah key=lambda model_name: re.match(self._JAR, model_name)
mengembalikan NoneType karena tidak cocok dengan apa pun. Jadi mengisi daftar NoneType
dan max
gagal mengurutkannya. Saya menemukan bahwa self._JAR
dan model_name
dievaluasi sebagai berikut:
>>> type(re.match(r'stanford-corenlp-(\d+)\.(\d+)\.(\d+)\.jar', '/usr/local/share/stanford/stanford-corenlp-3.8.0.jar'))
<class 'NoneType'>
Terima kasih,
Apakah fungsi max
dianggap sebagai feed nama file dan bukan path lengkap?
Saya mencoba untuk meneruskan folder CoreNLPServer dan nltk tidak dapat menemukannya karena suatu alasan.
Hai,
saya rasa begitu, apa itu jars
?
Guci terletak di `/usr/local/share/stanford'
Di sini ls dari dir yang relevan:
(.env) ➜ stanford l
total 2794816
-rwxr-xr-x 1 adiep admin 5.3K Jun 21 17:20 CoreNLP-to-HTML.xsl*
-rw-r--r-- 1 adiep admin 1.6K Jun 21 17:20 LIBRARY-LICENSES
-rw-r--r-- 1 adiep admin 34K Jun 21 17:20 LICENSE.txt
-rw-r--r-- 1 adiep admin 769B Jun 21 17:20 Makefile
-rw-r--r-- 1 adiep admin 3.6K Jun 21 17:20 README.txt
-rw-r--r-- 1 adiep admin 2.3K Jun 21 17:20 SemgrexDemo.java
-rw-r--r-- 1 adiep admin 1.8K Jun 21 17:20 ShiftReduceDemo.java
-rw-r--r-- 1 adiep admin 5.7K Jun 21 17:20 StanfordCoreNlpDemo.java
-rw-r--r-- 1 adiep admin 195K Jun 21 17:20 StanfordDependenciesManual.pdf
-rw-r--r-- 1 adiep admin 3.9K Jun 21 17:20 build.xml
-rwxr-xr-x 1 adiep admin 871B Jun 21 17:20 corenlp.sh*
-rw-r--r-- 1 adiep admin 1.2M Jun 21 17:20 ejml-0.23-src.zip
-rw-r--r-- 1 adiep admin 207K Jun 21 17:20 ejml-0.23.jar
-rw-r--r-- 1 adiep admin 89B Jun 21 17:20 input.txt
-rw-r--r-- 1 adiep admin 19K Jun 21 17:20 input.txt.xml
-rw-r--r-- 1 adiep admin 54K Jun 21 17:20 javax.json-api-1.0-sources.jar
-rw-r--r-- 1 adiep admin 83K Jun 21 17:20 javax.json.jar
-rw-r--r-- 1 adiep admin 756K Jun 21 17:20 joda-time-2.9-sources.jar
-rw-r--r-- 1 adiep admin 615K Jun 21 17:20 joda-time.jar
-rw-r--r-- 1 adiep admin 192K Jun 21 17:20 jollyday-0.4.9-sources.jar
-rw-r--r-- 1 adiep admin 209K Jun 21 17:20 jollyday.jar
drwxr-xr-x 10 adiep admin 340B Jun 21 17:20 patterns/
-rw-r--r-- 1 adiep admin 5.3K Jun 21 17:20 pom.xml
-rw-r--r-- 1 adiep admin 1.3M Jun 21 17:20 protobuf.jar
-rw-r--r-- 1 adiep admin 31K Jun 21 17:20 slf4j-api.jar
-rw-r--r-- 1 adiep admin 10K Jun 21 17:20 slf4j-simple.jar
-rw-r--r-- 1 adiep admin 9.6M Jun 21 17:20 stanford-corenlp-3.8.0-javadoc.jar
-rw-r--r-- 1 adiep admin 346M Jun 21 17:20 stanford-corenlp-3.8.0-models.jar
-rw-r--r-- 1 adiep admin 5.0M Jun 21 17:20 stanford-corenlp-3.8.0-sources.jar
-rw-r--r-- 1 adiep admin 7.6M Jun 21 17:20 stanford-corenlp-3.8.0.jar
-rw-r--r-- 1 adiep admin 991M Jun 21 17:37 stanford-english-corenlp-2017-06-09-models.jar
drwxr-xr-x 5 adiep admin 170B Jun 21 17:20 sutime/
drwxr-xr-x 6 adiep admin 204B Jun 21 17:20 tokensregex/
-rw-r--r-- 1 adiep admin 656K Jun 21 17:20 xom-1.2.10-src.jar
-rw-r--r-- 1 adiep admin 306K Jun 21 17:20 xom.jar
Saya tidak mengerti mengapa gagal menemukan jar di folder.
Bisakah Anda mengatur variabel env classpath sebelum memulai server:
os.environ['CLASSPATH'] = '/usr/local/share/stanford'
solusi lain bisa:
os.environ['STANFORD_PARSER'] = '/usr/local/share/stanford'
os.environ['STANFORD_MODELS'] = '/usr/local/share/stanford'
di pengaturan lokal saya, saya mengatur ketiga variabel.
Saya menambahkan ketiganya ke zsh saya dan saya masih mengalami masalah yang sama.
Juga, ketika saya menjalankan tes tox, saya melihat kesalahan yang sama persis.
Tidak tahu seberapa banyak bantuan ini, tetapi saya menambahkan baris untuk mencetak daftar file jar yang dibandingkan.
['/usr/local/share/stanford/stanford-corenlp-3.8.0.jar', '/usr/local/share/stanford/stanford-corenlp-3.8.0.jar']
Traceback (most recent call last):
File "<input>", line 1, in <module>
s = nltk.parse.corenlp.CoreNLPServer()
File "/Users/adiep/feedback-sentiment/.env/src/nltk/nltk/parse/corenlp.py", line 70, in __init__
key=lambda model_name: re.match(self._JAR, model_name)
TypeError: '>' not supported between instances of 'NoneType' and 'NoneType'
re.match gagal mencocokkan _JAR dengan file jar yang ditemukan.
```>>> impor nltk
impor ulang
s = nltk.parse.corenlp.CoreNLPServer()
['/usr/local/share/stanford/stanford-corenlp-3.8.0.jar', '/usr/local/share/stanford/stanford-corenlp-3.8.0.jar']
Traceback (panggilan terakhir terakhir):
Berkas " ", baris 1, di
s = nltk.parse.corenlp.CoreNLPServer()
File "/Users/adiep/feedback-sentiment/.env/src/nltk/nltk/parse/corenlp.py", baris 70, di __init__
key=lambda model_name: re.match(self._JAR, model_name)
TypeError: '>' tidak didukung antara instance 'NoneType' dan 'NoneType'
jar = '/usr/local/share/stanford/stanford-corenlp-3.8.0.jar'
r_jar = nltk.parse.corenlp.CoreNLPServer._JAR
re.match(r_jar, jar)```
Sepertinya yang terjadi adalah re.match sedang memberi makan path lengkap, ia mencari file jar di awal string, dan selalu gagal. Saya pikir itu seharusnya memberi makan hanya nama-nama file jar.
Baiklah perbaikannya cukup sederhana.
Saya mengubah re.match(...) menjadi re.search(...).group() jadi alih-alih hanya melihat awal string, itu terlihat di mana-mana.
Berlari ke masalah lain.
Saya pikir ini terkait dengan masalah yang saya miliki sebelumnya dengan CoreNLPparse menggunakan server proxy.
>>> s = nltk.parse.corenlp.CoreNLPServer()
>>> s.url
'http://localhost:9000'
>>> s.start()
Traceback (most recent call last):
File "<input>", line 1, in <module>
s.start()
File "/Users/adiep/feedback-sentiment/.env/src/nltk/nltk/parse/corenlp.py", line 149, in start
'Could not connect to the server.'
nltk.parse.corenlp.CoreNLPServerError: Could not connect to the server.
Ok, jadi itu masalah proxy. Saya menemukan bahwa Anda dapat mengatur NO_PROXY='localhost'
.
Sekarang saya memiliki masalah dengan server yang menolak terhubung.
Saya tidak yakin mengapa, tetapi ketika saya memulai objek server, itu memulai server di port 9000.
Sunting: Ternyata saya memiliki server corenlp yang mengambang di latar belakang. Saya baru saja membunuhnya dan sekarang melakukan ping ke port 9000.
```>>> impor nltk
s = nltk.parse.corenlp.CoreNLPServer(verbose=True)
[Ditemukan stanford-corenlp-(\d+).(\d+).(\d+).jar: /usr/local/share/stanford/stanford-corenlp-3.8.0.jar]
[Ditemukan stanford-corenlp-(\d+).(\d+).(\d+).jar: /usr/local/share/stanford/stanford-corenlp-3.8.0.jar]
[Ditemukan stanford-corenlp-(\d+).(\d+).(\d+)-models.jar: /usr/local/share/stanford/stanford-corenlp-3.8.0-models.jar]
s.mulai()
[Ditemukan Java: /usr/bin/java]
[Ditemukan Java: /usr/bin/java]
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
HTTPConnectionPool(host='localhost', port=59023): Percobaan ulang maksimum terlampaui dengan url: /live (Disebabkan oleh NewConnectionError(': Gagal membuat koneksi baru: [Errno 61] Koneksi ditolak',))
Traceback (panggilan terakhir terakhir):
Berkas " ", baris 1, di
s.mulai()
File "/Users/adiep/feedback-sentiment/.env/src/nltk/nltk/parse/corenlp.py", baris 150, di awal
'Tidak dapat terhubung ke server.'
nltk.parse.corenlp.CoreNLPServerError: Tidak dapat terhubung ke server.
```
Tuan yang baik, sekarang berhasil.
Jadi secara keseluruhan, saya harus mengubah re.match menjadi re.search.group dan mematikan server corenlp yang mengambang di latar belakang.
Mungkin harus ada beberapa kode untuk mendeteksi jika ada server corenlp lain yang berjalan? Tidak tahu apakah itu layak dilakukan.
Sepertinya jika Anda tidak menggunakan dengan klausa, membuat objek server, dan tidak menghentikannya, python menghapus objek tetapi bukan server yang sebenarnya. Apa yang saya lakukan adalah bahwa saya memulai server di juru bahasa saya dan lupa menjalankan s.stop()
.
Kami perlu mendokumentasikan cara kerja Stanford CoreNLP API sehingga kami memberi tahu orang-orang untuk tidak memulai server di dalam Python.
Atau, saya pikir jika kita menggunakan trik __all__
, mungkin kita dapat mengizinkan akses terbatas ke apa yang ada di dalam nltk.parse.corenlp
dan mencegah pengguna mengakses CoreNLPServer
. Objek level terendah yang harus digunakan pengguna adalah GenericCoreNLPParser
.
BTW, @dimazest apakah CoreNLPServer
hanya digunakan untuk lingkungan pengujian?
Ya, itu hanya digunakan dalam tes.
Halo - Saya pikir saya mengalami masalah terkait dengan yang disebutkan di sini.
Saya baru-baru ini mulai menggunakan paket ini dan saya menggunakan StanfordNERTagger, yang mengembalikan kesalahan penghentian.
/usr/local/lib/python2.7/dist-packages/nltk/tag/stanford.py:183: DeprecationWarning:
The StanfordTokenizer will be deprecated in version 3.2.5.
Please use nltk.tag.corenlp.CoreNLPPOSTagger or nltk.tag.corenlp.CoreNLPNERTagger instead.
Perhatikan bahwa saya pikir ada kesalahan ketik dalam peringatan ini. Saya harus mengimpor dari nltk.tag.stanford
untuk menemukan CoreNLPNERTagger
.
Jadi saya sudah mencoba untuk beralih ke fungsi baru dan sepertinya saya tidak bisa membuatnya berfungsi.
Sebelumnya saya punya:
stanfordClassifier = '/root/stanford-ner-2017-06-09/classifiers/english.muc.7class.distsim.crf.ser.gz'
stanfordNerPath = '/root/stanford-ner-2017-06-09/stanford-ner.jar'
st = StanfordNERTagger(stanfordClassifier, stanfordNerPath, encoding='utf8')
tokens = nltk.tokenize.word_tokenize(text)
ner_tags = st.tag(tokens)
Yang sekarang telah saya ubah menjadi
stanfordClassifier = '/root/stanford-ner-2017-06-09/classifiers/english.muc.7class.distsim.crf.ser.gz'
stanfordNerPath = '/root/stanford-ner-2017-06-09/stanford-ner.jar'
with CoreNLPServer(stanfordNerPath, stanfordClassifier) as server:
st = CoreNLPNERTagger(url=server.url)
tokens = nltk.tokenize.word_tokenize(text)
ner_tags = st.tag(tokens)
Namun, kode ini mengembalikan kesalahan ini: CoreNLPServerError: Could not connect to the server.
Saya tidak dapat menemukan dokumentasi di mana pun tentang bagaimana saya seharusnya memanggil CoreNLPNERTagger
dan bagaimana panggilan itu berbeda dari StanfordNERTagger
sudah usang.
Bantuan apa pun sangat dihargai. Terima kasih!
Hai, maaf tidak ada dokumentasi. API telah berubah, inilah yang perlu Anda lakukan. Lihat #1510, ini berisi diskusi panjang tentang cara memulai server.
Perubahan utama: NLTK tidak memulai server CoreNLP, Anda harus memulainya. Lihat https://stanfordnlp.github.io/CoreNLP/corenlp-server.html untuk penjelasan terperinci, tetapi perintahnya harus seperti:
# Run the server using all jars in the current directory (e.g., the CoreNLP home directory)
java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9000 -timeout 15000
Buka http://localhost :9000/ untuk memastikan server berjalan.
Sekarang Anda siap menggunakan klien corenlp NLTK:
tagger = CoreNLPNERTagger(url='http://localhost:9000')
tokens = tagger.tag(text)
Tolong beri tahu saya jika berhasil.
Ya! Ini bekerja. Terima kasih banyak atas bantuannya.
Terima kasih @dimazest , @alvations
Untuk beberapa alasan, saya tidak dapat terhubung ke server. Adakah yang bisa membantu saya? Berikut kode yang saya jalankan.
dari nltk.parse.corenlp impor CoreNLPServer
server = CoreNLPServer("stanford-corenlp-4.0.0.jar",,"stanford-corenlp-4.0.0-models.jar",verbose=True)
server.mulai()
dari nltk.parse.corenlpnltk.pa impor CoreNLPparser
parser = CoreNLPparser()
parse = next(parser.raw_parse("Saya meletakkan buku di kotak di atas meja."))
server.stop()
Saya menjalankannya dalam file di dalam folder yang saya unduh untuk CoreNLP sehingga saya tidak perlu khawatir tentang jalur abs atau apa pun.
Inilah yang dihasilkannya:
[Ditemukan Java: /usr/bin/java]
[Ditemukan Java: /usr/bin/java]
Traceback (panggilan terakhir terakhir):
File "/Users/benstevens/Desktop/Bernstein2/Ben/stanford-corenlp-4.0.0/BenTest.py", baris 4, di
server.mulai()
File "/Users/benstevens/Library/Python/3.8/lib/python/site-packages/nltk/parse/corenlp.py", baris 153, di awal
menaikkan CoreNLPServerError("Tidak dapat terhubung ke server.")
nltk.parse.corenlp.CoreNLPServerError: Tidak dapat terhubung ke server.
Saya akan sangat menghargai bantuan apa pun.
Komentar yang paling membantu
Tuan yang baik, sekarang berhasil.
Jadi secara keseluruhan, saya harus mengubah re.match menjadi re.search.group dan mematikan server corenlp yang mengambang di latar belakang.
Mungkin harus ada beberapa kode untuk mendeteksi jika ada server corenlp lain yang berjalan? Tidak tahu apakah itu layak dilakukan.