Gitter เป็นห้องสนทนาสำหรับนักพัฒนา
nlpnet --- การประมวลผลภาษาธรรมชาติด้วยเครือข่ายประสาท nlpnet เป็นห้องสมุด Python สำหรับงานการประมวลผลภาษาธรรมชาติตามเครือข่ายประสาท ปัจจุบันมันดำเนินการติดแท็กส่วนหนึ่งของคำพูดการติดฉลากบทบาทความหมายและการแยกวิเคราะห์การพึ่งพา สถาปัตยกรรมส่วนใหญ่เป็นภาษาที่เป็นอิสระ แต่ฟังก์ชั่นบางอย่างได้รับการปรับแต่งเป็นพิเศษสำหรับการทำงานกับภาษาโปรตุเกส ระบบนี้ได้รับแรงบันดาลใจจาก Senna
สำคัญ: ในการใช้โมเดลที่ผ่านการฝึกอบรมสำหรับ Portuguese NLP คุณจะต้องดาวน์โหลดข้อมูลจาก http://nilc.icmc.usp.br/nlpnet/models.html
nlpnet ต้องการ NLTK และ NUMPY นอกจากนี้ยังต้องดาวน์โหลดข้อมูลบางส่วนจาก NLTK หลังจากติดตั้งแล้วโทร
>>> nltk.download()
ไปที่แท็บรุ่นและเลือก Punkt Tokenizer มันถูกใช้เพื่อแยกข้อความออกเป็นประโยค
Cython ใช้เพื่อสร้างส่วนขยาย C และทำงานได้เร็วขึ้น คุณอาจไม่ต้องการมันเนื่องจากไฟล์ .c ที่สร้างขึ้นนั้นมีให้กับ NLPNET แล้ว แต่คุณจะต้องมีคอมไพเลอร์ C บนระบบ Linux และ Mac สิ่งนี้ไม่ควรเป็นปัญหา แต่อาจอยู่บน Windows เนื่องจาก Setuptools ต้องการคอมไพเลอร์ Microsoft C โดยค่าเริ่มต้น หากคุณยังไม่มีมันมักจะติดตั้ง MingW แทนและทำตามคำแนะนำที่นี่
nlpnet สามารถใช้ได้ทั้งเป็นห้องสมุด Python หรือสคริปต์แบบสแตนด์อโลน การใช้งานทั้งสองมีการอธิบายด้านล่าง
คุณสามารถใช้ nlpnet เป็นไลบรารีในรหัส Python ได้ดังนี้:
> >> 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' )]] ในตัวอย่างข้างต้นตัวสร้าง POSTagger ได้รับเป็นอาร์กิวเมนต์แรกของไดเรกทอรีที่มีรูปแบบที่ผ่านการฝึกอบรมอยู่ อาร์กิวเมนต์ที่สองคือรหัสภาษาตัวอักษรสองตัว (ปัจจุบันรองรับ onle pt และ en ) สิ่งนี้มีผลกระทบในการโทเค็น
การเรียกเครื่องมือคำอธิบายประกอบนั้นค่อนข้างตรงไปตรงมา สิ่งที่ให้ไว้คือ POSTagger , SRLTagger และ DependencyParser พวกเขาทั้งหมดมี tag วิธีการที่ได้รับสตริงที่มีข้อความที่จะติดแท็ก (ใน DependencyParser มีนามแฝงใน parse วิธีการซึ่งฟังดูเพียงพอ) แท็กจะแยกข้อความออกเป็นประโยคแล้วทำให้แต่ละคน (ดังนั้นการกลับมาของ Postagg เป็นรายการของรายการ)
ผลลัพธ์ของ srltagger นั้นซับซ้อนกว่าเล็กน้อย:
>>> tagger = nlpnet.SRLTagger() >>> tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' ) [<nlpnet.taggers.SRLAnnotatedSentence at 0x84020f0>]
แทนที่จะเป็นรายการของ tuples ประโยคจะถูกแสดงโดยอินสแตนซ์ของ SRLAnnotatedSentence คลาสนี้ทำหน้าที่เป็นเจ้าของข้อมูลและมีสองแอตทริบิวต์:
>>> 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 เป็นรายการที่มีโครงสร้างการโต้แย้งทั้งหมดในประโยค สิ่งเดียวในตัวอย่างนี้คือคำกริยา roeu มันเป็นตัวแทนของ tuple ที่มีเพรดิเคตและพจนานุกรมการทำแผนที่ความหมายบทบาทความหมายไปยังโทเค็นที่เป็นข้อโต้แย้ง
โปรดทราบว่าคำกริยาปรากฏเป็นสมาชิกคนแรกของ tuple และเป็นเนื้อหาของฉลาก 'V' (ซึ่งหมายถึงคำกริยา) นี่เป็นเพราะภาคการศึกษาบางส่วนเป็นหลายคำ ในกรณีเหล่านี้คำว่า "หลัก" (โดยปกติคำกริยาเอง) จะปรากฏใน arg_structures[0] และคำทั้งหมดจะปรากฏภายใต้คีย์ 'V'
นี่คือตัวอย่างที่มีผู้พึ่งพา:
>>> 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
วิธี to_conll() วัตถุแยกวิเคราะห์วัตถุพิมพ์ในสัญกรณ์ conll โทเค็นฉลากและดัชนีหัวสามารถเข้าถึงได้ผ่านตัวแปรสมาชิก:
>>> 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']
ตัวแปรสมาชิก heads คืออาร์เรย์ NumPy ตำแหน่ง i-th ในอาร์เรย์มีดัชนีของหัวของโทเค็น i-th ยกเว้นโทเค็นรากซึ่งมีหัว -1 ขอให้สังเกตว่าดัชนีเหล่านี้เป็นแบบ 0 ในขณะที่รายการที่แสดงในฟังก์ชั่น to_conll() นั้นใช้ 1
nlpnet ยังมีสคริปต์สำหรับการติดแท็กข้อความฝึกอบรมรุ่นใหม่และทดสอบ พวกเขาจะถูกคัดลอกไปยังไดเรกทอรีย่อยสคริปต์ของการติดตั้ง Python ของคุณซึ่งสามารถรวมอยู่ในตัวแปรเส้นทางระบบ คุณสามารถโทรหาพวกเขาได้จากบรรทัดคำสั่งและให้อินพุตข้อความ
$ 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 หากไม่ได้รับ --data สคริปต์จะค้นหาโมเดลที่ผ่านการฝึกอบรมในไดเรกทอรีปัจจุบัน --lang ค่าเริ่ม en เป็น en หากคุณมีข้อความอยู่แล้วคุณสามารถใช้ตัวเลือก -t ; มันถือว่าโทเค็นถูกคั่นด้วยช่องว่าง
ด้วยการติดฉลากบทบาทความหมาย:
$ 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: roeuบรรทัดแรกถูกพิมพ์โดยผู้ใช้และบรรทัดที่สองเป็นผลมาจากการโทเค็น
และการแยกวิเคราะห์การพึ่งพา:
$ 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 Pหากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการฝึกอบรมและทดสอบโมเดลใหม่และฟังก์ชันอื่น ๆ โปรดดูเอกสารที่ http://nilc.icmc.usp.br/nlpnet
การอ้างอิงต่อไปนี้อธิบายการออกแบบของ NLPNET รวมถึงการทดลองที่ดำเนินการ การปรับปรุงรหัสบางอย่างได้ถูกนำมาใช้ตั้งแต่สิ่งพิมพ์ของพวกเขา