Package lingo จัดเตรียมโครงสร้างข้อมูลและอัลกอริทึมที่จำเป็นสำหรับการประมวลผลภาษาธรรมชาติ
โดยเฉพาะอย่างยิ่งมันให้ POS tagger ( lingo/pos ), ตัวแยกวิเคราะห์การพึ่งพา ( lingo/dep ) และ tokenizer ขั้นพื้นฐาน ( lingo/lexer ) สำหรับภาษาอังกฤษ นอกจากนี้ยังมีโครงสร้างข้อมูลสำหรับการถือคลังข้อมูล ( lingo/corpus ) และ Treybanks ( lingo/treebank )
เป้าหมายของแพ็คเกจนี้คือการจัดหาท่อส่งคุณภาพการผลิตสำหรับการประมวลผลภาษาธรรมชาติ
แพ็คเกจนี้เป็นไปได้: go get -u github.com/chewxy/lingo
แพ็คเกจนี้และแพ็คเกจย่อยขึ้นอยู่กับแพ็คเกจภายนอกน้อยมาก ที่นี่พวกเขาคือ:
| บรรจุุภัณฑ์ | ใช้สำหรับ | ความมีชีวิตชีวา | หมายเหตุ | ใบอนุญาต |
|---|---|---|---|---|
| Gorgonia | การเรียนรู้ของเครื่องจักร | สำคัญยิ่ง. มันจะไม่ยากที่จะเขียนใหม่ แต่ทำไม? | ผู้เขียนเดียวกัน | ใบอนุญาต Gorgonia (Apache 2.0-like) |
| Goggraphviz | การสร้างภาพคำอธิบายประกอบและการสร้างภาพข้อมูลที่เกี่ยวข้องกับกราฟอื่น ๆ | สำคัญสำหรับการสร้างภาพซึ่งเป็นคุณสมบัติที่ดีในการมี | API เปลี่ยนล่าสุด 12 เมษายน 2017 | ใบอนุญาต Gographviz (Apache 2.0) |
| ข้อผิดพลาด | ข้อผิดพลาด | แพ็คเกจจะไม่ตายหากไม่มีมัน แต่ก็ดีมากที่มี | API ที่มั่นคงสำหรับปีที่ผ่านมา | ใบอนุญาตข้อผิดพลาด (MIT/BSD ชอบ) |
| ชุด | ตั้งค่าการดำเนินงาน | สามารถเปลี่ยนได้อย่างง่ายดาย | API ที่มั่นคงสำหรับปีที่ผ่านมา | ตั้งค่าใบอนุญาต (MIT/BSD-like) |
ดูแต่ละแพ็คเกจสำหรับการใช้งาน นอกจากนี้ยังมีกลุ่มผู้ดำเนินการในไดเรกทอรี cmd พวกเขาตั้งใจจะเป็นตัวอย่างว่าสามารถตั้งค่าท่อส่งภาษาธรรมชาติได้อย่างไร
ไปป์ไลน์ภาษาธรรมชาติที่มีแพ็คเกจนี้เป็นช่องทางที่ขับเคลื่อนด้วย นี่คือตัวอย่างสำหรับการแยกวิเคราะห์การพึ่งพา:
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
}
}
}สำหรับงานที่เฉพาะเจาะจง (การติดแท็ก POS การแยกวิเคราะห์ชื่อการจดจำเอนทิตี ฯลฯ ) โปรดดูที่ readMe ของแต่ละแพ็คเกจย่อย แพ็คเกจนี้ส่วนใหญ่จะให้โครงสร้างข้อมูลที่แพ็คเกจย่อยจะใช้
บางทีโครงสร้างข้อมูลที่สำคัญที่สุดคือโครงสร้าง *Annotation โดยทั่วไปแล้วมันถือคำและข้อมูลเมตาที่เกี่ยวข้องสำหรับคำ
สำหรับการพึ่งพาอาศัยการพึ่งพากราฟมีสามรูปแบบ: *Dependency , *DependencyTree และ *Annotation * ทั้งสามรูปแบบสามารถแปลงจากหนึ่งไปอีกรูปแบบหนึ่ง TODO: อธิบายเหตุผลที่อยู่เบื้องหลังแต่ละประเภทข้อมูล
การเล่นโวหารโดยเฉพาะที่คุณอาจสังเกตเห็นว่า POSTag และ DependencyType เป็นรหัสที่ยากในค่าคงที่ ในความเป็นจริงแพ็คเกจนี้มีสองรูปแบบของแต่ละรูปแบบ: หนึ่งจาก Stanford/Penn Treebank และอีกหนึ่งจาก Universaldependencies
เหตุผลหลักสำหรับการเข้ารหัสภาพเหล่านี้ส่วนใหญ่เป็นเหตุผลด้านประสิทธิภาพ - การรู้ล่วงหน้าว่าการจัดสรรจะช่วยลดงานเพิ่มเติมจำนวนมากที่โปรแกรมต้องทำ นอกจากนี้ยังช่วยลดโอกาสในการกลายพันธุ์ตัวแปรทั่วโลก
แน่นอนว่าสิ่งนี้มาจากการแลกเปลี่ยน - โปรแกรมถูก จำกัด ไว้ที่สองตัวเลือกนี้ โชคดีที่มีแท็ก POS จำนวน จำกัด และประเภทความสัมพันธ์แบบพึ่งพา สองคนที่ได้รับความนิยมมากที่สุด (Stanford/PTB และการพึ่งพาสากล) ได้รับการดำเนินการแล้ว
รองรับแท็กบิลด์ต่อไปนี้:
หากต้องการใช้แท็กเซ็ตหรือรีเฟรชเฉพาะสร้างโปรแกรมของคุณดังนั้น: go build -tags='stanfordtags'
แท็กเริ่มต้นและประเภท REL การพึ่งพาเป็นเวอร์ชันการพึ่งพาสากล
คุณควรทราบด้วยว่า Tokenizer, lingo/lexer ไม่ใช่ Tokenizer NLP ที่ทำงานตามปกติของคุณ มันเป็นโทเค็นที่มีความเป็นไปได้ที่จะใช้พื้นที่โดยมีกฎเฉพาะสำหรับภาษาอังกฤษ มันได้รับแรงบันดาลใจจากการพูดคุยของ Rob Pike เกี่ยวกับ Lexers ฉันคิดว่ามันจะเจ๋งที่จะเขียนอะไรแบบนั้นสำหรับ NLP
กรณีทดสอบในแพ็คเกจ lingo/lexer แสดงให้เห็นว่ามันจัดการกับ Unicode และภาษาอังกฤษ pathalogical อื่น ๆ ได้อย่างไร
โปรดดูข้อมูลเพิ่มเติมสำหรับข้อมูลเพิ่มเติม
แพ็คเกจนี้ได้รับใบอนุญาตภายใต้ใบอนุญาต MIT