Gitter adalah ruang obrolan untuk pengembang.
nlpnet --- pemrosesan bahasa alami dengan jaringan saraf nlpnet adalah perpustakaan Python untuk tugas pemrosesan bahasa alami berdasarkan jaringan saraf. Saat ini, ia melakukan penandaan sebagian, pelabelan peran semantik, dan parsing ketergantungan. Sebagian besar arsitekturnya independen, tetapi beberapa fungsi dirancang khusus untuk bekerja dengan Portugis. Sistem ini terinspirasi oleh Senna.
Penting: Untuk menggunakan model terlatih untuk NLP Portugis, Anda perlu mengunduh data dari http://nilc.icmc.usp.br/nlpnet/models.html.
nlpnet membutuhkan NLTK dan Numpy. Selain itu, perlu mengunduh beberapa data dari NLTK. Setelah menginstalnya, hubungi
>>> nltk.download()
Buka tab Model dan pilih Tokenizer Punkt. Ini digunakan untuk membagi teks menjadi kalimat.
Cython digunakan untuk menghasilkan ekstensi C dan berjalan lebih cepat. Anda mungkin tidak akan membutuhkannya, karena file .c yang dihasilkan sudah disediakan dengan NLPNET, tetapi Anda akan memerlukan kompiler C. Pada sistem Linux dan Mac, ini seharusnya tidak menjadi masalah, tetapi mungkin ada di Windows, karena Setuptools membutuhkan kompiler Microsoft C secara default. Jika Anda belum memilikinya, biasanya lebih mudah untuk menginstal MINGW sebagai gantinya dan mengikuti instruksi di sini.
nlpnet dapat digunakan baik sebagai perpustakaan Python atau dengan skrip mandiri. Kedua penggunaan dijelaskan di bawah ini.
Anda dapat menggunakan nlpnet sebagai perpustakaan dalam kode Python sebagai berikut:
> >> import nlpnet
> >> tagger = nlpnet . POSTagger ( '/path/to/pos-model/' , language = 'pt' )
> >> tagger . tag ( 'O rato roeu a roupa do rei de Roma.' )
[[( u'O' , u'ART' ), ( u'rato' , u'N' ), ( u'roeu' , u'V' ), ( u'a' , u'ART' ), ( u'roupa' , u'N' ), ( u'do' , u'PREP+ART' ), ( u'rei' , u'N' ), ( u'de' , u'PREP' ), ( u'Roma' , u'NPROP' ), ( u'.' , 'PU' )]] Dalam contoh di atas, konstruktor POSTagger menerima sebagai argumen pertama direktori tempat model terlatih berada. Argumen kedua adalah dua kode bahasa huruf (saat ini, Onle pt dan en didukung). Ini hanya berdampak pada tokenisasi.
Memanggil alat anotasi cukup mudah. Yang disediakan adalah POSTagger , SRLTagger dan DependencyParser , semuanya memiliki tag metode yang menerima string dengan teks yang akan ditandai (dalam DependencyParser , ada alias untuk metode parse , yang terdengar lebih memadai). Tagger membagi teks menjadi kalimat dan kemudian menjadi tokenize masing -masing (maka pengembalian postagger adalah daftar daftar).
Output dari srltagger sedikit lebih rumit:
>>> tagger = nlpnet.SRLTagger() >>> tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' ) [<nlpnet.taggers.SRLAnnotatedSentence at 0x84020f0>]
Alih -alih daftar tupel, kalimat diwakili oleh contoh SRLAnnotatedSentence . Kelas ini pada dasarnya berfungsi sebagai pemegang data, dan memiliki dua atribut:
>>> sent = tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' )[ 0 ] >>> sent.tokens [u'O', u'rato', u'roeu', u'a', u'roupa', u'do', u'rei', u'de', u'Roma', u'.'] >>> sent.arg_structures [(u'roeu', {u'A0': [u'O', u'rato'], u'A1': [u'a', u'roupa', u'do', u'rei', u'de', u'Roma'], u'V': [u'roeu']})]
arg_structures adalah daftar yang berisi semua struktur argumen predikat dalam kalimat. Satu -satunya dalam contoh ini adalah untuk kata kerja Roeu. Ini diwakili oleh tuple dengan predikat dan pemetaan kamus label peran semantik ke token yang merupakan argumen.
Perhatikan bahwa kata kerja muncul sebagai anggota pertama dari tuple dan juga sebagai konten label 'V' (yang merupakan kata kerja). Ini karena beberapa predikat adalah multiwords. Dalam kasus ini, kata predikat "utama" (biasanya kata kerja itu sendiri) muncul di arg_structures[0] , dan semua kata muncul di bawah kunci 'V'.
Berikut contoh dengan dependencyparser:
>>> parser = nlpnet.DependencyParser( ' dependency ' , language = ' en ' ) >>> parsed_text = parser.parse( ' The book is on the table. ' ) >>> parsed_text [<nlpnet.taggers.ParsedSentence at 0x10e067f0>] >>> sent = parsed_text[ 0 ] >>> print (sent.to_conll()) 1 The _ DT DT _ 2 NMOD 2 book _ NN NN _ 3 SBJ 3 is _ VBZ VBZ _ 0 ROOT 4 on _ IN IN _ 3 LOC-PRD 5 the _ DT DT _ 6 NMOD 6 table _ NN NN _ 4 PMOD 7 . _ . . _ 3 P
Metode to_conll() dari objek ParsedSentence mencetaknya dalam notasi Conll. Token, label, dan indeks kepala dapat diakses melalui variabel anggota:
>>> sent.tokens [u'The', u'book', u'is', u'on', u'the', u'table', u'.'] >>> sent.heads array([ 1, 2, -1, 2, 5, 3, 2]) >>> sent.labels [u'NMOD', u'SBJ', u'ROOT', u'LOC-PRD', u'NMOD', u'PMOD', u'P']
Variabel anggota heads adalah array numpy. Posisi i-th dalam array berisi indeks kepala token i-th, kecuali untuk token root, yang memiliki kepala -1. Perhatikan bahwa indeks ini berbasis 0, sedangkan yang ditampilkan dalam fungsi to_conll() berbasis 1.
nlpnet juga menyediakan skrip untuk penandaan teks, melatih model baru dan mengujinya. Mereka disalin ke subdirektori skrip dari instalasi python Anda, yang dapat dimasukkan dalam variabel jalur sistem. Anda dapat menghubungi mereka dari baris perintah dan memberikan beberapa input teks.
$ nlpnet-tag.py pos --data /path/to/nlpnet-data/ --lang pt
O rato roeu a roupa do rei de Roma.
O_ART rato_N roeu_V a_ART roupa_N do_PREP+ART rei_N de_PREP Roma_NPROP ._PU Jika --data tidak diberikan, skrip akan mencari model yang terlatih di direktori saat ini. --lang default ke en . Jika Anda memiliki teks yang sudah tokenized, Anda dapat menggunakan opsi -t ; Diasumsikan token dipisahkan oleh ruang putih.
Dengan pelabelan peran semantik:
$ nlpnet-tag.py srl /path/to/nlpnet-data/
O rato roeu a roupa do rei de Roma.
O rato roeu a roupa do rei de Roma .
roeu
A1: a roupa do rei de Roma
A0: O rato
V: roeuBaris pertama diketik oleh pengguna, dan yang kedua adalah hasil tokenisasi.
Dan Parsing Ketergantungan:
$ nlpnet-tag.py dependency --data dependency --lang en
The book is on the table.
1 The _ DT DT _ 2 NMOD
2 book _ NN NN _ 3 SBJ
3 is _ VBZ VBZ _ 0 ROOT
4 on _ IN IN _ 3 LOC-PRD
5 the _ DT DT _ 6 NMOD
6 table _ NN NN _ 4 PMOD
7 . _ . . _ 3 PUntuk mempelajari lebih lanjut tentang melatih dan menguji model baru, dan fungsionalitas lainnya, lihat dokumentasi di http://nilc.icmc.usp.br/nlpnet
Referensi berikut menjelaskan desain NLPNET, serta eksperimen yang dilakukan. Beberapa perbaikan pada kode telah diimplementasikan sejak publikasi mereka.