Artikel ini ditujukan bagi mereka yang belum pernah bekerja dengan Stanford nlp dan dihadapkan dengan kebutuhan untuk mempelajarinya dan menerapkannya sesegera mungkin.
Perangkat lunak ini sangat umum, dan, khususnya, perusahaan kami -
BaltInfoCom - menggunakan program ini.
Pertama, Anda perlu memahami hal sederhana: Stanford NLP bekerja berdasarkan prinsip kata-kata yang memberi penjelasan, yaitu, satu atau lebih penjelasan, seperti POS (Bagian dari Pidato - bagian dari pembicaraan), NER (Pengenal Entitas Bernama - Entitas Bernama), dan dll.
Hal pertama yang dilihat seorang pemula ketika ia pergi ke situs web Stanford NLP di bagian "
mulai cepat " adalah desain berikut:
Properties props = new Properties(); props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner,regexner,parse,depparse,coref"); StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
Di sini StanfordCoreNLP adalah sebuah konveyor, ke input yang teksnya telah dipaket sebelumnya menjadi objek CoreDocument. StanfordCoreNLP, ini adalah objek yang paling penting dan sering digunakan dalam seluruh struktur, yang dengannya semua pekerjaan utama dilakukan.
Pertama, kita mengatur parameter di StanfordCoreNLP dan mengindikasikan implementasi tindakan apa yang kita butuhkan. Selain itu, semua kemungkinan kombinasi parameter ini dapat ditemukan di situs web resmi di tautan
ini .
- tokenize - sesuai, tokenization
- ssplit - membelah menjadi sebuah kalimat
- pos - definisi bagian dari pidato
- lemma - menambahkan setiap kata bentuk awal
- ner - definisi entitas bernama, seperti "Organisasi", "Wajah", dll.
- regexner - mendefinisikan entitas bernama menggunakan ekspresi reguler
- parse - analisis setiap kata sesuai dengan semantik (jenis kelamin, angka, dan sebagainya)
- depparse - parse dependensi sintaksis antara kata-kata dalam sebuah kalimat
- coref- mencari referensi untuk entitas bernama yang sama dalam teks, misalnya, "Mary" dan "dia"
Berikut adalah contoh cara kerja annotator (parse dan depparse):

Jika Anda tidak memahami anotasi tentang token, maka di situs-situs ini Anda akan menemukan artinya:
makna koneksi dalam kalimat ,
makna bagian ucapan .
Untuk masing-masing parameter ini, Anda dapat menemukan flag tambahan untuk fine-tuning di
sini di bagian "Annotators".
Konstruksi ini ditetapkan jika Anda ingin menggunakan model NLP Stanford bawaan, tetapi Anda juga dapat mengaturnya secara manual menggunakan metode addAnnotator (Annotator ...) atau dengan mengisi ulang parameter sebelum membuat objek StanfordCoreNLP.
Sekarang tentang bagaimana Anda dapat mengekstraksi entitas bernama dari teks. Untuk melakukan ini, Stanford NLP memiliki tiga kelas berbasis ekspresi reguler dan satu kelas untuk menandai token melalui model.
Kelas Ekspresi Reguler:
- TokensRegexAnnotator - annotator yang bekerja sesuai aturan - SequenceMatchRules .
Pertimbangkan contoh pemetaan untuknya, dibuat berdasarkan aturan ini.
ner = { type: "CLASS", value: "edu.stanford.nlp.ling.CoreAnnotations$NamedEntityTagAnnotation" } $EMAIL = "/.*([A-z0-9-]+?)(@)([A-z0-9-]+?).*/" { ruleType: "tokens", pattern: (([]) ($EMAIL)), action: (Annotate($0, ner, "MAIL")), priority:0 }
Baris pertama menunjukkan jenis tag apa yang akan kami isi dalam templat ini.
Di yang kedua, kita membuat variabel, yang menurut aturan harus dimulai dengan karakter "$" dan berada di awal baris.
Setelah itu, buat blok di mana kita mengatur jenis aturan. Kemudian templat untuk perbandingan (dalam kasus kami, kami mengatakan bahwa kami memerlukan "[]" - token apa pun setelah variabel kami $ EMAIL berjalan. Setelah itu kami menetapkan tindakan, dalam kasus kami, kami ingin memberi anotasi token.
Harap perhatikan bahwa dalam contoh, “[]” dan “$ EMAIL” terlampir dalam tanda kurung karena $ 0 menunjukkan grup tangkap mana yang ingin kami sorot dari pola yang ditemukan, sedangkan grup tangkap berarti grup yang diapit tanda kurung. Jika Anda menetapkan 0, maka dalam frasa “sobaka@mail.ru mail” semua token akan dijelaskan sebagai “MAIL”. Jika Anda menetapkan 1 (yaitu, grup tangkap pertama), maka hanya kata "mail" yang akan dianotasi; jika 2, maka hanya sobaka@mail.ru.
Untuk situasi di mana, menurut dua aturan, token yang sama dapat didefinisikan secara berbeda, Anda dapat mengatur prioritas aturan relatif terhadap yang lain. Misalnya, dalam hal frasa berikut - "House $ 25", mungkin ada dua aturan yang saling bertentangan, yang menurut salah satu dari itu angka 25 akan ditentukan sebagai jumlah rumah, dan menurut yang kedua - sebagai nilainya. - RegexNERAnnotator - Annotator ini berfungsi menggunakan RegexNERSequenceClassifier .
Pemetaan untuknya adalah sebagai berikut
regex1 TYPE overwritableType1,Type2... priority
Berikut regex1 adalah ekspresi reguler dalam format TokenSequencePattern .
TYPE adalah nama entitas yang dinamai.
overwritableType1, Type2 ... - jenis yang bisa kita ganti jika ada situasi yang kontroversial.
Prioritas - prioritas untuk perselisihan yang dijelaskan di atas.
Harap dicatat bahwa dalam pemetaan ini semua kolom harus dipisahkan oleh tab. - TokensRegexNERAnnotator
Annotator ini berbeda dari yang sebelumnya karena menggunakan pustaka TokensRegex untuk ekspresi reguler, sama seperti annotator pertama, yang memungkinkan Anda untuk menggunakan aturan yang lebih fleksibel untuk pencocokan; serta mampu merekam nilai tag selain tag NER.
Pemetaan untuk itu dikompilasi sesuai dengan aturan RegexNERAnnotator
Menandai teks melalui model menggunakan NERClassifierCombiner
Untuk menggunakan kelas ini, Anda harus terlebih dahulu memiliki atau melatih model Anda.
Cara melakukan ini dapat ditemukan di
sini ;
Setelah Anda melatih model, tetap hanya untuk membuat NERClassifierCombiner, menunjukkan jalur ke model di dalamnya, dan memanggil metode mengklasifikasikan.
NERClassifierCombiner classifier = new NERClassifierCombiner(false, false, serialized_model); String text = "Some lucky people working in BaltInfoCom Org."; List<List<CoreLabel>> out = classifier.classify(text);
Daftar lengkap annotator dapat ditemukan di
sini .
Selain yang di atas, jika Anda perlu menggunakan Stanford NLP untuk bahasa Rusia, saya dapat menyarankan Anda untuk datang ke
sini . Ada model untuk mengidentifikasi bagian-bagian ucapan (tag-tagger) dan untuk mengidentifikasi hubungan dalam kalimat (parser ketergantungan).
Jenis tag yang ditampilkan di sana:
Russian-ud-pos.tagger hanyalah sebuah tagger,
russian-ud-mfmini.tagger - dengan daftar utama fitur morfologi,
russian-ud-mf.tagger - dengan daftar lengkap fitur morfologis, contoh pemetaan yang dapat dilihat di
sini .