Apakah mungkin menggunakan Stanford Parser di NLTK? (Saya tidak berbicara tentang Stanford POS.)
Apakah mungkin menggunakan Stanford Parser di NLTK? (Saya tidak berbicara tentang Stanford POS.)
Jawaban:
Perhatikan bahwa jawaban ini berlaku untuk NLTK v 3.0, dan tidak untuk versi yang lebih baru.
Tentu, coba yang berikut ini dengan Python:
import os
from nltk.parse import stanford
os.environ['STANFORD_PARSER'] = '/path/to/standford/jars'
os.environ['STANFORD_MODELS'] = '/path/to/standford/jars'
parser = stanford.StanfordParser(model_path="/location/of/the/englishPCFG.ser.gz")
sentences = parser.raw_parse_sents(("Hello, My name is Melroy.", "What is your name?"))
print sentences
# GUI
for line in sentences:
for sentence in line:
sentence.draw()
Keluaran:
[Pohon ('ROOT', [Pohon ('S', [Pohon ('INTJ', [Pohon ('UH', ['Halo'])]), Pohon (',', [',']), Pohon ('NP', [Tree ('PRP $', ['My']), Tree ('NN', ['name'])]), Tree ('VP', [Tree ('VBZ', [ 'adalah']), Pohon ('ADJP', [Pohon ('JJ', ['Melroy'])])]), Pohon ('.', ['.'])])]), Pohon (' ROOT ', [Pohon (' SBARQ ', [Pohon (' WHNP ', [Pohon (' WP ', [' Apa '])]), Pohon (' SQ ', [Pohon (' VBZ ', [' adalah ' ]), Pohon ('NP', [Pohon ('PRP $', ['milikmu']), Pohon ('NN', ['nama'])])]), Pohon ('.', ['? '])])])]
Catatan 1: Dalam contoh ini, parser & model jars berada dalam folder yang sama.
Catatan 2:
Catatan 3: File englishPCFG.ser.gz dapat ditemukan di dalam file models.jar (/edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz). Silakan gunakan come archive manager untuk 'unzip' file models.jar.
Catatan 4: Pastikan Anda menggunakan Java JRE (Runtime Environment) 1.8 juga dikenal sebagai Oracle JDK 8. Jika tidak, Anda akan mendapatkan: Versi mayor.minor yang tidak didukung 52.0.
Unduh NLTK v3 dari: https://github.com/nltk/nltk . Dan instal NLTK:
sudo python setup.py install
Anda dapat menggunakan pengunduh NLTK untuk mendapatkan Stanford Parser, menggunakan Python:
import nltk
nltk.download()
Coba contoh saya! (jangan lupa ubah jalur jar dan ubah jalur model ke lokasi ser.gz)
ATAU:
Unduh dan instal NLTK v3, sama seperti di atas.
Unduh versi terbaru dari ( nama file versi saat ini adalah stanford-parser-full-2015-01-29.zip): http://nlp.stanford.edu/software/lex-parser.shtml#Download
Ekstrak file standford-parser-full-20xx-xx-xx.zip.
Buat folder baru ('jars' dalam contoh saya). Tempatkan file yang diekstrak ke dalam folder jar ini: stanford-parser-3.xx-models.jar dan stanford-parser.jar.
Seperti yang ditunjukkan di atas, Anda dapat menggunakan variabel lingkungan (STANFORD_PARSER & STANFORD_MODELS) untuk mengarahkan ke folder 'jars' ini. Saya menggunakan Linux, jadi jika Anda menggunakan Windows, gunakan sesuatu seperti: C: // folder // jars.
Buka stanford-parser-3.xx-models.jar menggunakan Manajer arsip (7zip).
Jelajahi di dalam file jar; edu / stanford / nlp / models / lexparser. Sekali lagi, ekstrak file bernama 'englishPCFG.ser.gz'. Ingat lokasi tempat Anda mengekstrak file ser.gz ini.
Saat membuat instance StanfordParser, Anda dapat memberikan jalur model sebagai parameter. Ini adalah jalur lengkap ke model, dalam kasus kami /location/of/englishPCFG.ser.gz.
Coba contoh saya! (jangan lupa ubah jalur jar dan ubah jalur model ke lokasi ser.gz)
nltk.parse.stanford
? Saya hanya ada nltk.tag.stanford
di NLTK 2.0.4
.
AttributeError: 'StanfordParser' object has no attribute 'raw_batch_parse'
raw_parse_sents()
for line in sentences: for sentence in line: sentence.draw()
Anda hanya dapat mengeksekusi draw () pada objek Tree;)
NLTK official 3rd party tools
dokumentasi.
Jawaban di bawah tidak berlaku lagi, gunakan solusi di https://stackoverflow.com/a/51981566/610569 untuk NLTK v3.3 dan yang lebih baru.
Catatan: Jawaban berikut hanya akan berfungsi:
Karena kedua alat berubah agak cepat dan API mungkin terlihat sangat berbeda 3-6 bulan kemudian. Mohon perlakukan jawaban berikut sebagai sementara dan bukan sebagai solusi abadi.
Selalu merujuk ke https://github.com/nltk/nltk/wiki/Installing-Third-Party-Software untuk instruksi terbaru tentang cara menghubungkan alat Stanford NLP menggunakan NLTK !!
cd $HOME
# Update / Install NLTK
pip install -U nltk
# Download the Stanford NLP tools
wget http://nlp.stanford.edu/software/stanford-ner-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-postagger-full-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-parser-full-2015-04-20.zip
# Extract the zip file.
unzip stanford-ner-2015-04-20.zip
unzip stanford-parser-full-2015-04-20.zip
unzip stanford-postagger-full-2015-04-20.zip
export STANFORDTOOLSDIR=$HOME
export CLASSPATH=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/stanford-postagger.jar:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/stanford-ner.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar
export STANFORD_MODELS=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/models:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/classifiers
Kemudian:
>>> from nltk.tag.stanford import StanfordPOSTagger
>>> st = StanfordPOSTagger('english-bidirectional-distsim.tagger')
>>> st.tag('What is the airspeed of an unladen swallow ?'.split())
[(u'What', u'WP'), (u'is', u'VBZ'), (u'the', u'DT'), (u'airspeed', u'NN'), (u'of', u'IN'), (u'an', u'DT'), (u'unladen', u'JJ'), (u'swallow', u'VB'), (u'?', u'.')]
>>> from nltk.tag import StanfordNERTagger
>>> st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')
>>> st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
[(u'Rami', u'PERSON'), (u'Eid', u'PERSON'), (u'is', u'O'), (u'studying', u'O'), (u'at', u'O'), (u'Stony', u'ORGANIZATION'), (u'Brook', u'ORGANIZATION'), (u'University', u'ORGANIZATION'), (u'in', u'O'), (u'NY', u'O')]
>>> from nltk.parse.stanford import StanfordParser
>>> parser=StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
>>> list(parser.raw_parse("the quick brown fox jumps over the lazy dog"))
[Tree('ROOT', [Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['quick']), Tree('JJ', ['brown']), Tree('NN', ['fox'])]), Tree('NP', [Tree('NP', [Tree('NNS', ['jumps'])]), Tree('PP', [Tree('IN', ['over']), Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['lazy']), Tree('NN', ['dog'])])])])])])]
>>> from nltk.parse.stanford import StanfordDependencyParser
>>> dep_parser=StanfordDependencyParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
>>> print [parse.tree() for parse in dep_parser.raw_parse("The quick brown fox jumps over the lazy dog.")]
[Tree('jumps', [Tree('fox', ['The', 'quick', 'brown']), Tree('dog', ['over', 'the', 'lazy'])])]
Pertama , kita harus mencatat bahwa alat Stanford NLP ditulis dalam Java dan NLTK ditulis dengan Python . Cara NLTK menghubungkan alat ini melalui panggilan alat Java melalui antarmuka baris perintah.
Kedua , NLTK
API ke alat Stanford NLP telah berubah cukup banyak sejak versi 3.1. Jadi disarankan untuk memperbarui paket NLTK Anda ke v3.1.
Ketiga , para NLTK
API untuk Stanford NLP Alat membungkus di sekitar alat NLP individu, misalnya Stanford POS tagger , Stanford NER Tagger , Stanford Parser .
Untuk tagger POS dan NER, ini TIDAK membungkus paket Stanford Core NLP .
Untuk Stanford Parser, ini adalah kasus khusus yang membungkus Stanford Parser dan Stanford Core NLP (secara pribadi, saya belum menggunakan yang terakhir menggunakan NLTK, saya lebih suka mengikuti demonstrasi @ dimazest di http: //www.eecs. qmul.ac.uk/~dm303/stanford-dependency-parser-nltk-and-anaconda.html )
Perhatikan bahwa pada NLTK v3.1, yang STANFORD_JAR
dan STANFORD_PARSER
variabel sudah ditinggalkan dan TIDAK LAGI digunakan
Dengan asumsi Anda telah menginstal Java dengan benar di OS Anda.
Sekarang, instal / perbarui versi NLTK Anda (lihat http://www.nltk.org/install.html ):
sudo pip install -U nltk
sudo apt-get install python-nltk
Untuk Windows (Gunakan penginstalan biner 32-bit):
( Mengapa tidak 64 bit? Lihat https://github.com/nltk/nltk/issues/1079 )
Kemudian keluar dari paranoia, periksa kembali nltk
versi Anda di dalam python:
from __future__ import print_function
import nltk
print(nltk.__version__)
Atau di baris perintah:
python3 -c "import nltk; print(nltk.__version__)"
Pastikan Anda melihat 3.1
hasilnya.
Untuk lebih banyak paranoia, periksa apakah semua alat API Stanford NLP favorit Anda tersedia:
from nltk.parse.stanford import StanfordParser
from nltk.parse.stanford import StanfordDependencyParser
from nltk.parse.stanford import StanfordNeuralDependencyParser
from nltk.tag.stanford import StanfordPOSTagger, StanfordNERTagger
from nltk.tokenize.stanford import StanfordTokenizer
( Catatan : Impor di atas HANYA akan memastikan bahwa Anda menggunakan versi NLTK yang benar yang berisi API ini. Tidak melihat kesalahan dalam impor bukan berarti Anda telah berhasil mengkonfigurasi API NLTK untuk menggunakan Alat Stanford)
Sekarang Anda telah memeriksa bahwa Anda memiliki versi NLTK yang benar yang berisi antarmuka alat NLP Stanford yang diperlukan. Anda perlu mengunduh dan mengekstrak semua alat Stanford NLP yang diperlukan.
TL; DR , di Unix:
cd $HOME
# Download the Stanford NLP tools
wget http://nlp.stanford.edu/software/stanford-ner-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-postagger-full-2015-04-20.zip
wget http://nlp.stanford.edu/software/stanford-parser-full-2015-04-20.zip
# Extract the zip file.
unzip stanford-ner-2015-04-20.zip
unzip stanford-parser-full-2015-04-20.zip
unzip stanford-postagger-full-2015-04-20.zip
Di Windows / Mac:
Atur variabel lingkungan sedemikian rupa sehingga NLTK dapat menemukan jalur file yang relevan secara otomatis. Anda harus mengatur variabel berikut:
Tambahkan .jar
file Stanford NLP yang sesuai ke CLASSPATH
variabel lingkungan.
stanford-ner-2015-04-20/stanford-ner.jar
stanford-postagger-full-2015-04-20/stanford-postagger.jar
stanford-parser-full-2015-04-20/stanford-parser.jar
dan file jar model parser,stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar
Tambahkan direktori model yang sesuai ke STANFORD_MODELS
variabel (yaitu direktori tempat Anda dapat menemukan tempat penyimpanan model terlatih)
stanford-ner-2015-04-20/classifiers/
stanford-postagger-full-2015-04-20/models/
Di dalam kode, lihat bahwa ia mencari STANFORD_MODELS
direktori sebelum menambahkan nama model. Juga lihat itu, API juga secara otomatis mencoba mencari lingkungan OS untuk `CLASSPATH )
Perhatikan bahwa pada NLTK v3.1, STANFORD_JAR
variabel tidak digunakan lagi dan TIDAK LAGI digunakan . Cuplikan kode yang ditemukan dalam pertanyaan Stackoverflow berikut mungkin tidak berfungsi:
TL; DR untuk LANGKAH 3 di Ubuntu
export STANFORDTOOLSDIR=/home/path/to/stanford/tools/
export CLASSPATH=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/stanford-postagger.jar:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/stanford-ner.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser.jar:$STANFORDTOOLSDIR/stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar
export STANFORD_MODELS=$STANFORDTOOLSDIR/stanford-postagger-full-2015-04-20/models:$STANFORDTOOLSDIR/stanford-ner-2015-04-20/classifiers
( Untuk Windows : Lihat https://stackoverflow.com/a/17176423/610569 untuk petunjuk pengaturan variabel lingkungan)
Anda HARUS mengatur variabel seperti di atas sebelum memulai python, lalu:
>>> from nltk.tag.stanford import StanfordPOSTagger
>>> st = StanfordPOSTagger('english-bidirectional-distsim.tagger')
>>> st.tag('What is the airspeed of an unladen swallow ?'.split())
[(u'What', u'WP'), (u'is', u'VBZ'), (u'the', u'DT'), (u'airspeed', u'NN'), (u'of', u'IN'), (u'an', u'DT'), (u'unladen', u'JJ'), (u'swallow', u'VB'), (u'?', u'.')]
>>> from nltk.tag import StanfordNERTagger
>>> st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')
>>> st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
[(u'Rami', u'PERSON'), (u'Eid', u'PERSON'), (u'is', u'O'), (u'studying', u'O'), (u'at', u'O'), (u'Stony', u'ORGANIZATION'), (u'Brook', u'ORGANIZATION'), (u'University', u'ORGANIZATION'), (u'in', u'O'), (u'NY', u'O')]
>>> from nltk.parse.stanford import StanfordParser
>>> parser=StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz")
>>> list(parser.raw_parse("the quick brown fox jumps over the lazy dog"))
[Tree('ROOT', [Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['quick']), Tree('JJ', ['brown']), Tree('NN', ['fox'])]), Tree('NP', [Tree('NP', [Tree('NNS', ['jumps'])]), Tree('PP', [Tree('IN', ['over']), Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['lazy']), Tree('NN', ['dog'])])])])])])]
Atau, Anda dapat mencoba menambahkan variabel lingkungan di dalam python, seperti yang disarankan oleh jawaban sebelumnya, tetapi Anda juga dapat langsung memberi tahu parser / tagger untuk menginisialisasi ke jalur langsung tempat Anda menyimpan .jar
file dan model Anda.
TIDAK perlu menyetel variabel lingkungan jika Anda menggunakan metode berikut TETAPI ketika API mengubah nama parameternya, Anda perlu mengubahnya. Itulah mengapa LEBIH disarankan untuk mengatur variabel lingkungan daripada memodifikasi kode python Anda agar sesuai dengan versi NLTK.
Misalnya ( tanpa menetapkan variabel lingkungan apa pun ):
# POS tagging:
from nltk.tag import StanfordPOSTagger
stanford_pos_dir = '/home/alvas/stanford-postagger-full-2015-04-20/'
eng_model_filename= stanford_pos_dir + 'models/english-left3words-distsim.tagger'
my_path_to_jar= stanford_pos_dir + 'stanford-postagger.jar'
st = StanfordPOSTagger(model_filename=eng_model_filename, path_to_jar=my_path_to_jar)
st.tag('What is the airspeed of an unladen swallow ?'.split())
# NER Tagging:
from nltk.tag import StanfordNERTagger
stanford_ner_dir = '/home/alvas/stanford-ner/'
eng_model_filename= stanford_ner_dir + 'classifiers/english.all.3class.distsim.crf.ser.gz'
my_path_to_jar= stanford_ner_dir + 'stanford-ner.jar'
st = StanfordNERTagger(model_filename=eng_model_filename, path_to_jar=my_path_to_jar)
st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
# Parsing:
from nltk.parse.stanford import StanfordParser
stanford_parser_dir = '/home/alvas/stanford-parser/'
eng_model_path = stanford_parser_dir + "edu/stanford/nlp/models/lexparser/englishRNN.ser.gz"
my_path_to_models_jar = stanford_parser_dir + "stanford-parser-3.5.2-models.jar"
my_path_to_jar = stanford_parser_dir + "stanford-parser.jar"
parser=StanfordParser(model_path=eng_model_path, path_to_models_jar=my_path_to_models_jar, path_to_jar=my_path_to_jar)
Jawaban di bawah tidak berlaku lagi, gunakan solusi di https://stackoverflow.com/a/51981566/610569 untuk NLTK v3.3 dan yang lebih baru.
Pada parser Stanford saat ini (2015-04-20), keluaran default untuk lexparser.sh
telah berubah sehingga skrip di bawah ini tidak akan berfungsi.
Namun jawaban ini disimpan demi warisan, namun tetap akan berfungsi dengan http://nlp.stanford.edu/software/stanford-parser-2012-11-12.zip .
Saya sarankan Anda tidak main-main dengan Jython, JPype. Biarkan python melakukan hal-hal python dan biarkan java melakukan hal-hal java, dapatkan keluaran Stanford Parser melalui konsol.
Setelah Anda menginstal Parser Stanford di direktori home Anda ~/
, cukup gunakan resep python ini untuk mendapatkan parse kurung datar:
import os
sentence = "this is a foo bar i want to parse."
os.popen("echo '"+sentence+"' > ~/stanfordtemp.txt")
parser_out = os.popen("~/stanford-parser-2012-11-12/lexparser.sh ~/stanfordtemp.txt").readlines()
bracketed_parse = " ".join( [i.strip() for i in parser_out if i.strip()[0] == "("] )
print bracketed_parse
len(i.strip()) > 0
jika tidak saya mendapat kesalahan indeks. Saya kira keluaran parser saya memiliki setidaknya satu baris yang murni spasi.
'
s, Anda akan mendapatkan beberapa kesalahan aneh. Ada cara yang lebih baik untuk memanggil sesuatu pada baris perintah
Mulai NLTK v3.3, pengguna harus menghindari penandaan Stanford NER atau POS nltk.tag
, dan menghindari Stanford tokenizer / segmenter dari nltk.tokenize
.
Alih-alih gunakan nltk.parse.corenlp.CoreNLPParser
API baru .
Silakan lihat https://github.com/nltk/nltk/wiki/Stanford-CoreNLP-API-in-NLTK
(Menghindari jawaban hanya tautan, saya telah menempelkan dokumen dari NLTK github wiki di bawah)
Pertama, perbarui NLTK Anda
pip3 install -U nltk # Make sure is >=3.3
Kemudian unduh paket CoreNLP yang diperlukan:
cd ~
wget http://nlp.stanford.edu/software/stanford-corenlp-full-2018-02-27.zip
unzip stanford-corenlp-full-2018-02-27.zip
cd stanford-corenlp-full-2018-02-27
# Get the Chinese model
wget http://nlp.stanford.edu/software/stanford-chinese-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-chinese.properties
# Get the Arabic model
wget http://nlp.stanford.edu/software/stanford-arabic-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-arabic.properties
# Get the French model
wget http://nlp.stanford.edu/software/stanford-french-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-french.properties
# Get the German model
wget http://nlp.stanford.edu/software/stanford-german-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-german.properties
# Get the Spanish model
wget http://nlp.stanford.edu/software/stanford-spanish-corenlp-2018-02-27-models.jar
wget https://raw.githubusercontent.com/stanfordnlp/CoreNLP/master/src/edu/stanford/nlp/pipeline/StanfordCoreNLP-spanish.properties
Masih di stanford-corenlp-full-2018-02-27
direktori, mulai server:
java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-preload tokenize,ssplit,pos,lemma,ner,parse,depparse \
-status_port 9000 -port 9000 -timeout 15000 &
Kemudian dengan Python:
>>> from nltk.parse import CoreNLPParser
# Lexical Parser
>>> parser = CoreNLPParser(url='http://localhost:9000')
# Parse tokenized text.
>>> list(parser.parse('What is the airspeed of an unladen swallow ?'.split()))
[Tree('ROOT', [Tree('SBARQ', [Tree('WHNP', [Tree('WP', ['What'])]), Tree('SQ', [Tree('VBZ', ['is']), Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('NN', ['airspeed'])]), Tree('PP', [Tree('IN', ['of']), Tree('NP', [Tree('DT', ['an']), Tree('JJ', ['unladen'])])]), Tree('S', [Tree('VP', [Tree('VB', ['swallow'])])])])]), Tree('.', ['?'])])])]
# Parse raw string.
>>> list(parser.raw_parse('What is the airspeed of an unladen swallow ?'))
[Tree('ROOT', [Tree('SBARQ', [Tree('WHNP', [Tree('WP', ['What'])]), Tree('SQ', [Tree('VBZ', ['is']), Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('NN', ['airspeed'])]), Tree('PP', [Tree('IN', ['of']), Tree('NP', [Tree('DT', ['an']), Tree('JJ', ['unladen'])])]), Tree('S', [Tree('VP', [Tree('VB', ['swallow'])])])])]), Tree('.', ['?'])])])]
# Neural Dependency Parser
>>> from nltk.parse.corenlp import CoreNLPDependencyParser
>>> dep_parser = CoreNLPDependencyParser(url='http://localhost:9000')
>>> parses = dep_parser.parse('What is the airspeed of an unladen swallow ?'.split())
>>> [[(governor, dep, dependent) for governor, dep, dependent in parse.triples()] for parse in parses]
[[(('What', 'WP'), 'cop', ('is', 'VBZ')), (('What', 'WP'), 'nsubj', ('airspeed', 'NN')), (('airspeed', 'NN'), 'det', ('the', 'DT')), (('airspeed', 'NN'), 'nmod', ('swallow', 'VB')), (('swallow', 'VB'), 'case', ('of', 'IN')), (('swallow', 'VB'), 'det', ('an', 'DT')), (('swallow', 'VB'), 'amod', ('unladen', 'JJ')), (('What', 'WP'), 'punct', ('?', '.'))]]
# Tokenizer
>>> parser = CoreNLPParser(url='http://localhost:9000')
>>> list(parser.tokenize('What is the airspeed of an unladen swallow?'))
['What', 'is', 'the', 'airspeed', 'of', 'an', 'unladen', 'swallow', '?']
# POS Tagger
>>> pos_tagger = CoreNLPParser(url='http://localhost:9000', tagtype='pos')
>>> list(pos_tagger.tag('What is the airspeed of an unladen swallow ?'.split()))
[('What', 'WP'), ('is', 'VBZ'), ('the', 'DT'), ('airspeed', 'NN'), ('of', 'IN'), ('an', 'DT'), ('unladen', 'JJ'), ('swallow', 'VB'), ('?', '.')]
# NER Tagger
>>> ner_tagger = CoreNLPParser(url='http://localhost:9000', tagtype='ner')
>>> list(ner_tagger.tag(('Rami Eid is studying at Stony Brook University in NY'.split())))
[('Rami', 'PERSON'), ('Eid', 'PERSON'), ('is', 'O'), ('studying', 'O'), ('at', 'O'), ('Stony', 'ORGANIZATION'), ('Brook', 'ORGANIZATION'), ('University', 'ORGANIZATION'), ('in', 'O'), ('NY', 'STATE_OR_PROVINCE')]
Mulai server sedikit berbeda, masih dari direktori `stanford-corenlp-full-2018-02-27:
java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-chinese.properties \
-preload tokenize,ssplit,pos,lemma,ner,parse \
-status_port 9001 -port 9001 -timeout 15000
Dengan Python:
>>> parser = CoreNLPParser('http://localhost:9001')
>>> list(parser.tokenize(u'我家没有电脑。'))
['我家', '没有', '电脑', '。']
>>> list(parser.parse(parser.tokenize(u'我家没有电脑。')))
[Tree('ROOT', [Tree('IP', [Tree('IP', [Tree('NP', [Tree('NN', ['我家'])]), Tree('VP', [Tree('VE', ['没有']), Tree('NP', [Tree('NN', ['电脑'])])])]), Tree('PU', ['。'])])])]
Mulai server:
java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-arabic.properties \
-preload tokenize,ssplit,pos,parse \
-status_port 9005 -port 9005 -timeout 15000
Dengan Python:
>>> from nltk.parse import CoreNLPParser
>>> parser = CoreNLPParser('http://localhost:9005')
>>> text = u'انا حامل'
# Parser.
>>> parser.raw_parse(text)
<list_iterator object at 0x7f0d894c9940>
>>> list(parser.raw_parse(text))
[Tree('ROOT', [Tree('S', [Tree('NP', [Tree('PRP', ['انا'])]), Tree('NP', [Tree('NN', ['حامل'])])])])]
>>> list(parser.parse(parser.tokenize(text)))
[Tree('ROOT', [Tree('S', [Tree('NP', [Tree('PRP', ['انا'])]), Tree('NP', [Tree('NN', ['حامل'])])])])]
# Tokenizer / Segmenter.
>>> list(parser.tokenize(text))
['انا', 'حامل']
# POS tagg
>>> pos_tagger = CoreNLPParser('http://localhost:9005', tagtype='pos')
>>> list(pos_tagger.tag(parser.tokenize(text)))
[('انا', 'PRP'), ('حامل', 'NN')]
# NER tag
>>> ner_tagger = CoreNLPParser('http://localhost:9005', tagtype='ner')
>>> list(ner_tagger.tag(parser.tokenize(text)))
[('انا', 'O'), ('حامل', 'O')]
Mulai server:
java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-french.properties \
-preload tokenize,ssplit,pos,parse \
-status_port 9004 -port 9004 -timeout 15000
Dengan Python:
>>> parser = CoreNLPParser('http://localhost:9004')
>>> list(parser.parse('Je suis enceinte'.split()))
[Tree('ROOT', [Tree('SENT', [Tree('NP', [Tree('PRON', ['Je']), Tree('VERB', ['suis']), Tree('AP', [Tree('ADJ', ['enceinte'])])])])])]
>>> pos_tagger = CoreNLPParser('http://localhost:9004', tagtype='pos')
>>> pos_tagger.tag('Je suis enceinte'.split())
[('Je', 'PRON'), ('suis', 'VERB'), ('enceinte', 'ADJ')]
Mulai server:
java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-german.properties \
-preload tokenize,ssplit,pos,ner,parse \
-status_port 9002 -port 9002 -timeout 15000
Dengan Python:
>>> parser = CoreNLPParser('http://localhost:9002')
>>> list(parser.raw_parse('Ich bin schwanger'))
[Tree('ROOT', [Tree('NUR', [Tree('S', [Tree('PPER', ['Ich']), Tree('VAFIN', ['bin']), Tree('AP', [Tree('ADJD', ['schwanger'])])])])])]
>>> list(parser.parse('Ich bin schwanger'.split()))
[Tree('ROOT', [Tree('NUR', [Tree('S', [Tree('PPER', ['Ich']), Tree('VAFIN', ['bin']), Tree('AP', [Tree('ADJD', ['schwanger'])])])])])]
>>> pos_tagger = CoreNLPParser('http://localhost:9002', tagtype='pos')
>>> pos_tagger.tag('Ich bin schwanger'.split())
[('Ich', 'PPER'), ('bin', 'VAFIN'), ('schwanger', 'ADJD')]
>>> pos_tagger = CoreNLPParser('http://localhost:9002', tagtype='pos')
>>> pos_tagger.tag('Ich bin schwanger'.split())
[('Ich', 'PPER'), ('bin', 'VAFIN'), ('schwanger', 'ADJD')]
>>> ner_tagger = CoreNLPParser('http://localhost:9002', tagtype='ner')
>>> ner_tagger.tag('Donald Trump besuchte Angela Merkel in Berlin.'.split())
[('Donald', 'PERSON'), ('Trump', 'PERSON'), ('besuchte', 'O'), ('Angela', 'PERSON'), ('Merkel', 'PERSON'), ('in', 'O'), ('Berlin', 'LOCATION'), ('.', 'O')]
Mulai server:
java -Xmx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-serverProperties StanfordCoreNLP-spanish.properties \
-preload tokenize,ssplit,pos,ner,parse \
-status_port 9003 -port 9003 -timeout 15000
Dengan Python:
>>> pos_tagger = CoreNLPParser('http://localhost:9003', tagtype='pos')
>>> pos_tagger.tag(u'Barack Obama salió con Michael Jackson .'.split())
[('Barack', 'PROPN'), ('Obama', 'PROPN'), ('salió', 'VERB'), ('con', 'ADP'), ('Michael', 'PROPN'), ('Jackson', 'PROPN'), ('.', 'PUNCT')]
>>> ner_tagger = CoreNLPParser('http://localhost:9003', tagtype='ner')
>>> ner_tagger.tag(u'Barack Obama salió con Michael Jackson .'.split())
[('Barack', 'PERSON'), ('Obama', 'PERSON'), ('salió', 'O'), ('con', 'O'), ('Michael', 'PERSON'), ('Jackson', 'PERSON'), ('.', 'O')]
list(parser.raw_parse(text))
atau list(parser.parse(parser.tokenize(text))
. Memperbaiki contoh;)
Ada antarmuka python untuk stanford parser
Halaman perangkat lunak Stanford Core NLP memiliki daftar pembungkus python:
Jika saya ingat dengan baik, parser Stanford adalah pustaka java, oleh karena itu Anda harus memiliki juru bahasa Java yang berjalan di server / komputer Anda.
Saya menggunakannya sekali sebagai server, dikombinasikan dengan skrip php. Skrip menggunakan fungsi exec () dari php untuk membuat panggilan baris perintah ke parser seperti:
<?php
exec( "java -cp /pathTo/stanford-parser.jar -mx100m edu.stanford.nlp.process.DocumentPreprocessor /pathTo/fileToParse > /pathTo/resultFile 2>/dev/null" );
?>
Saya tidak ingat semua detail dari perintah ini, itu pada dasarnya membuka fileToParse, menguraikannya, dan menulis output di resultFile. PHP kemudian akan membuka file hasil untuk digunakan lebih lanjut.
Akhir perintah mengarahkan verbose parser ke NULL, untuk mencegah informasi baris perintah yang tidak perlu mengganggu skrip.
Saya tidak tahu banyak tentang Python, tetapi mungkin ada cara untuk membuat panggilan baris perintah.
Ini mungkin bukan rute yang Anda harapkan, tapi semoga bisa memberi Anda inspirasi. Semoga berhasil.
Perhatikan bahwa jawaban ini berlaku untuk NLTK v 3.0, dan tidak untuk versi yang lebih baru.
Berikut ini adalah adaptasi dari kode hazard98 yang bekerja dengan nltk3.0.0 di windoze, dan mungkin juga platform lain, sesuaikan nama direktori yang sesuai untuk pengaturan Anda:
import os
from nltk.parse import stanford
os.environ['STANFORD_PARSER'] = 'd:/stanford-parser'
os.environ['STANFORD_MODELS'] = 'd:/stanford-parser'
os.environ['JAVAHOME'] = 'c:/Program Files/java/jre7/bin'
parser = stanford.StanfordParser(model_path="d:/stanford-grammars/englishPCFG.ser.gz")
sentences = parser.raw_parse_sents(("Hello, My name is Melroy.", "What is your name?"))
print sentences
Perhatikan bahwa perintah parsing telah berubah (lihat kode sumber di www.nltk.org/_modules/nltk/parse/stanford.html), dan Anda perlu mendefinisikan variabel JAVAHOME. Saya mencoba mendapatkannya untuk membaca file tata bahasa in situ di dalam jar, tetapi sejauh ini gagal melakukannya.
Anda dapat menggunakan keluaran Stanford Parsers untuk membuat Pohon di nltk (nltk.tree.Tree).
Dengan asumsi stanford parser memberi Anda file yang berisi tepat satu pohon parse untuk setiap kalimat. Kemudian contoh ini berhasil, meskipun mungkin tidak terlihat terlalu pythonic:
f = open(sys.argv[1]+".output"+".30"+".stp", "r")
parse_trees_text=[]
tree = ""
for line in f:
if line.isspace():
parse_trees_text.append(tree)
tree = ""
elif "(. ...))" in line:
#print "YES"
tree = tree+')'
parse_trees_text.append(tree)
tree = ""
else:
tree = tree + line
parse_trees=[]
for t in parse_trees_text:
tree = nltk.Tree(t)
tree.__delitem__(len(tree)-1) #delete "(. .))" from tree (you don't need that)
s = traverse(tree)
parse_trees.append(tree)
Perhatikan bahwa jawaban ini berlaku untuk NLTK v 3.0, dan tidak untuk versi yang lebih baru.
Karena tidak ada yang benar-benar menyebutkan dan itu sangat mengganggu saya, berikut adalah cara alternatif untuk menggunakan parser Stanford dengan python:
stanford_parser_jar = '../lib/stanford-parser-full-2015-04-20/stanford-parser.jar'
stanford_model_jar = '../lib/stanford-parser-full-2015-04-20/stanford-parser-3.5.2-models.jar'
parser = StanfordParser(path_to_jar=stanford_parser_jar,
path_to_models_jar=stanford_model_jar)
dengan cara ini, Anda tidak perlu khawatir tentang jalur lagi.
Bagi mereka yang tidak dapat menggunakannya dengan baik di Ubuntu atau menjalankan kode di Eclipse.
Saya menggunakan mesin windows dan Anda dapat menjalankan parser secara normal seperti yang Anda lakukan dari perintah seperti tetapi seperti di direktori yang berbeda sehingga Anda tidak perlu mengedit file lexparser.bat. Letakkan saja di jalur lengkap.
cmd = r'java -cp \Documents\stanford_nlp\stanford-parser-full-2015-01-30 edu.stanford.nlp.parser.lexparser.LexicalizedParser -outputFormat "typedDependencies" \Documents\stanford_nlp\stanford-parser-full-2015-01-30\stanford-parser-3.5.1-models\edu\stanford\nlp\models\lexparser\englishFactored.ser.gz stanfordtemp.txt'
parse_out = os.popen(cmd).readlines()
Bagian yang sulit bagi saya adalah menyadari bagaimana menjalankan program java dari jalur yang berbeda. Pasti ada cara yang lebih baik tapi ini berhasil.
Perhatikan bahwa jawaban ini berlaku untuk NLTK v 3.0, dan tidak untuk versi yang lebih baru.
Sedikit pembaruan (atau hanya alternatif) pada jawaban komprehensif hazard89 tentang penggunaan Stanford Parser di NLTK dan Python
Dengan stanford-parser-full-2015-04-20, JRE 1.8 dan nltk 3.0.4 (python 2.7.6), tampaknya Anda tidak perlu lagi mengekstrak englishPCFG.ser.gz dari stanford-parser-xxx-models .jar atau menyiapkan lingkungan os.en
from nltk.parse.stanford import StanfordParser
english_parser = StanfordParser('path/stanford-parser.jar', 'path/stanford-parser-3.5.2-models.jar')
s = "The real voyage of discovery consists not in seeking new landscapes, but in having new eyes."
sentences = english_parser.raw_parse_sents((s,))
print sentences #only print <listiterator object> for this version
#draw the tree
for line in sentences:
for sentence in line:
sentence.draw()
Perhatikan bahwa jawaban ini berlaku untuk NLTK v 3.0, dan tidak untuk versi yang lebih baru.
Ini adalah jawaban alva versi windows
sentences = ('. '.join(['this is sentence one without a period','this is another foo bar sentence '])+'.').encode('ascii',errors = 'ignore')
catpath =r"YOUR CURRENT FILE PATH"
f = open('stanfordtemp.txt','w')
f.write(sentences)
f.close()
parse_out = os.popen(catpath+r"\nlp_tools\stanford-parser-2010-08-20\lexparser.bat "+catpath+r"\stanfordtemp.txt").readlines()
bracketed_parse = " ".join( [i.strip() for i in parse_out if i.strip() if i.strip()[0] == "("] )
bracketed_parse = "\n(ROOT".join(bracketed_parse.split(" (ROOT")).split('\n')
aa = map(lambda x :ParentedTree.fromstring(x),bracketed_parse)
CATATAN:
Di lexparser.bat
Anda perlu mengubah semua jalur menjadi jalur absolut untuk menghindari kesalahan java seperti "kelas tidak ditemukan"
Saya sangat menyarankan Anda untuk menerapkan metode ini di bawah jendela karena saya Mencoba beberapa jawaban di halaman dan semua metode yang mengkomunikasikan python dengan Java gagal.
ingin mendengar dari Anda jika Anda berhasil di windows dan berharap Anda dapat memberi tahu saya bagaimana Anda mengatasi semua masalah ini.
cari python wrapper untuk stanford coreNLP untuk mendapatkan versi python
Saya membutuhkan waktu berjam-jam dan akhirnya menemukan solusi sederhana untuk pengguna Windows. Pada dasarnya ini adalah versi ringkasan dari jawaban yang ada oleh alva, tetapi dibuat mudah untuk diikuti (mudah-mudahan) bagi mereka yang baru mengenal stanford NLP dan merupakan pengguna Window.
1) Unduh modul yang ingin Anda gunakan, seperti NER, POS, dll. Dalam kasus saya, saya ingin menggunakan NER, jadi saya mengunduh modul dari http://nlp.stanford.edu/software/stanford-ner-2015- 04-20.zip
2) Buka zip file.
3) Atur variabel lingkungan (classpath dan stanford_modules) dari folder yang telah dibuka zipnya.
import os
os.environ['CLASSPATH'] = "C:/Users/Downloads/stanford-ner-2015-04-20/stanford-ner.jar"
os.environ['STANFORD_MODELS'] = "C:/Users/Downloads/stanford-ner-2015-04-20/classifiers/"
4) tetapkan variabel lingkungan untuk JAVA, seperti di tempat Anda menginstal JAVA. bagi saya itu di bawah
os.environ['JAVAHOME'] = "C:/Program Files/Java/jdk1.8.0_102/bin/java.exe"
5) impor modul yang Anda inginkan
from nltk.tag import StanfordNERTagger
6) panggil model pretrained yang ada di folder classifier di folder unzip. tambahkan ".gz" di bagian akhir untuk ekstensi file. bagi saya model yang ingin saya gunakan adalahenglish.all.3class.distsim.crf.ser
st = StanfordNERTagger('english.all.3class.distsim.crf.ser.gz')
7) Sekarang jalankan parser !! dan kita selesai !!
st.tag('Rami Eid is studying at Stony Brook University in NY'.split())
Jawaban di bawah tidak berlaku lagi, gunakan solusi di https://stackoverflow.com/a/51981566/610569 untuk NLTK v3.3 dan yang lebih baru.
Catatan: Jawaban berikut hanya akan berfungsi:
Karena kedua alat berubah agak cepat dan API mungkin terlihat sangat berbeda 3-6 bulan kemudian. Mohon perlakukan jawaban berikut sebagai sementara dan bukan sebagai solusi abadi.
Selalu merujuk ke https://github.com/nltk/nltk/wiki/Installing-Third-Party-Software untuk instruksi terbaru tentang cara menghubungkan alat Stanford NLP menggunakan NLTK !!
Kode berikut berasal dari https://github.com/nltk/nltk/pull/1735#issuecomment-306091826
Di terminal:
wget http://nlp.stanford.edu/software/stanford-corenlp-full-2016-10-31.zip
unzip stanford-corenlp-full-2016-10-31.zip && cd stanford-corenlp-full-2016-10-31
java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer \
-preload tokenize,ssplit,pos,lemma,parse,depparse \
-status_port 9000 -port 9000 -timeout 15000
Dengan Python:
>>> from nltk.tag.stanford import CoreNLPPOSTagger, CoreNLPNERTagger
>>> from nltk.parse.corenlp import CoreNLPParser
>>> stpos, stner = CoreNLPPOSTagger(), CoreNLPNERTagger()
>>> stpos.tag('What is the airspeed of an unladen swallow ?'.split())
[(u'What', u'WP'), (u'is', u'VBZ'), (u'the', u'DT'), (u'airspeed', u'NN'), (u'of', u'IN'), (u'an', u'DT'), (u'unladen', u'JJ'), (u'swallow', u'VB'), (u'?', u'.')]
>>> stner.tag('Rami Eid is studying at Stony Brook University in NY'.split())
[(u'Rami', u'PERSON'), (u'Eid', u'PERSON'), (u'is', u'O'), (u'studying', u'O'), (u'at', u'O'), (u'Stony', u'ORGANIZATION'), (u'Brook', u'ORGANIZATION'), (u'University', u'ORGANIZATION'), (u'in', u'O'), (u'NY', u'O')]
>>> parser = CoreNLPParser(url='http://localhost:9000')
>>> next(
... parser.raw_parse('The quick brown fox jumps over the lazy dog.')
... ).pretty_print() # doctest: +NORMALIZE_WHITESPACE
ROOT
|
S
_______________|__________________________
| VP |
| _________|___ |
| | PP |
| | ________|___ |
NP | | NP |
____|__________ | | _______|____ |
DT JJ JJ NN VBZ IN DT JJ NN .
| | | | | | | | | |
The quick brown fox jumps over the lazy dog .
>>> (parse_fox, ), (parse_wolf, ) = parser.raw_parse_sents(
... [
... 'The quick brown fox jumps over the lazy dog.',
... 'The quick grey wolf jumps over the lazy fox.',
... ]
... )
>>> parse_fox.pretty_print() # doctest: +NORMALIZE_WHITESPACE
ROOT
|
S
_______________|__________________________
| VP |
| _________|___ |
| | PP |
| | ________|___ |
NP | | NP |
____|__________ | | _______|____ |
DT JJ JJ NN VBZ IN DT JJ NN .
| | | | | | | | | |
The quick brown fox jumps over the lazy dog .
>>> parse_wolf.pretty_print() # doctest: +NORMALIZE_WHITESPACE
ROOT
|
S
_______________|__________________________
| VP |
| _________|___ |
| | PP |
| | ________|___ |
NP | | NP |
____|_________ | | _______|____ |
DT JJ JJ NN VBZ IN DT JJ NN .
| | | | | | | | | |
The quick grey wolf jumps over the lazy fox .
>>> (parse_dog, ), (parse_friends, ) = parser.parse_sents(
... [
... "I 'm a dog".split(),
... "This is my friends ' cat ( the tabby )".split(),
... ]
... )
>>> parse_dog.pretty_print() # doctest: +NORMALIZE_WHITESPACE
ROOT
|
S
_______|____
| VP
| ________|___
NP | NP
| | ___|___
PRP VBP DT NN
| | | |
I 'm a dog
Silakan lihat di http://www.nltk.org/_modules/nltk/parse/corenlp.html untuk informasi lebih lanjut tentang API Stanford. Lihatlah docstringsnya!
Perhatikan bahwa jawaban ini berlaku untuk NLTK v 3.0, dan tidak untuk versi yang lebih baru.
Saya tidak dapat meninggalkan ini sebagai komentar karena reputasi, tetapi karena saya menghabiskan (menyia-nyiakan?) Beberapa waktu untuk menyelesaikan ini, saya lebih suka membagikan masalah / solusi saya agar parser ini berfungsi di NLTK.
Dalam jawaban yang sangat bagus dari para alva , disebutkan bahwa:
misalnya untuk Parser, tidak akan ada direktori model.
Hal ini membuat saya salah pada:
STANFORD_MODELS
(dan hanya peduli dengan saya CLASSPATH
)../path/tostanford-parser-full-2015-2012-09/models directory
* hampir kosong * (atau dengan file jar yang namanya tidak cocok dengan nltk regex)!Jika OP, seperti saya, hanya ingin menggunakan parser, mungkin akan membingungkan bahwa ketika tidak mengunduh yang lain (tidak ada POStagger, tidak ada NER, ...) dan mengikuti semua petunjuk ini, kami masih mendapatkan kesalahan.
Akhirnya, untuk yang CLASSPATH
diberikan (berikut contoh dan penjelasan dalam jawaban dari utas ini) saya masih akan mendapatkan kesalahan:
NLTK tidak dapat menemukan stanford-parser - (\ d +) (. (\ D +)) + - models.jar! Setel variabel lingkungan CLASSPATH. Untuk informasi selengkapnya, di stanford-parser - (\ d +) (. (\ D +)) + - models.jar,
lihat: http://nlp.stanford.edu/software/lex-parser.shtml
ATAU:
NLTK tidak dapat menemukan stanford-parser.jar! Setel variabel lingkungan CLASSPATH. Untuk informasi lebih lanjut, di stanford-parser.jar, lihat: http://nlp.stanford.edu/software/lex-parser.shtml
Meskipun , yang terpenting, saya dapat memuat dan menggunakan parser dengan benar jika saya memanggil fungsi dengan semua argumen dan jalur yang ditentukan sepenuhnya, seperti di:
stanford_parser_jar = '../lib/stanford-parser-full-2015-04-20/stanford-parser.jar'
stanford_model_jar = '../lib/stanford-parser-full-2015-04-20/stanfor-parser-3.5.2-models.jar'
parser = StanfordParser(path_to_jar=stanford_parser_jar,
path_to_models_jar=stanford_model_jar)
Oleh karena itu kesalahan berasal NLTK
dan bagaimana itu mencari toples menggunakan variabel yang disediakan STANFORD_MODELS
dan CLASSPATH
lingkungan. Untuk mengatasi ini, *-models.jar
dengan format yang benar (untuk mencocokkan regex dalam NLTK
kode, jadi tidak ada -corenlp -.... jar) harus ditempatkan di folder yang ditunjuk oleh STANFORD_MODELS
.
Yakni, saya pertama kali membuat:
mkdir stanford-parser-full-2015-12-09/models
Kemudian ditambahkan .bashrc
:
export STANFORD_MODELS=/path/to/stanford-parser-full-2015-12-09/models
Dan terakhir, dengan menyalin stanford-parser-3.6.0-models.jar
(atau versi yang sesuai), ke:
path/to/stanford-parser-full-2015-12-09/models/
Saya bisa StanfordParser
memuat dengan lancar di python dengan klasik CLASSPATH
yang menunjuk stanford-parser.jar
. Sebenarnya, dengan demikian, Anda dapat memanggil StanfordParser
tanpa parameter, default hanya akan berfungsi.
Saya menggunakan nltk versi 3.2.4. Dan kode berikut berhasil untuk saya.
from nltk.internals import find_jars_within_path
from nltk.tag import StanfordPOSTagger
from nltk import word_tokenize
# Alternatively to setting the CLASSPATH add the jar and model via their
path:
jar = '/home/ubuntu/stanford-postagger-full-2017-06-09/stanford-postagger.jar'
model = '/home/ubuntu/stanford-postagger-full-2017-06-09/models/english-left3words-distsim.tagger'
pos_tagger = StanfordPOSTagger(model, jar)
# Add other jars from Stanford directory
stanford_dir = pos_tagger._stanford_jar.rpartition('/')[0]
stanford_jars = find_jars_within_path(stanford_dir)
pos_tagger._stanford_jar = ':'.join(stanford_jars)
text = pos_tagger.tag(word_tokenize("Open app and play movie"))
print(text)
Keluaran:
[('Open', 'VB'), ('app', 'NN'), ('and', 'CC'), ('play', 'VB'), ('movie', 'NN')]
Pengembangan baru parser Stanford berdasarkan model neural, dilatih menggunakan Tensorflow, baru-baru ini tersedia untuk digunakan sebagai API python. Model ini seharusnya jauh lebih akurat daripada moel berbasis Java. Anda pasti dapat berintegrasi dengan pipeline NLTK.
Tautkan ke parser. Repositori berisi model parser terlatih untuk 53 bahasa.