Paket lingo menyediakan struktur data dan algoritma yang diperlukan untuk pemrosesan bahasa alami.
Secara khusus, ini menyediakan tagger POS ( lingo/pos ), parser ketergantungan ( lingo/dep ), dan tokenizer dasar ( lingo/lexer ) untuk bahasa Inggris. Ini juga menyediakan struktur data untuk memegang korpus ( lingo/corpus ), dan treeBanks ( lingo/treebank ).
Tujuan dari paket ini adalah untuk menyediakan pipa kualitas produksi untuk pemrosesan bahasa alami.
Paketnya go -gettable: go get -u github.com/chewxy/lingo
Paket ini dan subpaknya bergantung pada sangat sedikit paket eksternal. Di sini mereka:
| Kemasan | Digunakan untuk | Daya hidup | Catatan | Lisensi |
|---|---|---|---|---|
| Gorgonia | Pembelajaran Mesin | Vital. Tidak akan sulit untuk menulis ulang mereka, tetapi mengapa? | Penulis yang sama | Lisensi Gorgonia (seperti Apache 2.0) |
| GOGRAPHVIZ | Visualisasi anotasi, dan visualisasi terkait grafik lainnya | Vital untuk visualisasi, yang merupakan fitur yang bagus untuk dimiliki | API Terakhir Berubah 12 April 2017 | Lisensi GOGRAPHVIZ (Apache 2.0) |
| kesalahan | Kesalahan | Paket tidak akan mati tanpanya, tapi itu sangat bagus untuk dimiliki | API yang stabil selama setahun terakhir | Lisensi Kesalahan (Like MIT/BSD) |
| mengatur | Tetapkan operasi | Dapat dengan mudah diganti | API yang stabil selama setahun terakhir | Tetapkan lisensi (mit/bsd) |
Lihat paket individual untuk penggunaan. Ada juga banyak yang dapat dieksekusi di direktori cmd . Mereka dimaksudkan untuk menjadi contoh bagaimana pipa pemrosesan bahasa alami dapat diatur.
Pipa bahasa alami dengan paket ini sangat digerakkan oleh saluran. Inilah contoh untuk parsing ketergantungan:
func main () {
inputString: `The cat sat on the mat`
lx := lexer . New ( "dummy" , strings . NewReader ( inputString )) // lexer - required to break a sentence up into words.
pt := pos . New ( pos . WithModel ( posModel )) // POS Tagger - required to tag the words with a part of speech tag.
dp := dep . New ( depModel ) // Creates a new parser
// set up a pipeline
pt . Input = lx . Output
dp . Input = pt . Output
// run all
go lx . Run ()
go pt . Run ()
go dp . Run ()
// wait to receive:
for {
select {
case d := <- dp . Output :
// do something
case err := <- dp . Error :
// handle error
}
}
}Untuk tugas -tugas tertentu (penandaan POS, parsing, pengenalan entitas yang disebut dll), lihat readme dari setiap subpackage. Paket ini sendiri terutama menyediakan struktur data yang akan digunakan oleh sub -paket.
Mungkin struktur data yang paling penting adalah struktur *Annotation . Ini pada dasarnya memiliki kata dan metadata terkait untuk kata tersebut.
Untuk parse ketergantungan, grafik mengambil tiga bentuk: *Dependency , *DependencyTree dan *Annotation . Ketiga bentuk dapat dikonversi dari satu ke yang lain. TODO: Jelaskan alasan di balik setiap tipe data.
Keunikan tertentu yang mungkin Anda perhatikan adalah bahwa POSTag dan DependencyType yang keras dikodekan sebagai konstanta. Paket ini sebenarnya memberikan dua variasi masing -masing: satu dari Stanford/Penn Treebank dan satu dari Universaldependensi.
Alasan utama untuk hardcoding ini terutama untuk alasan kinerja - mengetahui ke depan berapa banyak untuk dialokasikan mengurangi banyak pekerjaan tambahan yang harus dilakukan program. Ini juga mengurangi kemungkinan bermutasi variabel global.
Tentu saja ini datang sebagai tradeoff - program terbatas pada dua opsi ini. Untungnya hanya ada sejumlah terbatas tag POS dan jenis hubungan ketergantungan. Dua yang paling populer (Stanford/PTB dan ketergantungan universal) telah diimplementasikan.
Tag build berikut didukung:
Untuk menggunakan tagset atau relset tertentu, bangun program Anda dengan demikian: go build -tags='stanfordtags' .
Tag default dan tipe Rel ketergantungan adalah versi dependensi universal.
Anda juga harus mencatat bahwa tokenizer, lingo/lexer bukanlah tokenizer NLP yang biasa Anda lakukan. Ini adalah tokenizer yang tokenisasi demi ruang, dengan beberapa aturan khusus untuk bahasa Inggris. Itu terinspirasi oleh pembicaraan Rob Pike tentang Lexers. Saya pikir akan keren untuk menulis sesuatu seperti itu untuk NLP.
Kasus uji dalam lingo/lexer menampilkan bagaimana menangani unicode, dan bahasa Inggris patalogis lainnya.
Lihat Kontribusi.MD untuk info lebih lanjut
Paket ini dilisensikan di bawah lisensi MIT.