OpenNLP - คู่มือฉบับย่อ
NLP เป็นชุดเครื่องมือที่ใช้ในการรับข้อมูลที่มีความหมายและเป็นประโยชน์จากแหล่งภาษาธรรมชาติเช่นหน้าเว็บและเอกสารข้อความ
Open NLP คืออะไร?
Apache OpenNLPเป็นไลบรารี Java โอเพ่นซอร์สซึ่งใช้ในการประมวลผลข้อความภาษาธรรมชาติ คุณสามารถสร้างบริการประมวลผลข้อความที่มีประสิทธิภาพโดยใช้ไลบรารีนี้
OpenNLP ให้บริการต่างๆเช่นการสร้างโทเค็นการแบ่งส่วนประโยคการติดแท็กส่วนของคำพูดการแยกเอนทิตีที่ตั้งชื่อการแบ่งกลุ่มการแยกวิเคราะห์และการแก้ปัญหาการอ้างอิงร่วมเป็นต้น
คุณสมบัติของ OpenNLP
ต่อไปนี้เป็นคุณสมบัติเด่นของ OpenNLP -
Named Entity Recognition (NER) - Open NLP รองรับ NER ซึ่งคุณสามารถแยกชื่อสถานที่บุคคลและสิ่งต่างๆได้แม้ในขณะประมวลผลคำค้นหา
Summarize - การใช้ไฟล์ summarize คุณสามารถสรุปย่อหน้าบทความเอกสารหรือคอลเล็กชันใน NLP
Searching - ใน OpenNLP สตริงค้นหาที่กำหนดหรือคำพ้องความหมายสามารถระบุได้ในข้อความที่กำหนดแม้ว่าคำที่ระบุจะถูกเปลี่ยนแปลงหรือสะกดผิด
Tagging (POS) - การติดแท็กใน NLP ใช้เพื่อแบ่งข้อความออกเป็นองค์ประกอบทางไวยากรณ์ต่างๆเพื่อการวิเคราะห์เพิ่มเติม
Translation - ใน NLP การแปลช่วยในการแปลภาษาหนึ่งเป็นอีกภาษาหนึ่ง
Information grouping - ตัวเลือกนี้ใน NLP จะจัดกลุ่มข้อมูลที่เป็นข้อความในเนื้อหาของเอกสารเช่นเดียวกับบางส่วนของคำพูด
Natural Language Generation - ใช้สำหรับสร้างข้อมูลจากฐานข้อมูลและรายงานข้อมูลโดยอัตโนมัติเช่นการวิเคราะห์สภาพอากาศหรือรายงานทางการแพทย์
Feedback Analysis - ตามความหมายของชื่อจะมีการรวบรวมการตอบรับจากผู้คนหลายประเภทเกี่ยวกับผลิตภัณฑ์โดย NLP เพื่อวิเคราะห์ว่าผลิตภัณฑ์ประสบความสำเร็จในการเอาชนะใจพวกเขาได้ดีเพียงใด
Speech recognition - แม้ว่าจะเป็นการยากที่จะวิเคราะห์คำพูดของมนุษย์ แต่ NLP ก็มีคุณสมบัติในตัวสำหรับข้อกำหนดนี้
เปิด NLP API
ไลบรารี Apache OpenNLP มีคลาสและอินเทอร์เฟซเพื่อดำเนินการต่างๆของการประมวลผลภาษาธรรมชาติเช่นการตรวจจับประโยคการสร้างโทเค็นการค้นหาชื่อการติดแท็กส่วนของคำพูดการแบ่งประโยคการแยกวิเคราะห์การแก้ปัญหาการอ้างอิงร่วมและการจัดหมวดหมู่เอกสาร
นอกเหนือจากงานเหล่านี้แล้วเรายังสามารถฝึกอบรมและประเมินโมเดลของเราเองสำหรับงานเหล่านี้ได้อีกด้วย
OpenNLP CLI
นอกจากไลบรารีแล้ว OpenNLP ยังมี Command Line Interface (CLI) ซึ่งเราสามารถฝึกอบรมและประเมินโมเดลได้ เราจะพูดถึงหัวข้อนี้โดยละเอียดในบทสุดท้ายของบทช่วยสอนนี้
เปิด NLP Models
ในการดำเนินงาน NLP ต่างๆ OpenNLP มีชุดของโมเดลที่กำหนดไว้ล่วงหน้า ชุดนี้ประกอบด้วยโมเดลสำหรับภาษาต่างๆ
กำลังดาวน์โหลดโมเดล
คุณสามารถทำตามขั้นตอนที่ระบุด้านล่างเพื่อดาวน์โหลดโมเดลที่กำหนดไว้ล่วงหน้าจาก OpenNLP
Step 1 - เปิดหน้าดัชนีของโมเดล OpenNLP โดยคลิกที่ลิงค์ต่อไปนี้ - http://opennlp.sourceforge.net/models-1.5/.
Step 2- ในการเยี่ยมชมลิงก์ที่ระบุคุณจะเห็นรายการส่วนประกอบของภาษาต่างๆและลิงก์สำหรับดาวน์โหลด ที่นี่คุณจะได้รับรายชื่อรุ่นที่กำหนดไว้ล่วงหน้าทั้งหมดที่ OpenNLP มีให้
ดาวน์โหลดโมเดลเหล่านี้ทั้งหมดลงในโฟลเดอร์ C:/OpenNLP_models/>โดยคลิกที่ลิงค์ที่เกี่ยวข้อง โมเดลทั้งหมดนี้ขึ้นอยู่กับภาษาและในขณะที่ใช้สิ่งเหล่านี้คุณต้องตรวจสอบให้แน่ใจว่าภาษาของโมเดลนั้นตรงกับภาษาของข้อความที่ป้อน
ประวัติ OpenNLP
ในปี 2010 OpenNLP เข้าสู่การบ่มเพาะ Apache
ในปี 2554 Apache OpenNLP 1.5.2 Incubating ได้รับการเผยแพร่และในปีเดียวกันนั้นได้สำเร็จการศึกษาเป็นโครงการ Apache ระดับบนสุด
ในปี 2015 OpenNLP เปิดตัว 1.6.0
ในบทนี้เราจะพูดถึงวิธีการตั้งค่าสภาพแวดล้อม OpenNLP ในระบบของคุณ มาเริ่มขั้นตอนการติดตั้งกันเลย
การติดตั้ง OpenNLP
ต่อไปนี้เป็นขั้นตอนในการดาวน์โหลด Apache OpenNLP library ในระบบของคุณ
Step 1 - เปิดหน้าแรกของ Apache OpenNLP โดยคลิกที่ลิงค์ต่อไปนี้ - https://opennlp.apache.org/.
Step 2 - ตอนนี้คลิกที่ไฟล์ Downloadsลิงค์ เมื่อคลิกคุณจะถูกนำไปยังหน้าที่คุณสามารถค้นหามิเรอร์ต่างๆซึ่งจะนำคุณไปยังไดเร็กทอรี Apache Software Foundation Distribution
Step 3- ในหน้านี้คุณจะพบลิงค์สำหรับดาวน์โหลดการแจกแจง Apache ต่างๆ เรียกดูพวกเขาและค้นหาการแจกจ่าย OpenNLP แล้วคลิก
Step 4 - เมื่อคลิกคุณจะถูกเปลี่ยนเส้นทางไปยังไดเร็กทอรีที่คุณสามารถดูดัชนีของการแจกจ่าย OpenNLP ดังที่แสดงด้านล่าง
คลิกที่เวอร์ชันล่าสุดจากการแจกแจงที่มีอยู่
Step 5- การแจกจ่ายแต่ละรายการจะให้ไฟล์ Source และ Binary ของไลบรารี OpenNLP ในรูปแบบต่างๆ ดาวน์โหลดซอร์สและไฟล์ไบนารีapache-opennlp-1.6.0-bin.zip และ apache-opennlp1.6.0-src.zip (สำหรับ Windows)
การตั้งค่า Classpath
หลังจากดาวน์โหลดไลบรารี OpenNLP คุณต้องกำหนดเส้นทางไปที่ไฟล์ binไดเรกทอรี สมมติว่าคุณดาวน์โหลดไลบรารี OpenNLP ไปยังไดรฟ์ E ของระบบของคุณ
ตอนนี้ทำตามขั้นตอนที่ระบุด้านล่าง -
Step 1 - คลิกขวาที่ 'My Computer' และเลือก 'Properties'
Step 2 - คลิกที่ปุ่ม 'Environment Variables' ใต้แท็บ 'Advanced'
Step 3 - เลือกไฟล์ path และคลิกที่ไฟล์ Edit ดังที่แสดงในภาพหน้าจอต่อไปนี้
Step 4 - ในหน้าต่าง Edit Environment Variable คลิกที่ไฟล์ New ปุ่มและเพิ่มเส้นทางสำหรับไดเร็กทอรี OpenNLP E:\apache-opennlp-1.6.0\bin แล้วคลิกไฟล์ OK ดังที่แสดงในภาพหน้าจอต่อไปนี้
การติดตั้ง Eclipse
คุณสามารถตั้งค่าสภาวะแวดล้อม Eclipse สำหรับไลบรารี OpenNLP ได้โดยการตั้งค่า Build path ไปยังไฟล์ JAR หรือโดยใช้ pom.xml.
การตั้งค่า Build Path ไปยังไฟล์ JAR
ทำตามขั้นตอนด้านล่างเพื่อติดตั้ง OpenNLP ใน Eclipse -
Step 1 - ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งสภาพแวดล้อม Eclipse ในระบบของคุณ
Step 2- เปิด Eclipse คลิกไฟล์→ใหม่→เปิดโปรเจ็กต์ใหม่ดังที่แสดงด้านล่าง
Step 3 - คุณจะได้รับไฟล์ New Projectตัวช่วย ในวิซาร์ดนี้เลือกโปรเจ็กต์ Java และดำเนินการต่อโดยคลิกที่ไฟล์Next ปุ่ม.
Step 4 - ถัดไปคุณจะได้รับไฟล์ New Java Project wizard. ที่นี่คุณต้องสร้างโครงการใหม่แล้วคลิกไฟล์Next ดังที่แสดงด้านล่าง
Step 5 - หลังจากสร้างโครงการใหม่ให้คลิกขวาที่โครงการแล้วเลือก Build Path แล้วคลิก Configure Build Path.
Step 6 - ถัดไปคุณจะได้รับไฟล์ Java Build Pathตัวช่วย คลิกที่นี่Add External JARs ดังที่แสดงด้านล่าง
Step 7 - เลือกไฟล์ jar opennlp-tools-1.6.0.jar และ opennlp-uima-1.6.0.jar อยู่ใน lib โฟลเดอร์ของ apache-opennlp-1.6.0 folder.
เมื่อคลิกที่ไฟล์ Open ในหน้าจอด้านบนไฟล์ที่เลือกจะถูกเพิ่มลงในไลบรารีของคุณ
เมื่อคลิก OKคุณจะเพิ่มไฟล์ JAR ที่จำเป็นลงในโปรเจ็กต์ปัจจุบันได้สำเร็จและคุณสามารถตรวจสอบไลบรารีที่เพิ่มเหล่านี้ได้โดยการขยายไลบรารีอ้างอิงดังที่แสดงด้านล่าง
ใช้ pom.xml
แปลงโครงการเป็นโครงการ Maven และเพิ่มรหัสต่อไปนี้ในไฟล์ pom.xml.
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>myproject</groupId>
<artifactId>myproject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.opennlp</groupId>
<artifactId>opennlp-tools</artifactId>
<version>1.6.0</version>
</dependency>
<dependency>
<groupId>org.apache.opennlp</groupId>
<artifactId>opennlp-uima</artifactId>
<version>1.6.0</version>
</dependency>
</dependencies>
</project>
ในบทนี้เราจะพูดถึงคลาสและวิธีการที่เราจะใช้ในบทต่อ ๆ ไปของบทช่วยสอนนี้
การตรวจจับประโยค
คลาส SentenceModel
คลาสนี้แสดงถึงโมเดลที่กำหนดไว้ล่วงหน้าซึ่งใช้ในการตรวจจับประโยคในข้อความดิบที่กำหนด คลาสนี้เป็นของแพ็คเกจopennlp.tools.sentdetect.
ตัวสร้างของคลาสนี้ยอมรับไฟล์ InputStream อ็อบเจ็กต์ของไฟล์โมเดลตัวตรวจจับประโยค (en-sent.bin)
คลาส SentenceDetectorME
คลาสนี้เป็นของแพ็คเกจ opennlp.tools.sentdetectและมีวิธีการแยกข้อความดิบเป็นประโยค คลาสนี้ใช้แบบจำลองเอนโทรปีสูงสุดเพื่อประเมินอักขระ end-ofsentence ในสตริงเพื่อพิจารณาว่าพวกเขามีความหมายถึงจุดสิ้นสุดของประโยคหรือไม่
ต่อไปนี้เป็นวิธีการที่สำคัญของคลาสนี้
ส. เลขที่ | วิธีการและคำอธิบาย |
---|---|
1 | sentDetect() วิธีนี้ใช้เพื่อตรวจจับประโยคในข้อความดิบที่ส่งผ่านไป ยอมรับตัวแปร String เป็นพารามิเตอร์และส่งกลับอาร์เรย์ String ซึ่งเก็บประโยคจากข้อความดิบที่กำหนด |
2 | sentPosDetect() วิธีนี้ใช้เพื่อตรวจหาตำแหน่งของประโยคในข้อความที่กำหนด วิธีนี้ยอมรับตัวแปรสตริงซึ่งเป็นตัวแทนของประโยคและส่งคืนอาร์เรย์ของอ็อบเจ็กต์ประเภทSpan. ชั้นเรียนชื่อ Span ของ opennlp.tools.util แพ็กเกจใช้เพื่อจัดเก็บจำนวนเต็มเริ่มต้นและสิ้นสุดของชุด |
3 | getSentenceProbabilities() วิธีนี้จะคืนค่าความน่าจะเป็นที่เกี่ยวข้องกับการโทรล่าสุดไป sentDetect() วิธี. |
Tokenization
คลาส TokenizerModel
คลาสนี้แสดงถึงโมเดลที่กำหนดไว้ล่วงหน้าซึ่งใช้เพื่อโทเค็นประโยคที่กำหนด คลาสนี้เป็นของแพ็คเกจopennlp.tools.tokenizer.
ตัวสร้างของคลาสนี้ยอมรับไฟล์ InputStream อ็อบเจ็กต์ของไฟล์โมเดลโทเค็นไนเซอร์ (entoken.bin)
ชั้นเรียน
ในการทำโทเค็นไลบรารี OpenNLP มีคลาสหลักสามคลาส ทั้งสามคลาสใช้อินเทอร์เฟซที่เรียกว่าTokenizer.
ส. เลขที่ | ชั้นเรียนและคำอธิบาย |
---|---|
1 | SimpleTokenizer คลาสนี้โทเค็นข้อความดิบที่กำหนดโดยใช้คลาสอักขระ |
2 | WhitespaceTokenizer คลาสนี้ใช้ช่องว่างเพื่อโทเค็นข้อความที่กำหนด |
3 | TokenizerME คลาสนี้แปลงข้อความดิบเป็นโทเค็นแยก ใช้เอนโทรปีสูงสุดในการตัดสินใจ |
คลาสเหล่านี้ประกอบด้วยวิธีการดังต่อไปนี้
ส. เลขที่ | วิธีการและคำอธิบาย |
---|---|
1 | tokenize() วิธีนี้ใช้ในการโทเค็นข้อความดิบ วิธีนี้ยอมรับตัวแปร String เป็นพารามิเตอร์และส่งคืนอาร์เรย์ของ Strings (โทเค็น) |
2 | sentPosDetect() วิธีนี้ใช้เพื่อรับตำแหน่งหรือช่วงของโทเค็น ยอมรับประโยค (หรือ) ข้อความดิบในรูปแบบของสตริงและส่งคืนอาร์เรย์ของวัตถุประเภทSpan. |
นอกเหนือจากสองวิธีข้างต้นแล้วไฟล์ TokenizerME คลาสมีไฟล์ getTokenProbabilities() วิธี.
ส. เลขที่ | วิธีการและคำอธิบาย |
---|---|
1 | getTokenProbabilities() วิธีนี้ใช้เพื่อรับความน่าจะเป็นที่เกี่ยวข้องกับการเรียกล่าสุดไปยังไฟล์ tokenizePos() วิธี. |
NameEntityRecognition
คลาส TokenNameFinderModel
คลาสนี้แสดงถึงโมเดลที่กำหนดไว้ล่วงหน้าซึ่งใช้เพื่อค้นหาเอนทิตีที่มีชื่อในประโยคที่กำหนด คลาสนี้เป็นของแพ็คเกจopennlp.tools.namefind.
ตัวสร้างของคลาสนี้ยอมรับไฟล์ InputStream อ็อบเจ็กต์ของไฟล์โมเดลการค้นหาชื่อ (enner-person.bin)
คลาส NameFinderME
ชั้นเรียนเป็นของแพ็คเกจ opennlp.tools.namefindและมีวิธีการดำเนินงาน NER คลาสนี้ใช้โมเดลเอนโทรปีสูงสุดเพื่อค้นหาเอนทิตีที่มีชื่อในข้อความดิบที่กำหนด
ส. เลขที่ | วิธีการและคำอธิบาย |
---|---|
1 | find() วิธีนี้ใช้เพื่อตรวจหาชื่อในข้อความดิบ ยอมรับตัวแปร String ที่แสดงข้อความดิบเป็นพารามิเตอร์และส่งกลับอาร์เรย์ของอ็อบเจ็กต์ประเภท Span |
2 | probs() วิธีนี้ใช้เพื่อรับความน่าจะเป็นของลำดับที่ถอดรหัสล่าสุด |
การค้นหาส่วนต่างๆของคำพูด
คลาส POSModel
คลาสนี้แสดงถึงโมเดลที่กำหนดไว้ล่วงหน้าซึ่งใช้เพื่อแท็กส่วนของการพูดของประโยคที่กำหนด คลาสนี้เป็นของแพ็คเกจopennlp.tools.postag.
ตัวสร้างของคลาสนี้ยอมรับไฟล์ InputStream ออบเจ็กต์ของไฟล์โมเดล pos-tagger (enpos-maxent.bin)
คลาส POSTaggerME
คลาสนี้เป็นของแพ็คเกจ opennlp.tools.postagและใช้เพื่อทำนายส่วนของคำพูดของข้อความดิบที่กำหนด ใช้เอนโทรปีสูงสุดในการตัดสินใจ
ส. เลขที่ | วิธีการและคำอธิบาย |
---|---|
1 | tag() วิธีนี้ใช้เพื่อกำหนดประโยคของโทเค็นแท็ก POS วิธีนี้ยอมรับอาร์เรย์ของโทเค็น (String) เป็นพารามิเตอร์และส่งคืนแท็ก (อาร์เรย์) |
2 | getSentenceProbabilities() วิธีนี้ใช้เพื่อรับความน่าจะเป็นสำหรับแต่ละแท็กของประโยคที่เพิ่งแท็ก |
การแยกวิเคราะห์ประโยค
คลาส ParserModel
คลาสนี้แสดงถึงโมเดลที่กำหนดไว้ล่วงหน้าซึ่งใช้ในการแยกวิเคราะห์ประโยคที่กำหนด คลาสนี้เป็นของแพ็คเกจopennlp.tools.parser.
ตัวสร้างของคลาสนี้ยอมรับไฟล์ InputStream อ็อบเจ็กต์ของไฟล์โมเดล parser (en-parserchunking.bin)
คลาส Parser Factory
คลาสนี้เป็นของแพ็คเกจ opennlp.tools.parser และใช้ในการสร้างตัวแยกวิเคราะห์
ส. เลขที่ | วิธีการและคำอธิบาย |
---|---|
1 | create() นี่เป็นวิธีการแบบคงที่และใช้ในการสร้างวัตถุตัวแยกวิเคราะห์ วิธีนี้ยอมรับอ็อบเจ็กต์ Filestream ของไฟล์โมเดลตัวแยกวิเคราะห์ |
คลาส ParserTool
คลาสนี้เป็นของ opennlp.tools.cmdline.parser แพ็กเกจและใช้เพื่อแยกวิเคราะห์เนื้อหา
ส. เลขที่ | วิธีการและคำอธิบาย |
---|---|
1 | parseLine() วิธีนี้ของ ParserToolคลาสใช้เพื่อแยกวิเคราะห์ข้อความดิบใน OpenNLP วิธีนี้ยอมรับ -
|
การจัดเป็นกลุ่ม
คลาส ChunkerModel
คลาสนี้แสดงถึงโมเดลที่กำหนดไว้ล่วงหน้าซึ่งใช้ในการแบ่งประโยคออกเป็นกลุ่มย่อย ๆ คลาสนี้เป็นของแพ็คเกจopennlp.tools.chunker.
ตัวสร้างของคลาสนี้ยอมรับไฟล์ InputStream วัตถุของ chunker ไฟล์โมเดล (enchunker.bin)
คลาส ChunkerME
คลาสนี้เป็นของแพ็กเกจที่ชื่อ opennlp.tools.chunker และใช้ในการแบ่งประโยคที่กำหนดให้เป็นชิ้นเล็ก ๆ
ส. เลขที่ | วิธีการและคำอธิบาย |
---|---|
1 | chunk() วิธีนี้ใช้เพื่อแบ่งประโยคที่กำหนดให้เป็นชิ้นเล็ก ๆ ยอมรับโทเค็นของประโยคและPศิลปะ Oฉ Sแท็ก peech เป็นพารามิเตอร์ |
2 | probs() วิธีนี้จะคืนค่าความน่าจะเป็นของลำดับที่ถอดรหัสล่าสุด |
ในขณะที่ประมวลผลภาษาที่เป็นธรรมชาติการตัดสินใจว่าจะเริ่มต้นและสิ้นสุดของประโยคเป็นหนึ่งในปัญหาที่ต้องแก้ไข กระบวนการนี้เรียกว่าSเอนเทนซ์ Bลางสังหรณ์ Disambiguation (SBD) หรือเพียงแค่ทำลายประโยค
เทคนิคที่เราใช้ตรวจจับประโยคในข้อความที่กำหนดขึ้นอยู่กับภาษาของข้อความ
การตรวจจับประโยคโดยใช้ Java
เราสามารถตรวจจับประโยคในข้อความที่กำหนดใน Java โดยใช้นิพจน์ทั่วไปและชุดของกฎง่ายๆ
ตัวอย่างเช่นให้เราถือว่าช่วงเวลาเครื่องหมายคำถามหรือเครื่องหมายอัศเจรีย์สิ้นสุดประโยคในข้อความที่กำหนดจากนั้นเราสามารถแยกประโยคโดยใช้ split() วิธีการของ Stringชั้นเรียน ที่นี่เราต้องส่งนิพจน์ทั่วไปในรูปแบบ String
ต่อไปนี้เป็นโปรแกรมที่กำหนดประโยคในข้อความที่กำหนดโดยใช้นิพจน์ทั่วไปของ Java (split method). บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อSentenceDetection_RE.java.
public class SentenceDetection_RE {
public static void main(String args[]){
String sentence = " Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
String simple = "[.?!]";
String[] splitString = (sentence.split(simple));
for (String string : splitString)
System.out.println(string);
}
}
คอมไพล์และเรียกใช้ไฟล์ java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้
javac SentenceDetection_RE.java
java SentenceDetection_RE
ในการดำเนินการโปรแกรมด้านบนจะสร้างเอกสาร PDF ที่แสดงข้อความต่อไปนี้
Hi
How are you
Welcome to Tutorialspoint
We provide free tutorials on various technologies
การตรวจจับประโยคโดยใช้ OpenNLP
ในการตรวจจับประโยค OpenNLP ใช้โมเดลที่กำหนดไว้ล่วงหน้าไฟล์ชื่อ en-sent.bin. โมเดลที่กำหนดไว้ล่วงหน้านี้ได้รับการฝึกฝนให้ตรวจจับประโยคในข้อความดิบที่กำหนด
opennlp.tools.sentdetect แพ็กเกจประกอบด้วยคลาสและอินเทอร์เฟซที่ใช้เพื่อดำเนินการตรวจจับประโยค
ในการตรวจจับประโยคโดยใช้ไลบรารี OpenNLP คุณต้อง -
โหลดไฟล์ en-sent.bin แบบจำลองโดยใช้ SentenceModel ชั้นเรียน
เริ่มต้นไฟล์ SentenceDetectorME ชั้นเรียน
ตรวจจับประโยคโดยใช้ sentDetect() วิธีการของคลาสนี้
ต่อไปนี้เป็นขั้นตอนในการเขียนโปรแกรมที่ตรวจจับประโยคจากข้อความดิบที่กำหนด
ขั้นตอนที่ 1: กำลังโหลดโมเดล
โมเดลสำหรับการตรวจจับประโยคแสดงโดยคลาสที่มีชื่อว่า SentenceModelซึ่งเป็นของแพ็คเกจ opennlp.tools.sentdetect.
ในการโหลดแบบจำลองการตรวจจับประโยค -
สร้างไฟล์ InputStream อ็อบเจ็กต์ของโมเดล (สร้างอินสแตนซ์ FileInputStream และส่งเส้นทางของโมเดลในรูปแบบ String ไปยังตัวสร้าง)
เริ่มต้นไฟล์ SentenceModel ชั้นเรียนและผ่าน InputStream (วัตถุ) ของโมเดลเป็นพารามิเตอร์ของตัวสร้างดังที่แสดงในบล็อกโค้ดต่อไปนี้ -
//Loading sentence detector model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/ensent.bin");
SentenceModel model = new SentenceModel(inputStream);
ขั้นตอนที่ 2: สร้างอินสแตนซ์คลาส SentenceDetectorME
SentenceDetectorME คลาสของแพ็คเกจ opennlp.tools.sentdetectมีวิธีการแยกข้อความดิบเป็นประโยค คลาสนี้ใช้แบบจำลองเอนโทรปีสูงสุดเพื่อประเมินอักขระท้ายประโยคในสตริงเพื่อพิจารณาว่ามีความหมายถึงจุดสิ้นสุดของประโยคหรือไม่
สร้างอินสแตนซ์คลาสนี้และส่งผ่านโมเดลอ็อบเจ็กต์ที่สร้างในขั้นตอนก่อนหน้าดังที่แสดงด้านล่าง
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
ขั้นตอนที่ 3: ตรวจจับประโยค
sentDetect() วิธีการของ SentenceDetectorMEคลาสใช้ในการตรวจจับประโยคในข้อความดิบที่ส่งผ่านไป วิธีนี้ยอมรับตัวแปร String เป็นพารามิเตอร์
เรียกใช้วิธีนี้โดยส่งรูปแบบ String ของประโยคไปยังวิธีนี้
//Detecting the sentence
String sentences[] = detector.sentDetect(sentence);
Example
ต่อไปนี้เป็นโปรแกรมที่ตรวจจับประโยคในข้อความดิบที่กำหนด บันทึกโปรแกรมนี้ในไฟล์ด้วยชื่อSentenceDetectionME.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
public class SentenceDetectionME {
public static void main(String args[]) throws Exception {
String sentence = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Loading sentence detector model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
SentenceModel model = new SentenceModel(inputStream);
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
//Detecting the sentence
String sentences[] = detector.sentDetect(sentence);
//Printing the sentences
for(String sent : sentences)
System.out.println(sent);
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac SentenceDetectorME.java
java SentenceDetectorME
ในการดำเนินการโปรแกรมด้านบนจะอ่านสตริงที่กำหนดและตรวจพบประโยคในนั้นและแสดงผลลัพธ์ต่อไปนี้
Hi. How are you?
Welcome to Tutorialspoint.
We provide free tutorials on various technologies
การตรวจจับตำแหน่งของประโยค
นอกจากนี้เรายังสามารถตรวจจับตำแหน่งของประโยคโดยใช้เมธอด sentPosDetect () ของ SentenceDetectorME class.
ต่อไปนี้เป็นขั้นตอนที่ต้องปฏิบัติตามเพื่อเขียนโปรแกรมที่ตรวจจับตำแหน่งของประโยคจากข้อความดิบที่กำหนด
ขั้นตอนที่ 1: กำลังโหลดโมเดล
โมเดลสำหรับการตรวจจับประโยคแสดงโดยคลาสที่มีชื่อว่า SentenceModelซึ่งเป็นของแพ็คเกจ opennlp.tools.sentdetect.
ในการโหลดแบบจำลองการตรวจจับประโยค -
สร้างไฟล์ InputStream อ็อบเจ็กต์ของโมเดล (สร้างอินสแตนซ์ FileInputStream และส่งเส้นทางของโมเดลในรูปแบบ String ไปยังตัวสร้าง)
เริ่มต้นไฟล์ SentenceModel ชั้นเรียนและผ่าน InputStream (วัตถุ) ของโมเดลเป็นพารามิเตอร์ของตัวสร้างดังที่แสดงในบล็อกโค้ดต่อไปนี้
//Loading sentence detector model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
SentenceModel model = new SentenceModel(inputStream);
ขั้นตอนที่ 2: สร้างอินสแตนซ์คลาส SentenceDetectorME
SentenceDetectorME คลาสของแพ็คเกจ opennlp.tools.sentdetectมีวิธีการแยกข้อความดิบเป็นประโยค คลาสนี้ใช้แบบจำลองเอนโทรปีสูงสุดเพื่อประเมินอักขระท้ายประโยคในสตริงเพื่อพิจารณาว่ามีความหมายถึงจุดสิ้นสุดของประโยคหรือไม่
สร้างอินสแตนซ์คลาสนี้และส่งผ่านโมเดลอ็อบเจ็กต์ที่สร้างในขั้นตอนก่อนหน้า
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
ขั้นตอนที่ 3: การตรวจหาตำแหน่งของประโยค
sentPosDetect() วิธีการของ SentenceDetectorMEคลาสใช้เพื่อตรวจจับตำแหน่งของประโยคในข้อความดิบที่ส่งผ่านไป วิธีนี้ยอมรับตัวแปร String เป็นพารามิเตอร์
เรียกใช้เมธอดนี้โดยส่งรูปแบบ String ของประโยคเป็นพารามิเตอร์ไปยังเมธอดนี้
//Detecting the position of the sentences in the paragraph
Span[] spans = detector.sentPosDetect(sentence);
ขั้นตอนที่ 4: การพิมพ์ช่วงของประโยค
sentPosDetect() วิธีการของ SentenceDetectorME คลาสส่งคืนอาร์เรย์ของอ็อบเจ็กต์ประเภท Span. คลาสที่มีชื่อว่า Span of theopennlp.tools.util แพ็กเกจใช้เพื่อจัดเก็บจำนวนเต็มเริ่มต้นและสิ้นสุดของชุด
คุณสามารถจัดเก็บช่วงเวลาที่ส่งคืนโดยไฟล์ sentPosDetect() วิธีการในอาร์เรย์ Span และพิมพ์ดังที่แสดงในบล็อกรหัสต่อไปนี้
//Printing the sentences and their spans of a sentence
for (Span span : spans)
System.out.println(paragraph.substring(span);
Example
ต่อไปนี้เป็นโปรแกรมที่ตรวจจับประโยคในข้อความดิบที่กำหนด บันทึกโปรแกรมนี้ในไฟล์ด้วยชื่อSentenceDetectionME.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
import opennlp.tools.util.Span;
public class SentencePosDetection {
public static void main(String args[]) throws Exception {
String paragraph = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Loading sentence detector model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
SentenceModel model = new SentenceModel(inputStream);
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
//Detecting the position of the sentences in the raw text
Span spans[] = detector.sentPosDetect(paragraph);
//Printing the spans of the sentences in the paragraph
for (Span span : spans)
System.out.println(span);
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac SentencePosDetection.java
java SentencePosDetection
ในการดำเนินการโปรแกรมด้านบนจะอ่านสตริงที่กำหนดและตรวจพบประโยคในนั้นและแสดงผลลัพธ์ต่อไปนี้
[0..16)
[17..43)
[44..93)
ประโยคพร้อมกับตำแหน่งของพวกเขา
substring() วิธีการของคลาส String ยอมรับไฟล์ begin และ end offsetsและส่งคืนสตริงที่เกี่ยวข้อง เราสามารถใช้วิธีนี้เพื่อพิมพ์ประโยคและช่วง (ตำแหน่ง) เข้าด้วยกันดังที่แสดงในบล็อกโค้ดต่อไปนี้
for (Span span : spans)
System.out.println(sen.substring(span.getStart(), span.getEnd())+" "+ span);
ต่อไปนี้เป็นโปรแกรมตรวจจับประโยคจากข้อความดิบที่กำหนดและแสดงพร้อมกับตำแหน่ง บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อSentencesAndPosDetection.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
import opennlp.tools.util.Span;
public class SentencesAndPosDetection {
public static void main(String args[]) throws Exception {
String sen = "Hi. How are you? Welcome to Tutorialspoint."
+ " We provide free tutorials on various technologies";
//Loading a sentence model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
SentenceModel model = new SentenceModel(inputStream);
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
//Detecting the position of the sentences in the paragraph
Span[] spans = detector.sentPosDetect(sen);
//Printing the sentences and their spans of a paragraph
for (Span span : spans)
System.out.println(sen.substring(span.getStart(), span.getEnd())+" "+ span);
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac SentencesAndPosDetection.java
java SentencesAndPosDetection
ในการดำเนินการโปรแกรมด้านบนจะอ่านสตริงที่กำหนดและตรวจจับประโยคพร้อมกับตำแหน่งและแสดงผลลัพธ์ต่อไปนี้
Hi. How are you? [0..16)
Welcome to Tutorialspoint. [17..43)
We provide free tutorials on various technologies [44..93)
การตรวจจับความน่าจะเป็นประโยค
getSentenceProbabilities() วิธีการของ SentenceDetectorME คลาสส่งคืนความน่าจะเป็นที่เกี่ยวข้องกับการเรียกล่าสุดไปยังเมธอด sentDetect ()
//Getting the probabilities of the last decoded sequence
double[] probs = detector.getSentenceProbabilities();
ต่อไปนี้เป็นโปรแกรมสำหรับพิมพ์ความน่าจะเป็นที่เกี่ยวข้องกับการเรียกไปยังเมธอด sentDetect () บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อSentenceDetectionMEProbs.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
public class SentenceDetectionMEProbs {
public static void main(String args[]) throws Exception {
String sentence = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Loading sentence detector model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin");
SentenceModel model = new SentenceModel(inputStream);
//Instantiating the SentenceDetectorME class
SentenceDetectorME detector = new SentenceDetectorME(model);
//Detecting the sentence
String sentences[] = detector.sentDetect(sentence);
//Printing the sentences
for(String sent : sentences)
System.out.println(sent);
//Getting the probabilities of the last decoded sequence
double[] probs = detector.getSentenceProbabilities();
System.out.println(" ");
for(int i = 0; i<probs.length; i++)
System.out.println(probs[i]);
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac SentenceDetectionMEProbs.java
java SentenceDetectionMEProbs
ในการดำเนินการโปรแกรมด้านบนจะอ่านสตริงที่กำหนดและตรวจจับประโยคและพิมพ์ออกมา นอกจากนี้ยังส่งกลับค่าความน่าจะเป็นที่เกี่ยวข้องกับการเรียกล่าสุดไปยังเมธอด sentDetect () ดังที่แสดงด้านล่าง
Hi. How are you?
Welcome to Tutorialspoint.
We provide free tutorials on various technologies
0.9240246995179983
0.9957680129995953
1.0
กระบวนการสับประโยคที่กำหนดให้เป็นส่วนเล็ก ๆ (โทเค็น) เรียกว่า tokenization. โดยทั่วไปข้อความดิบที่ระบุจะถูกทำให้เป็นโทเค็นตามชุดของตัวคั่น (ส่วนใหญ่เป็นช่องว่าง)
Tokenization ใช้ในงานต่างๆเช่นการตรวจสอบการสะกดการประมวลผลการค้นหาการระบุส่วนของคำพูดการตรวจจับประโยคการจัดประเภทเอกสารของเอกสารเป็นต้น
Tokenizing โดยใช้ OpenNLP
opennlp.tools.tokenize แพ็กเกจประกอบด้วยคลาสและอินเทอร์เฟซที่ใช้ในการทำโทเค็น
ในการโทเค็นประโยคที่กำหนดให้เป็นส่วนย่อยที่ง่ายขึ้นไลบรารี OpenNLP มีคลาสที่แตกต่างกันสามคลาส -
SimpleTokenizer - คลาสนี้โทเค็นข้อความดิบที่กำหนดโดยใช้คลาสอักขระ
WhitespaceTokenizer - คลาสนี้ใช้ช่องว่างเพื่อโทเค็นข้อความที่กำหนด
TokenizerME- คลาสนี้จะแปลงข้อความดิบเป็นโทเค็นแยกต่างหาก ใช้เอนโทรปีสูงสุดในการตัดสินใจ
SimpleTokenizer
ในการโทเค็นประโยคโดยใช้ SimpleTokenizer ชั้นเรียนคุณต้อง -
สร้างออบเจ็กต์ของคลาสที่เกี่ยวข้อง
Tokenize ประโยคโดยใช้ tokenize() วิธี.
พิมพ์โทเค็น
ต่อไปนี้เป็นขั้นตอนที่จะต้องปฏิบัติตามเพื่อเขียนโปรแกรมซึ่งเป็นโทเค็นสำหรับข้อความดิบ
Step 1 - สร้างอินสแตนซ์คลาสตามลำดับ
ในทั้งสองคลาสไม่มีตัวสร้างที่สามารถสร้างอินสแตนซ์ได้ ดังนั้นเราจำเป็นต้องสร้างวัตถุของคลาสเหล่านี้โดยใช้ตัวแปรคงที่INSTANCE.
SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;
Step 2 - Tokenize ประโยค
ทั้งสองคลาสนี้มีเมธอดที่เรียกว่า tokenize(). วิธีนี้ยอมรับข้อความดิบในรูปแบบสตริง ในการเรียกใช้จะทำให้เป็นโทเค็นสตริงที่กำหนดและส่งคืนอาร์เรย์ของสตริง (โทเค็น)
Tokenize ประโยคโดยใช้ tokenizer() วิธีการดังแสดงด้านล่าง
//Tokenizing the given sentence
String tokens[] = tokenizer.tokenize(sentence);
Step 3 - พิมพ์โทเค็น
หลังจากโทเค็นประโยคคุณสามารถพิมพ์โทเค็นโดยใช้ for loopตามที่แสดงด้านล่าง
//Printing the tokens
for(String token : tokens)
System.out.println(token);
Example
ต่อไปนี้เป็นโปรแกรมที่สร้างโทเค็นประโยคที่กำหนดโดยใช้คลาส SimpleTokenizer บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อSimpleTokenizerExample.java.
import opennlp.tools.tokenize.SimpleTokenizer;
public class SimpleTokenizerExample {
public static void main(String args[]){
String sentence = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Instantiating SimpleTokenizer class
SimpleTokenizer simpleTokenizer = SimpleTokenizer.INSTANCE;
//Tokenizing the given sentence
String tokens[] = simpleTokenizer.tokenize(sentence);
//Printing the tokens
for(String token : tokens) {
System.out.println(token);
}
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac SimpleTokenizerExample.java
java SimpleTokenizerExample
ในการดำเนินการโปรแกรมด้านบนอ่านสตริงที่กำหนด (ข้อความดิบ) โทเค็นและแสดงผลลัพธ์ต่อไปนี้ -
Hi
.
How
are
you
?
Welcome
to
Tutorialspoint
.
We
provide
free
tutorials
on
various
technologies
ช่องว่าง
ในการโทเค็นประโยคโดยใช้ WhitespaceTokenizer ชั้นเรียนคุณต้อง -
สร้างออบเจ็กต์ของคลาสที่เกี่ยวข้อง
Tokenize ประโยคโดยใช้ tokenize() วิธี.
พิมพ์โทเค็น
ต่อไปนี้เป็นขั้นตอนที่จะต้องปฏิบัติตามเพื่อเขียนโปรแกรมซึ่งเป็นโทเค็นสำหรับข้อความดิบ
Step 1 - สร้างอินสแตนซ์คลาสตามลำดับ
ในทั้งสองคลาสไม่มีตัวสร้างที่สามารถสร้างอินสแตนซ์ได้ ดังนั้นเราจำเป็นต้องสร้างวัตถุของคลาสเหล่านี้โดยใช้ตัวแปรคงที่INSTANCE.
WhitespaceTokenizer tokenizer = WhitespaceTokenizer.INSTANCE;
Step 2 - Tokenize ประโยค
ทั้งสองคลาสนี้มีเมธอดที่เรียกว่า tokenize(). วิธีนี้ยอมรับข้อความดิบในรูปแบบสตริง ในการเรียกใช้จะทำให้เป็นโทเค็นสตริงที่กำหนดและส่งคืนอาร์เรย์ของสตริง (โทเค็น)
Tokenize ประโยคโดยใช้ tokenizer() วิธีการดังแสดงด้านล่าง
//Tokenizing the given sentence
String tokens[] = tokenizer.tokenize(sentence);
Step 3 - พิมพ์โทเค็น
หลังจากโทเค็นประโยคคุณสามารถพิมพ์โทเค็นโดยใช้ for loopตามที่แสดงด้านล่าง
//Printing the tokens
for(String token : tokens)
System.out.println(token);
Example
ต่อไปนี้เป็นโปรแกรมที่โทเค็นประโยคที่กำหนดโดยใช้ WhitespaceTokenizerชั้นเรียน บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อWhitespaceTokenizerExample.java.
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class WhitespaceTokenizerExample {
public static void main(String args[]){
String sentence = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Instantiating whitespaceTokenizer class
WhitespaceTokenizer whitespaceTokenizer = WhitespaceTokenizer.INSTANCE;
//Tokenizing the given paragraph
String tokens[] = whitespaceTokenizer.tokenize(sentence);
//Printing the tokens
for(String token : tokens)
System.out.println(token);
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac WhitespaceTokenizerExample.java
java WhitespaceTokenizerExample
ในการดำเนินการโปรแกรมด้านบนอ่านสตริงที่กำหนด (ข้อความดิบ) โทเค็นและแสดงผลลัพธ์ต่อไปนี้
Hi.
How
are
you?
Welcome
to
Tutorialspoint.
We
provide
free
tutorials
on
various
technologies
ชั้น TokenizerME
OpenNLP ยังใช้โมเดลที่กำหนดไว้ล่วงหน้าไฟล์ชื่อ de-token.bin เพื่อสร้างโทเค็นประโยค ได้รับการฝึกฝนให้โทเค็นประโยคในข้อความดิบที่กำหนด
TokenizerME คลาสของ opennlp.tools.tokenizerแพ็กเกจใช้เพื่อโหลดโมเดลนี้และโทเค็นข้อความดิบที่กำหนดโดยใช้ไลบรารี OpenNLP ในการทำเช่นนั้นคุณต้อง -
โหลดไฟล์ en-token.bin แบบจำลองโดยใช้ TokenizerModel ชั้นเรียน
เริ่มต้นไฟล์ TokenizerME ชั้นเรียน
Tokenize ประโยคโดยใช้ tokenize() วิธีการของคลาสนี้
ต่อไปนี้เป็นขั้นตอนที่ต้องปฏิบัติตามเพื่อเขียนโปรแกรมที่สร้างโทเค็นประโยคจากข้อความดิบที่กำหนดโดยใช้ TokenizerME ชั้นเรียน
Step 1 - กำลังโหลดโมเดล
โมเดลสำหรับโทเค็นจะแสดงโดยคลาสที่มีชื่อว่า TokenizerModelซึ่งเป็นของแพ็คเกจ opennlp.tools.tokenize.
ในการโหลดโมเดลโทเค็นไนเซอร์ -
สร้างไฟล์ InputStream อ็อบเจ็กต์ของโมเดล (สร้างอินสแตนซ์ FileInputStream และส่งเส้นทางของโมเดลในรูปแบบ String ไปยังตัวสร้าง)
เริ่มต้นไฟล์ TokenizerModel ชั้นเรียนและผ่าน InputStream (วัตถุ) ของโมเดลเป็นพารามิเตอร์ของตัวสร้างดังที่แสดงในบล็อกโค้ดต่อไปนี้
//Loading the Tokenizer model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin");
TokenizerModel tokenModel = new TokenizerModel(inputStream);
Step 2 - สร้างอินสแตนซ์คลาส TokenizerME
TokenizerME คลาสของแพ็คเกจ opennlp.tools.tokenizeมีวิธีการตัดข้อความดิบเป็นส่วนเล็ก ๆ (โทเค็น) ใช้เอนโทรปีสูงสุดในการตัดสินใจ
สร้างอินสแตนซ์คลาสนี้และส่งผ่านโมเดลอ็อบเจ็กต์ที่สร้างขึ้นในขั้นตอนก่อนหน้าดังที่แสดงด้านล่าง
//Instantiating the TokenizerME class
TokenizerME tokenizer = new TokenizerME(tokenModel);
Step 3 - การแปลงประโยค
tokenize() วิธีการของ TokenizerMEคลาสใช้เพื่อสร้างโทเค็นข้อความดิบที่ส่งผ่านไป วิธีนี้ยอมรับตัวแปร String เป็นพารามิเตอร์และส่งคืนอาร์เรย์ของ Strings (โทเค็น)
เรียกใช้วิธีนี้โดยส่งรูปแบบ String ของประโยคไปยังวิธีนี้ดังนี้
//Tokenizing the given raw text
String tokens[] = tokenizer.tokenize(paragraph);
Example
ต่อไปนี้เป็นโปรแกรมที่สร้างโทเค็นข้อความดิบที่กำหนด บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อTokenizerMEExample.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.tokenize.TokenizerME;
import opennlp.tools.tokenize.TokenizerModel;
public class TokenizerMEExample {
public static void main(String args[]) throws Exception{
String sentence = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Loading the Tokenizer model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin");
TokenizerModel tokenModel = new TokenizerModel(inputStream);
//Instantiating the TokenizerME class
TokenizerME tokenizer = new TokenizerME(tokenModel);
//Tokenizing the given raw text
String tokens[] = tokenizer.tokenize(sentence);
//Printing the tokens
for (String a : tokens)
System.out.println(a);
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac TokenizerMEExample.java
java TokenizerMEExample
ในการดำเนินการโปรแกรมด้านบนจะอ่านสตริงที่กำหนดและตรวจพบประโยคในนั้นและแสดงผลลัพธ์ต่อไปนี้ -
Hi
.
How
are
you
?
Welcome
to
Tutorialspoint
.
We
provide
free
tutorials
on
various
technologie
การดึงตำแหน่งของโทเค็น
นอกจากนี้เรายังสามารถรับตำแหน่งหรือ spans ของโทเค็นโดยใช้ tokenizePos()วิธี. นี่คือวิธีการของอินเทอร์เฟซ Tokenizer ของแพ็คเกจopennlp.tools.tokenize. เนื่องจากคลาส Tokenizer ทั้งสาม (สาม) ใช้อินเทอร์เฟซนี้คุณสามารถค้นหาวิธีนี้ได้ในทั้งหมด
วิธีนี้ยอมรับประโยคหรือข้อความดิบในรูปแบบของสตริงและส่งคืนอาร์เรย์ของอ็อบเจ็กต์ประเภท Span.
คุณสามารถรับตำแหน่งของโทเค็นโดยใช้ไฟล์ tokenizePos() วิธีการดังต่อไปนี้ -
//Retrieving the tokens
tokenizer.tokenizePos(sentence);
การพิมพ์ตำแหน่ง (ช่วง)
ชั้นเรียนชื่อ Span ของ opennlp.tools.util แพ็กเกจใช้เพื่อจัดเก็บจำนวนเต็มเริ่มต้นและสิ้นสุดของชุด
คุณสามารถจัดเก็บช่วงเวลาที่ส่งคืนโดยไฟล์ tokenizePos() วิธีการในอาร์เรย์ Span และพิมพ์ดังที่แสดงในบล็อกรหัสต่อไปนี้
//Retrieving the tokens
Span[] tokens = tokenizer.tokenizePos(sentence);
//Printing the spans of tokens
for( Span token : tokens)
System.out.println(token);
การพิมพ์โทเค็นและตำแหน่งร่วมกัน
substring() วิธีการของคลาส String ยอมรับไฟล์ begin และ endชดเชยและส่งคืนสตริงที่เกี่ยวข้อง เราสามารถใช้วิธีนี้เพื่อพิมพ์โทเค็นและช่วง (ตำแหน่ง) ร่วมกันดังแสดงในบล็อกโค้ดต่อไปนี้
//Printing the spans of tokens
for(Span token : tokens)
System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));
Example(SimpleTokenizer)
ต่อไปนี้เป็นโปรแกรมที่ดึงข้อมูลช่วงโทเค็นของข้อความดิบโดยใช้ SimpleTokenizerชั้นเรียน นอกจากนี้ยังพิมพ์โทเค็นพร้อมกับตำแหน่งของพวกเขา บันทึกโปรแกรมนี้ในไฟล์ด้วยชื่อSimpleTokenizerSpans.java.
import opennlp.tools.tokenize.SimpleTokenizer;
import opennlp.tools.util.Span;
public class SimpleTokenizerSpans {
public static void main(String args[]){
String sent = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Instantiating SimpleTokenizer class
SimpleTokenizer simpleTokenizer = SimpleTokenizer.INSTANCE;
//Retrieving the boundaries of the tokens
Span[] tokens = simpleTokenizer.tokenizePos(sent);
//Printing the spans of tokens
for( Span token : tokens)
System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac SimpleTokenizerSpans.java
java SimpleTokenizerSpans
ในการดำเนินการโปรแกรมด้านบนอ่านสตริงที่กำหนด (ข้อความดิบ) โทเค็นและแสดงผลลัพธ์ต่อไปนี้ -
[0..2) Hi
[2..3) .
[4..7) How
[8..11) are
[12..15) you
[15..16) ?
[17..24) Welcome
[25..27) to
[28..42) Tutorialspoint
[42..43) .
[44..46) We
[47..54) provide
[55..59) free
[60..69) tutorials
[70..72) on
[73..80) various
[81..93) technologies
Example (WhitespaceTokenizer)
ต่อไปนี้เป็นโปรแกรมที่ดึงข้อมูลช่วงโทเค็นของข้อความดิบโดยใช้ WhitespaceTokenizerชั้นเรียน นอกจากนี้ยังพิมพ์โทเค็นพร้อมกับตำแหน่งของพวกเขา บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อWhitespaceTokenizerSpans.java.
import opennlp.tools.tokenize.WhitespaceTokenizer;
import opennlp.tools.util.Span;
public class WhitespaceTokenizerSpans {
public static void main(String args[]){
String sent = "Hi. How are you? Welcome to Tutorialspoint. "
+ "We provide free tutorials on various technologies";
//Instantiating SimpleTokenizer class
WhitespaceTokenizer whitespaceTokenizer = WhitespaceTokenizer.INSTANCE;
//Retrieving the tokens
Span[] tokens = whitespaceTokenizer.tokenizePos(sent);
//Printing the spans of tokens
for( Span token : tokens)
System.out.println(token +"
"+sent.substring(token.getStart(), token.getEnd()));
}
}
คอมไพล์และเรียกใช้ไฟล์ java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้
javac WhitespaceTokenizerSpans.java
java WhitespaceTokenizerSpans
ในการดำเนินการโปรแกรมด้านบนอ่านสตริงที่กำหนด (ข้อความดิบ) โทเค็นและแสดงผลลัพธ์ต่อไปนี้
[0..3) Hi.
[4..7) How
[8..11) are
[12..16) you?
[17..24) Welcome
[25..27) to
[28..43) Tutorialspoint.
[44..46) We
[47..54) provide
[55..59) free
[60..69) tutorials
[70..72) on
[73..80) various
[81..93) technologies
Example (TokenizerME)
ต่อไปนี้เป็นโปรแกรมที่ดึงข้อมูลช่วงโทเค็นของข้อความดิบโดยใช้ TokenizerMEชั้นเรียน นอกจากนี้ยังพิมพ์โทเค็นพร้อมกับตำแหน่งของพวกเขา บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อTokenizerMESpans.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.tokenize.TokenizerME;
import opennlp.tools.tokenize.TokenizerModel;
import opennlp.tools.util.Span;
public class TokenizerMESpans {
public static void main(String args[]) throws Exception{
String sent = "Hello John how are you welcome to Tutorialspoint";
//Loading the Tokenizer model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin");
TokenizerModel tokenModel = new TokenizerModel(inputStream);
//Instantiating the TokenizerME class
TokenizerME tokenizer = new TokenizerME(tokenModel);
//Retrieving the positions of the tokens
Span tokens[] = tokenizer.tokenizePos(sent);
//Printing the spans of tokens
for(Span token : tokens)
System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac TokenizerMESpans.java
java TokenizerMESpans
ในการดำเนินการโปรแกรมด้านบนอ่านสตริงที่กำหนด (ข้อความดิบ) โทเค็นและแสดงผลลัพธ์ต่อไปนี้ -
[0..5) Hello
[6..10) John
[11..14) how
[15..18) are
[19..22) you
[23..30) welcome
[31..33) to
[34..48) Tutorialspoint
ความน่าจะเป็นของ Tokenizer
เมธอด getTokenProbabilities () ของคลาส TokenizerME ใช้เพื่อรับความน่าจะเป็นที่เกี่ยวข้องกับการเรียกล่าสุดไปยังเมธอด tokenizePos ()
//Getting the probabilities of the recent calls to tokenizePos() method
double[] probs = detector.getSentenceProbabilities();
ต่อไปนี้เป็นโปรแกรมสำหรับพิมพ์ความน่าจะเป็นที่เกี่ยวข้องกับวิธีการเรียก tokenizePos () บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อTokenizerMEProbs.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.tokenize.TokenizerME;
import opennlp.tools.tokenize.TokenizerModel;
import opennlp.tools.util.Span;
public class TokenizerMEProbs {
public static void main(String args[]) throws Exception{
String sent = "Hello John how are you welcome to Tutorialspoint";
//Loading the Tokenizer model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin");
TokenizerModel tokenModel = new TokenizerModel(inputStream);
//Instantiating the TokenizerME class
TokenizerME tokenizer = new TokenizerME(tokenModel);
//Retrieving the positions of the tokens
Span tokens[] = tokenizer.tokenizePos(sent);
//Getting the probabilities of the recent calls to tokenizePos() method
double[] probs = tokenizer.getTokenProbabilities();
//Printing the spans of tokens
for(Span token : tokens)
System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));
System.out.println(" ");
for(int i = 0; i<probs.length; i++)
System.out.println(probs[i]);
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac TokenizerMEProbs.java
java TokenizerMEProbs
ในการดำเนินการโปรแกรมด้านบนจะอ่านสตริงที่กำหนดและโทเค็นประโยคและพิมพ์ออกมา นอกจากนี้ยังส่งคืนความน่าจะเป็นที่เกี่ยวข้องกับการเรียกล่าสุดไปยังเมธอด tokenizerPos ()
[0..5) Hello
[6..10) John
[11..14) how
[15..18) are
[19..22) you
[23..30) welcome
[31..33) to
[34..48) Tutorialspoint
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
กระบวนการค้นหาชื่อบุคคลสถานที่และหน่วยงานอื่น ๆ จากข้อความที่กำหนดเรียกว่า Nเอเมด Entity Rการรับรู้ (NER) ในบทนี้เราจะพูดถึงวิธีดำเนินการ NER ผ่านโปรแกรม Java โดยใช้ไลบรารี OpenNLP
ชื่อการรับรู้เอนทิตีโดยใช้ NLP แบบเปิด
ในการดำเนินงาน NER ต่างๆ OpenNLP ใช้โมเดลที่กำหนดไว้ล่วงหน้าที่แตกต่างกัน ได้แก่ en-nerdate.bn, en-ner-location.bin, en-ner-organization.bin, en-ner-person.bin และ en-ner-time ถังขยะ ไฟล์ทั้งหมดเหล่านี้เป็นแบบจำลองที่กำหนดไว้ล่วงหน้าซึ่งได้รับการฝึกฝนให้ตรวจจับเอนทิตีตามลำดับในข้อความดิบที่กำหนด
opennlp.tools.namefindแพ็กเกจประกอบด้วยคลาสและอินเทอร์เฟซที่ใช้เพื่อดำเนินงาน NER ในการดำเนินงาน NER โดยใช้ไลบรารี OpenNLP คุณต้อง -
โหลดโมเดลตามลำดับโดยใช้ไฟล์ TokenNameFinderModel ชั้นเรียน
เริ่มต้นไฟล์ NameFinder ชั้นเรียน
ค้นหาชื่อและพิมพ์
ต่อไปนี้เป็นขั้นตอนที่ต้องปฏิบัติตามเพื่อเขียนโปรแกรมซึ่งตรวจพบเอนทิตีชื่อจากข้อความดิบที่กำหนด
ขั้นตอนที่ 1: กำลังโหลดโมเดล
โมเดลสำหรับการตรวจจับประโยคแสดงโดยคลาสที่มีชื่อว่า TokenNameFinderModelซึ่งเป็นของแพ็คเกจ opennlp.tools.namefind.
ในการโหลดโมเดล NER -
สร้างไฟล์ InputStream อ็อบเจ็กต์ของโมเดล (สร้างอินสแตนซ์ FileInputStream และส่งเส้นทางของโมเดล NER ที่เหมาะสมในรูปแบบ String ไปยังคอนสตรัคเตอร์)
เริ่มต้นไฟล์ TokenNameFinderModel ชั้นเรียนและผ่าน InputStream (วัตถุ) ของโมเดลเป็นพารามิเตอร์ของตัวสร้างดังที่แสดงในบล็อกโค้ดต่อไปนี้
//Loading the NER-person model
InputStream inputStreamNameFinder = new FileInputStream(".../en-nerperson.bin");
TokenNameFinderModel model = new TokenNameFinderModel(inputStreamNameFinder);
ขั้นตอนที่ 2: สร้างอินสแตนซ์คลาส NameFinderME
NameFinderME คลาสของแพ็คเกจ opennlp.tools.namefindมีวิธีการในการดำเนินงาน NER คลาสนี้ใช้แบบจำลองเอนโทรปีสูงสุดเพื่อค้นหาเอนทิตีที่มีชื่อในข้อความดิบที่กำหนด
สร้างอินสแตนซ์คลาสนี้และส่งผ่านโมเดลอ็อบเจ็กต์ที่สร้างขึ้นในขั้นตอนก่อนหน้าดังที่แสดงด้านล่าง -
//Instantiating the NameFinderME class
NameFinderME nameFinder = new NameFinderME(model);
ขั้นตอนที่ 3: ค้นหาชื่อในประโยค
find() วิธีการของ NameFinderMEคลาสถูกใช้เพื่อตรวจหาชื่อในข้อความดิบที่ส่งผ่านไป วิธีนี้ยอมรับตัวแปร String เป็นพารามิเตอร์
เรียกใช้วิธีนี้โดยส่งรูปแบบ String ของประโยคไปยังวิธีนี้
//Finding the names in the sentence
Span nameSpans[] = nameFinder.find(sentence);
ขั้นตอนที่ 4: พิมพ์ช่วงของชื่อในประโยค
find() วิธีการของ NameFinderMEคลาสส่งคืนอาร์เรย์ของอ็อบเจ็กต์ประเภท Span คลาสที่มีชื่อว่า Span of theopennlp.tools.util แพคเกจใช้ในการจัดเก็บไฟล์ start และ end จำนวนเต็มของชุด
คุณสามารถจัดเก็บช่วงเวลาที่ส่งคืนโดยไฟล์ find() วิธีการในอาร์เรย์ Span และพิมพ์ดังที่แสดงในบล็อกรหัสต่อไปนี้
//Printing the sentences and their spans of a sentence
for (Span span : spans)
System.out.println(paragraph.substring(span);
NER Example
ต่อไปนี้เป็นโปรแกรมที่อ่านประโยคที่กำหนดและจดจำช่วงของชื่อบุคคลที่อยู่ในนั้น บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อNameFinderME_Example.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.namefind.NameFinderME;
import opennlp.tools.namefind.TokenNameFinderModel;
import opennlp.tools.util.Span;
public class NameFinderME_Example {
public static void main(String args[]) throws Exception{
/Loading the NER - Person model InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-ner-person.bin");
TokenNameFinderModel model = new TokenNameFinderModel(inputStream);
//Instantiating the NameFinder class
NameFinderME nameFinder = new NameFinderME(model);
//Getting the sentence in the form of String array
String [] sentence = new String[]{
"Mike",
"and",
"Smith",
"are",
"good",
"friends"
};
//Finding the names in the sentence
Span nameSpans[] = nameFinder.find(sentence);
//Printing the spans of the names in the sentence
for(Span s: nameSpans)
System.out.println(s.toString());
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac NameFinderME_Example.java
java NameFinderME_Example
ในการดำเนินการโปรแกรมด้านบนจะอ่านสตริงที่กำหนด (ข้อความดิบ) ตรวจจับชื่อของบุคคลที่อยู่ในนั้นและแสดงตำแหน่ง (ช่วง) ดังที่แสดงด้านล่าง
[0..1) person
[2..3) person
ชื่อพร้อมตำแหน่ง
substring() วิธีการของคลาส String ยอมรับไฟล์ begin และ end offsetsและส่งคืนสตริงที่เกี่ยวข้อง เราสามารถใช้วิธีนี้เพื่อพิมพ์ชื่อและช่วง (ตำแหน่ง) ร่วมกันดังแสดงในบล็อกโค้ดต่อไปนี้
for(Span s: nameSpans)
System.out.println(s.toString()+" "+tokens[s.getStart()]);
ต่อไปนี้เป็นโปรแกรมตรวจจับชื่อจากข้อความดิบที่กำหนดและแสดงพร้อมกับตำแหน่ง บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อNameFinderSentences.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.namefind.NameFinderME;
import opennlp.tools.namefind.TokenNameFinderModel;
import opennlp.tools.tokenize.TokenizerME;
import opennlp.tools.tokenize.TokenizerModel;
import opennlp.tools.util.Span;
public class NameFinderSentences {
public static void main(String args[]) throws Exception{
//Loading the tokenizer model
InputStream inputStreamTokenizer = new
FileInputStream("C:/OpenNLP_models/entoken.bin");
TokenizerModel tokenModel = new TokenizerModel(inputStreamTokenizer);
//Instantiating the TokenizerME class
TokenizerME tokenizer = new TokenizerME(tokenModel);
//Tokenizing the sentence in to a string array
String sentence = "Mike is senior programming
manager and Rama is a clerk both are working at
Tutorialspoint";
String tokens[] = tokenizer.tokenize(sentence);
//Loading the NER-person model
InputStream inputStreamNameFinder = new
FileInputStream("C:/OpenNLP_models/enner-person.bin");
TokenNameFinderModel model = new TokenNameFinderModel(inputStreamNameFinder);
//Instantiating the NameFinderME class
NameFinderME nameFinder = new NameFinderME(model);
//Finding the names in the sentence
Span nameSpans[] = nameFinder.find(tokens);
//Printing the names and their spans in a sentence
for(Span s: nameSpans)
System.out.println(s.toString()+" "+tokens[s.getStart()]);
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac NameFinderSentences.java
java NameFinderSentences
ในการดำเนินการโปรแกรมด้านบนจะอ่านสตริงที่กำหนด (ข้อความดิบ) ตรวจจับชื่อของบุคคลที่อยู่ในนั้นและแสดงตำแหน่ง (ช่วง) ดังที่แสดงด้านล่าง
[0..1) person Mike
การค้นหาชื่อสถานที่
โดยการโหลดโมเดลต่างๆคุณสามารถตรวจจับเอนทิตีที่มีชื่อต่างๆได้ ต่อไปนี้เป็นโปรแกรม Java ที่โหลดไฟล์en-ner-location.binจำลองและตรวจพบชื่อสถานที่ในประโยคที่กำหนด บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อLocationFinder.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.namefind.NameFinderME;
import opennlp.tools.namefind.TokenNameFinderModel;
import opennlp.tools.tokenize.TokenizerME;
import opennlp.tools.tokenize.TokenizerModel;
import opennlp.tools.util.Span;
public class LocationFinder {
public static void main(String args[]) throws Exception{
InputStream inputStreamTokenizer = new
FileInputStream("C:/OpenNLP_models/entoken.bin");
TokenizerModel tokenModel = new TokenizerModel(inputStreamTokenizer);
//String paragraph = "Mike and Smith are classmates";
String paragraph = "Tutorialspoint is located in Hyderabad";
//Instantiating the TokenizerME class
TokenizerME tokenizer = new TokenizerME(tokenModel);
String tokens[] = tokenizer.tokenize(paragraph);
//Loading the NER-location moodel
InputStream inputStreamNameFinder = new
FileInputStream("C:/OpenNLP_models/en- ner-location.bin");
TokenNameFinderModel model = new TokenNameFinderModel(inputStreamNameFinder);
//Instantiating the NameFinderME class
NameFinderME nameFinder = new NameFinderME(model);
//Finding the names of a location
Span nameSpans[] = nameFinder.find(tokens);
//Printing the spans of the locations in the sentence
for(Span s: nameSpans)
System.out.println(s.toString()+" "+tokens[s.getStart()]);
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac LocationFinder.java
java LocationFinder
ในการดำเนินการโปรแกรมด้านบนจะอ่านสตริงที่กำหนด (ข้อความดิบ) ตรวจจับชื่อของบุคคลที่อยู่ในนั้นและแสดงตำแหน่ง (ช่วง) ดังที่แสดงด้านล่าง
[4..5) location Hyderabad
ความน่าจะเป็นของ NameFinder
probs()วิธีการของ NameFinderME คลาสใช้เพื่อรับความน่าจะเป็นของลำดับที่ถอดรหัสล่าสุด
double[] probs = nameFinder.probs();
ต่อไปนี้เป็นโปรแกรมพิมพ์ความน่าจะเป็น บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อTokenizerMEProbs.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.tokenize.TokenizerME;
import opennlp.tools.tokenize.TokenizerModel;
import opennlp.tools.util.Span;
public class TokenizerMEProbs {
public static void main(String args[]) throws Exception{
String sent = "Hello John how are you welcome to Tutorialspoint";
//Loading the Tokenizer model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-token.bin");
TokenizerModel tokenModel = new TokenizerModel(inputStream);
//Instantiating the TokenizerME class
TokenizerME tokenizer = new TokenizerME(tokenModel);
//Retrieving the positions of the tokens
Span tokens[] = tokenizer.tokenizePos(sent);
//Getting the probabilities of the recent calls to tokenizePos() method
double[] probs = tokenizer.getTokenProbabilities();
//Printing the spans of tokens
for( Span token : tokens)
System.out.println(token +"
"+sent.substring(token.getStart(), token.getEnd()));
System.out.println(" ");
for(int i = 0; i<probs.length; i++)
System.out.println(probs[i]);
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac TokenizerMEProbs.java
java TokenizerMEProbs
ในการดำเนินการโปรแกรมด้านบนจะอ่านสตริงที่กำหนดโทเค็นประโยคและพิมพ์ออกมา นอกจากนี้ยังส่งกลับค่าความน่าจะเป็นของลำดับที่ถอดรหัสล่าสุดดังที่แสดงด้านล่าง
[0..5) Hello
[6..10) John
[11..14) how
[15..18) are
[19..22) you
[23..30) welcome
[31..33) to
[34..48) Tutorialspoint
1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
เมื่อใช้ OpenNLP คุณยังสามารถตรวจจับส่วนต่างๆของคำพูดของประโยคที่กำหนดและพิมพ์ได้ แทนที่จะใช้ชื่อเต็มของส่วนของคำพูด OpenNLP ใช้รูปแบบสั้น ๆ ของแต่ละส่วนของคำพูด ตารางต่อไปนี้ระบุถึงส่วนต่างๆของสุนทรพจน์ที่ OpenNLP ตรวจพบและความหมาย
ส่วนของคำพูด | ความหมายของส่วนต่างๆของคำพูด |
---|---|
NN | นามเอกพจน์หรือมวล |
DT | ตัวกำหนด |
VB | คำกริยารูปฐาน |
VBD | กริยาอดีตกาล |
VBZ | กริยาบุคคลที่สามเอกพจน์ปัจจุบัน |
ใน | บุพบทหรืออนุพันธ์ร่วม |
NNP | คำนามเอกพจน์ |
ถึง | ถึง |
JJ | คำคุณศัพท์ |
การติดแท็กส่วนต่างๆของคำพูด
ในการแท็กส่วนของคำพูดของประโยค OpenNLP ใช้โมเดลไฟล์ชื่อ en-posmaxent.bin. นี่คือรูปแบบที่กำหนดไว้ล่วงหน้าซึ่งได้รับการฝึกฝนให้ติดแท็กส่วนของคำพูดของข้อความดิบที่กำหนด
POSTaggerME คลาสของ opennlp.tools.postagแพ็กเกจใช้เพื่อโหลดโมเดลนี้และแท็กส่วนของคำพูดของข้อความดิบที่กำหนดโดยใช้ไลบรารี OpenNLP ในการทำเช่นนั้นคุณต้อง -
โหลดไฟล์ en-pos-maxent.bin แบบจำลองโดยใช้ POSModel ชั้นเรียน
เริ่มต้นไฟล์ POSTaggerME ชั้นเรียน
Tokenize ประโยค
สร้างแท็กโดยใช้ tag() วิธี.
พิมพ์โทเค็นและแท็กโดยใช้ POSSample ชั้นเรียน
ต่อไปนี้เป็นขั้นตอนที่ต้องปฏิบัติตามเพื่อเขียนโปรแกรมที่แท็กส่วนต่างๆของคำพูดในข้อความดิบที่กำหนดโดยใช้ไฟล์ POSTaggerME ชั้นเรียน
ขั้นตอนที่ 1: โหลดโมเดล
โมเดลสำหรับการติดแท็ก POS แสดงโดยคลาสที่มีชื่อว่า POSModelซึ่งเป็นของแพ็คเกจ opennlp.tools.postag.
ในการโหลดโมเดลโทเค็นไนเซอร์ -
สร้างไฟล์ InputStream อ็อบเจ็กต์ของโมเดล (สร้างอินสแตนซ์ FileInputStream และส่งเส้นทางของโมเดลในรูปแบบ String ไปยังตัวสร้าง)
เริ่มต้นไฟล์ POSModel ชั้นเรียนและผ่าน InputStream (วัตถุ) ของโมเดลเป็นพารามิเตอร์ของตัวสร้างดังที่แสดงในบล็อกโค้ดต่อไปนี้ -
//Loading Parts of speech-maxent model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModel(inputStream);
ขั้นตอนที่ 2: สร้างอินสแตนซ์คลาส POSTaggerME
POSTaggerME คลาสของแพ็คเกจ opennlp.tools.postagใช้เพื่อทำนายส่วนของคำพูดของข้อความดิบที่กำหนด ใช้เอนโทรปีสูงสุดในการตัดสินใจ
สร้างอินสแตนซ์คลาสนี้และส่งผ่านโมเดลอ็อบเจ็กต์ที่สร้างขึ้นในขั้นตอนก่อนหน้าดังที่แสดงด้านล่าง -
//Instantiating POSTaggerME class
POSTaggerME tagger = new POSTaggerME(model);
ขั้นตอนที่ 3: การแปลงประโยค
tokenize() วิธีการของ whitespaceTokenizerคลาสใช้เพื่อสร้างโทเค็นข้อความดิบที่ส่งผ่านไป วิธีนี้ยอมรับตัวแปร String เป็นพารามิเตอร์และส่งคืนอาร์เรย์ของ Strings (โทเค็น)
เริ่มต้นไฟล์ whitespaceTokenizer คลาสและเรียกใช้เมธอดนี้โดยส่งรูปแบบสตริงของประโยคไปยังเมธอดนี้
//Tokenizing the sentence using WhitespaceTokenizer class
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
ขั้นตอนที่ 4: สร้างแท็ก
tag() วิธีการของ whitespaceTokenizerคลาสกำหนดแท็ก POS ให้กับประโยคของโทเค็น วิธีนี้ยอมรับอาร์เรย์ของโทเค็น (String) เป็นพารามิเตอร์และส่งคืนแท็ก (อาร์เรย์)
เรียกใช้ไฟล์ tag() วิธีการโดยส่งโทเค็นที่สร้างขึ้นในขั้นตอนก่อนหน้าไปยังมัน
//Generating tags
String[] tags = tagger.tag(tokens);
ขั้นตอนที่ 5: การพิมพ์โทเค็นและแท็ก
POSSampleคลาสแสดงถึงประโยคที่ติดแท็ก POS ในการสร้างอินสแตนซ์คลาสนี้เราต้องการอาร์เรย์ของโทเค็น (ของข้อความ) และอาร์เรย์ของแท็ก
toString()วิธีการของคลาสนี้ส่งคืนประโยคที่ติดแท็ก สร้างอินสแตนซ์คลาสนี้โดยส่งโทเค็นและอาร์เรย์แท็กที่สร้างขึ้นในขั้นตอนก่อนหน้าและเรียกใช้toString() วิธีการดังที่แสดงในบล็อกรหัสต่อไปนี้
//Instantiating the POSSample class
POSSample sample = new POSSample(tokens, tags);
System.out.println(sample.toString());
Example
ต่อไปนี้เป็นโปรแกรมที่แท็กส่วนของคำพูดในข้อความดิบที่กำหนด บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อPosTaggerExample.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSSample;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class PosTaggerExample {
public static void main(String args[]) throws Exception{
//Loading Parts of speech-maxent model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModel(inputStream);
//Instantiating POSTaggerME class
POSTaggerME tagger = new POSTaggerME(model);
String sentence = "Hi welcome to Tutorialspoint";
//Tokenizing the sentence using WhitespaceTokenizer class
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Generating tags
String[] tags = tagger.tag(tokens);
//Instantiating the POSSample class
POSSample sample = new POSSample(tokens, tags);
System.out.println(sample.toString());
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac PosTaggerExample.java
java PosTaggerExample
ในการดำเนินการโปรแกรมด้านบนจะอ่านข้อความที่กำหนดและตรวจจับส่วนของคำพูดของประโยคเหล่านี้และแสดงดังที่แสดงด้านล่าง
Hi_NNP welcome_JJ to_TO Tutorialspoint_VB
ประสิทธิภาพ POS Tagger
ต่อไปนี้เป็นโปรแกรมที่แท็กส่วนของคำพูดของข้อความดิบที่กำหนด นอกจากนี้ยังตรวจสอบประสิทธิภาพและแสดงประสิทธิภาพของแท็กเกอร์ บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อPosTagger_Performance.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.cmdline.PerformanceMonitor;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSSample;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class PosTagger_Performance {
public static void main(String args[]) throws Exception{
//Loading Parts of speech-maxent model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModel(inputStream);
//Creating an object of WhitespaceTokenizer class
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Instantiating POSTaggerME class
POSTaggerME tagger = new POSTaggerME(model);
//Generating tags
String[] tags = tagger.tag(tokens);
//Instantiating POSSample class
POSSample sample = new POSSample(tokens, tags);
System.out.println(sample.toString());
//Monitoring the performance of POS tagger
PerformanceMonitor perfMon = new PerformanceMonitor(System.err, "sent");
perfMon.start();
perfMon.incrementCounter();
perfMon.stopAndPrintFinalResult();
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac PosTaggerExample.java
java PosTaggerExample
ในการดำเนินการโปรแกรมข้างต้นจะอ่านข้อความที่กำหนดและแท็กส่วนของคำพูดของประโยคเหล่านี้และแสดง นอกจากนี้ยังตรวจสอบประสิทธิภาพของ POS tagger และแสดง
Hi_NNP welcome_JJ to_TO Tutorialspoint_VB
Average: 0.0 sent/s
Total: 1 sent
Runtime: 0.0s
ความน่าจะเป็นของ POS Tagger
probs() วิธีการของ POSTaggerME คลาสใช้เพื่อค้นหาความน่าจะเป็นสำหรับแต่ละแท็กของประโยคที่แท็กล่าสุด
//Getting the probabilities of the recent calls to tokenizePos() method
double[] probs = detector.getSentenceProbabilities();
ต่อไปนี้เป็นโปรแกรมที่แสดงความน่าจะเป็นสำหรับแต่ละแท็กของประโยคสุดท้ายที่ติดแท็ก บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อPosTaggerProbs.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSSample;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class PosTaggerProbs {
public static void main(String args[]) throws Exception{
//Loading Parts of speech-maxent model
InputStream inputStream = new FileInputStream("C:/OpenNLP_mdl/en-pos-maxent.bin");
POSModel model = new POSModel(inputStream);
//Creating an object of WhitespaceTokenizer class
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Instantiating POSTaggerME class
POSTaggerME tagger = new POSTaggerME(model);
//Generating tags
String[] tags = tagger.tag(tokens);
//Instantiating the POSSample class
POSSample sample = new POSSample(tokens, tags);
System.out.println(sample.toString());
//Probabilities for each tag of the last tagged sentence.
double [] probs = tagger.probs();
System.out.println(" ");
//Printing the probabilities
for(int i = 0; i<probs.length; i++)
System.out.println(probs[i]);
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac TokenizerMEProbs.java
java TokenizerMEProbs
ในการดำเนินการโปรแกรมด้านบนจะอ่านข้อความดิบที่กำหนดแท็กส่วนของคำพูดของแต่ละโทเค็นในนั้นและแสดง นอกจากนี้ยังแสดงความน่าจะเป็นสำหรับแต่ละส่วนของคำพูดในประโยคที่กำหนดดังแสดงด้านล่าง
Hi_NNP welcome_JJ to_TO Tutorialspoint_VB
0.6416834779738033
0.42983612874819177
0.8584513635863117
0.4394784478206072
เมื่อใช้ OpenNLP API คุณสามารถแยกวิเคราะห์ประโยคที่กำหนดได้ ในบทนี้เราจะพูดถึงวิธีการแยกวิเคราะห์ข้อความดิบโดยใช้ OpenNLP API
การแยกวิเคราะห์ข้อความดิบโดยใช้ OpenNLP Library
ในการตรวจจับประโยค OpenNLP ใช้โมเดลที่กำหนดไว้ล่วงหน้าไฟล์ชื่อ en-parserchunking.bin. นี่คือโมเดลที่กำหนดไว้ล่วงหน้าซึ่งได้รับการฝึกฝนให้แยกวิเคราะห์ข้อความดิบที่กำหนด
Parser คลาสของ opennlp.tools.Parser แพ็กเกจใช้เพื่อเก็บองค์ประกอบการแยกวิเคราะห์และไฟล์ ParserTool คลาสของ opennlp.tools.cmdline.parser แพ็กเกจใช้เพื่อแยกวิเคราะห์เนื้อหา
ต่อไปนี้เป็นขั้นตอนที่ต้องปฏิบัติตามเพื่อเขียนโปรแกรมซึ่งแยกวิเคราะห์ข้อความดิบที่กำหนดโดยใช้ไฟล์ ParserTool ชั้นเรียน
ขั้นตอนที่ 1: กำลังโหลดโมเดล
โมเดลสำหรับการแยกวิเคราะห์ข้อความแสดงโดยคลาสที่มีชื่อว่า ParserModelซึ่งเป็นของแพ็คเกจ opennlp.tools.parser.
ในการโหลดโมเดลโทเค็นไนเซอร์ -
สร้างไฟล์ InputStream อ็อบเจ็กต์ของโมเดล (สร้างอินสแตนซ์ FileInputStream และส่งเส้นทางของโมเดลในรูปแบบ String ไปยังตัวสร้าง)
เริ่มต้นไฟล์ ParserModel ชั้นเรียนและผ่าน InputStream (วัตถุ) ของโมเดลเป็นพารามิเตอร์ของตัวสร้างดังที่แสดงในบล็อกโค้ดต่อไปนี้
//Loading parser model
InputStream inputStream = new FileInputStream(".../en-parserchunking.bin");
ParserModel model = new ParserModel(inputStream);
ขั้นตอนที่ 2: สร้างออบเจ็กต์ของคลาส Parser
Parser คลาสของแพ็คเกจ opennlp.tools.parserแสดงถึงโครงสร้างข้อมูลสำหรับการเก็บองค์ประกอบการแยกวิเคราะห์ คุณสามารถสร้างออบเจ็กต์ของคลาสนี้โดยใช้สแตติกcreate() วิธีการของ ParserFactory ชั้นเรียน
เรียกใช้ไฟล์ create() วิธีการของ ParserFactory โดยส่งผ่านโมเดลวัตถุที่สร้างขึ้นในขั้นตอนก่อนหน้าดังที่แสดงด้านล่าง -
//Creating a parser Parser parser = ParserFactory.create(model);
ขั้นตอนที่ 3: แยกวิเคราะห์ประโยค
parseLine() วิธีการของ ParserToolคลาสใช้เพื่อแยกวิเคราะห์ข้อความดิบใน OpenNLP วิธีนี้ยอมรับ -
ตัวแปร String ที่แสดงถึงข้อความที่จะแยกวิเคราะห์
วัตถุแยกวิเคราะห์
จำนวนเต็มแทนจำนวนการแยกวิเคราะห์ที่จะดำเนินการ
เรียกใช้เมธอดนี้โดยส่งผ่านประโยคไปยังพารามิเตอร์ต่อไปนี้: ออบเจ็กต์แยกวิเคราะห์ที่สร้างขึ้นในขั้นตอนก่อนหน้านี้และจำนวนเต็มแทนจำนวนการแยกวิเคราะห์ที่ต้องการเพื่อดำเนินการ
//Parsing the sentence
String sentence = "Tutorialspoint is the largest tutorial library.";
Parse topParses[] = ParserTool.parseLine(sentence, parser, 1);
Example
ต่อไปนี้เป็นโปรแกรมที่แยกวิเคราะห์ข้อความดิบที่กำหนด บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อParserExample.java.
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.cmdline.parser.ParserTool;
import opennlp.tools.parser.Parse;
import opennlp.tools.parser.Parser;
import opennlp.tools.parser.ParserFactory;
import opennlp.tools.parser.ParserModel;
public class ParserExample {
public static void main(String args[]) throws Exception{
//Loading parser model
InputStream inputStream = new FileInputStream(".../en-parserchunking.bin");
ParserModel model = new ParserModel(inputStream);
//Creating a parser
Parser parser = ParserFactory.create(model);
//Parsing the sentence
String sentence = "Tutorialspoint is the largest tutorial library.";
Parse topParses[] = ParserTool.parseLine(sentence, parser, 1);
for (Parse p : topParses)
p.show();
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac ParserExample.java
java ParserExample
ในการดำเนินการโปรแกรมด้านบนจะอ่านข้อความดิบที่กำหนดแยกวิเคราะห์และแสดงผลลัพธ์ต่อไปนี้ -
(TOP (S (NP (NN Tutorialspoint)) (VP (VBZ is) (NP (DT the) (JJS largest) (NN
tutorial) (NN library.)))))
การแบ่งประโยคหมายถึงการแบ่ง / แบ่งประโยคออกเป็นส่วน ๆ ของคำเช่นกลุ่มคำและกลุ่มคำกริยา
การแบ่งประโยคโดยใช้ OpenNLP
ในการตรวจจับประโยค OpenNLP ใช้โมเดลไฟล์ชื่อ en-chunker.bin. นี่คือรูปแบบที่กำหนดไว้ล่วงหน้าซึ่งได้รับการฝึกฝนให้แยกประโยคในข้อความดิบที่กำหนด
opennlp.tools.chunker แพคเกจประกอบด้วยคลาสและอินเทอร์เฟซที่ใช้เพื่อค้นหาคำอธิบายประกอบวากยสัมพันธ์ที่ไม่เรียกซ้ำเช่นกลุ่มวลีคำนาม
คุณสามารถแบ่งประโยคโดยใช้วิธีการ chunk() ของ ChunkerMEชั้นเรียน วิธีนี้ยอมรับโทเค็นของประโยคและแท็ก POS เป็นพารามิเตอร์ ดังนั้นก่อนที่จะเริ่มกระบวนการแยกชิ้นส่วนก่อนอื่นคุณต้องสร้างประโยคให้เป็นโทเค็นและสร้างแท็ก POS ของส่วนนั้น
ในการแยกประโยคโดยใช้ไลบรารี OpenNLP คุณต้อง -
Tokenize ประโยค
สร้างแท็ก POS สำหรับมัน
โหลดไฟล์ en-chunker.bin แบบจำลองโดยใช้ ChunkerModel ชั้นเรียน
เริ่มต้นไฟล์ ChunkerME ชั้นเรียน
แยกประโยคโดยใช้ chunk() วิธีการของคลาสนี้
ต่อไปนี้เป็นขั้นตอนที่ต้องปฏิบัติตามเพื่อเขียนโปรแกรมเพื่อเรียงประโยคจากข้อความดิบที่กำหนด
ขั้นตอนที่ 1: การแปลงประโยค
Tokenize ประโยคโดยใช้ tokenize() วิธีการของ whitespaceTokenizer คลาสดังที่แสดงในบล็อกรหัสต่อไปนี้
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
ขั้นตอนที่ 2: การสร้างแท็ก POS
สร้างแท็ก POS ของประโยคโดยใช้ tag() วิธีการของ POSTaggerME คลาสดังที่แสดงในบล็อกรหัสต่อไปนี้
//Generating the POS tags
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModelLoader().load(file);
//Constructing the tagger
POSTaggerME tagger = new POSTaggerME(model);
//Generating tags from the tokens
String[] tags = tagger.tag(tokens);
ขั้นตอนที่ 3: การโหลดโมเดล
โมเดลสำหรับการแบ่งประโยคจะแสดงโดยคลาสที่มีชื่อว่า ChunkerModelซึ่งเป็นของแพ็คเกจ opennlp.tools.chunker.
ในการโหลดแบบจำลองการตรวจจับประโยค -
สร้างไฟล์ InputStream อ็อบเจ็กต์ของโมเดล (สร้างอินสแตนซ์ FileInputStream และส่งเส้นทางของโมเดลในรูปแบบ String ไปยังตัวสร้าง)
เริ่มต้นไฟล์ ChunkerModel ชั้นเรียนและผ่าน InputStream (วัตถุ) ของโมเดลเป็นพารามิเตอร์ของตัวสร้างดังที่แสดงในบล็อกโค้ดต่อไปนี้ -
//Loading the chunker model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel chunkerModel = new ChunkerModel(inputStream);
ขั้นตอนที่ 4: สร้างอินสแตนซ์คลาส chunkerME
chunkerME คลาสของแพ็คเกจ opennlp.tools.chunkerมีวิธีการแยกประโยค นี่คือกลุ่มข้อมูลที่อิงตามเอนโทรปีสูงสุด
สร้างอินสแตนซ์คลาสนี้และส่งผ่านโมเดลอ็อบเจ็กต์ที่สร้างในขั้นตอนก่อนหน้า
//Instantiate the ChunkerME class
ChunkerME chunkerME = new ChunkerME(chunkerModel);
ขั้นตอนที่ 5: การแบ่งประโยค
chunk() วิธีการของ ChunkerMEคลาสใช้เพื่อแยกประโยคในข้อความดิบที่ส่งผ่านไป วิธีนี้ยอมรับอาร์เรย์สตริงสองรายการที่แสดงโทเค็นและแท็กเป็นพารามิเตอร์
เรียกใช้เมธอดนี้โดยส่งอาร์เรย์โทเค็นและอาร์เรย์แท็กที่สร้างในขั้นตอนก่อนหน้าเป็นพารามิเตอร์
//Generating the chunks
String result[] = chunkerME.chunk(tokens, tags);
Example
ต่อไปนี้เป็นโปรแกรมที่จะแยกประโยคในข้อความดิบที่กำหนด บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อChunkerExample.java.
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import opennlp.tools.chunker.ChunkerME;
import opennlp.tools.chunker.ChunkerModel;
import opennlp.tools.cmdline.postag.POSModelLoader;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class ChunkerExample{
public static void main(String args[]) throws IOException {
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Generating the POS tags
//Load the parts of speech model
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModelLoader().load(file);
//Constructing the tagger
POSTaggerME tagger = new POSTaggerME(model);
//Generating tags from the tokens
String[] tags = tagger.tag(tokens);
//Loading the chunker model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel chunkerModel = new ChunkerModel(inputStream);
//Instantiate the ChunkerME class
ChunkerME chunkerME = new ChunkerME(chunkerModel);
//Generating the chunks
String result[] = chunkerME.chunk(tokens, tags);
for (String s : result)
System.out.println(s);
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac ChunkerExample.java
java ChunkerExample
ในการดำเนินการโปรแกรมด้านบนจะอ่าน String ที่กำหนดและแยกประโยคในนั้นและแสดงดังที่แสดงด้านล่าง
Loading POS Tagger model ... done (1.040s)
B-NP
I-NP
B-VP
I-VP
การตรวจจับตำแหน่งของโทเค็น
นอกจากนี้เรายังสามารถตรวจจับตำแหน่งหรือช่วงของชิ้นงานโดยใช้ไฟล์ chunkAsSpans() วิธีการของ ChunkerMEชั้นเรียน วิธีนี้ส่งคืนอาร์เรย์ของอ็อบเจ็กต์ประเภท Span คลาสที่มีชื่อว่า Span of theopennlp.tools.util แพคเกจใช้ในการจัดเก็บไฟล์ start และ end จำนวนเต็มของชุด
คุณสามารถจัดเก็บช่วงเวลาที่ส่งคืนโดยไฟล์ chunkAsSpans() วิธีการในอาร์เรย์ Span และพิมพ์ดังที่แสดงในบล็อกรหัสต่อไปนี้
//Generating the tagged chunk spans
Span[] span = chunkerME.chunkAsSpans(tokens, tags);
for (Span s : span)
System.out.println(s.toString());
Example
ต่อไปนี้เป็นโปรแกรมที่ตรวจจับประโยคในข้อความดิบที่กำหนด บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อChunkerSpansEample.java.
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import opennlp.tools.chunker.ChunkerME;
import opennlp.tools.chunker.ChunkerModel;
import opennlp.tools.cmdline.postag.POSModelLoader;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
import opennlp.tools.util.Span;
public class ChunkerSpansEample{
public static void main(String args[]) throws IOException {
//Load the parts of speech model
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModelLoader().load(file);
//Constructing the tagger
POSTaggerME tagger = new POSTaggerME(model);
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Generating tags from the tokens
String[] tags = tagger.tag(tokens);
//Loading the chunker model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel chunkerModel = new ChunkerModel(inputStream);
ChunkerME chunkerME = new ChunkerME(chunkerModel);
//Generating the tagged chunk spans
Span[] span = chunkerME.chunkAsSpans(tokens, tags);
for (Span s : span)
System.out.println(s.toString());
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac ChunkerSpansEample.java
java ChunkerSpansEample
ในการดำเนินการโปรแกรมด้านบนจะอ่านสตริงที่กำหนดและช่วงของชิ้นส่วนในนั้นและแสดงผลลัพธ์ต่อไปนี้ -
Loading POS Tagger model ... done (1.059s)
[0..2) NP
[2..4) VP
Chunker Probability Detection
probs() วิธีการของ ChunkerME คลาสส่งคืนความน่าจะเป็นของลำดับที่ถอดรหัสล่าสุด
//Getting the probabilities of the last decoded sequence
double[] probs = chunkerME.probs();
ต่อไปนี้เป็นโปรแกรมพิมพ์ความน่าจะเป็นของลำดับที่ถอดรหัสล่าสุดโดยไฟล์ chunker. บันทึกโปรแกรมนี้ในไฟล์ที่มีชื่อChunkerProbsExample.java.
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import opennlp.tools.chunker.ChunkerME;
import opennlp.tools.chunker.ChunkerModel;
import opennlp.tools.cmdline.postag.POSModelLoader;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class ChunkerProbsExample{
public static void main(String args[]) throws IOException {
//Load the parts of speech model
File file = new File("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModelLoader().load(file);
//Constructing the tagger
POSTaggerME tagger = new POSTaggerME(model);
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Generating tags from the tokens
String[] tags = tagger.tag(tokens);
//Loading the chunker model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-chunker.bin");
ChunkerModel cModel = new ChunkerModel(inputStream);
ChunkerME chunkerME = new ChunkerME(cModel);
//Generating the chunk tags
chunkerME.chunk(tokens, tags);
//Getting the probabilities of the last decoded sequence
double[] probs = chunkerME.probs();
for(int i = 0; i<probs.length; i++)
System.out.println(probs[i]);
}
}
คอมไพล์และเรียกใช้ไฟล์ Java ที่บันทึกไว้จากพรอมต์คำสั่งโดยใช้คำสั่งต่อไปนี้ -
javac ChunkerProbsExample.java
java ChunkerProbsExample
ในการดำเนินการโปรแกรมด้านบนจะอ่านสตริงที่กำหนดแยกเป็นชิ้น ๆ และพิมพ์ความน่าจะเป็นของลำดับที่ถอดรหัสล่าสุด
0.9592746040797778
0.6883933131241501
0.8830563473996004
0.8951150529746051
OpenNLP มี Command Line Interface (CLI) เพื่อดำเนินการต่าง ๆ ผ่านทางบรรทัดคำสั่ง ในบทนี้เราจะนำตัวอย่างบางส่วนเพื่อแสดงให้เห็นว่าเราสามารถใช้ OpenNLP Command Line Interface ได้อย่างไร
Tokenizing
input.txt
Hi. How are you? Welcome to Tutorialspoint. We provide free tutorials on various technologies
ไวยากรณ์
> opennlp TokenizerME path_for_models../en-token.bin <inputfile..> outputfile..
คำสั่ง
C:\> opennlp TokenizerME C:\OpenNLP_models/en-token.bin <input.txt >output.txt
เอาท์พุท
Loading Tokenizer model ... done (0.207s)
Average: 214.3 sent/s
Total: 3 sent
Runtime: 0.014s
output.txt
Hi . How are you ? Welcome to Tutorialspoint . We provide free tutorials on various technologies
การตรวจจับประโยค
input.txt
Hi. How are you? Welcome to Tutorialspoint. We provide free tutorials on various technologies
ไวยากรณ์
> opennlp SentenceDetector path_for_models../en-token.bin <inputfile..> outputfile..
คำสั่ง
C:\> opennlp SentenceDetector C:\OpenNLP_models/en-sent.bin <input.txt > output_sendet.txt
เอาต์พุต
Loading Sentence Detector model ... done (0.067s)
Average: 750.0 sent/s
Total: 3 sent
Runtime: 0.004s
Output_sendet.txt
Hi. How are you?
Welcome to Tutorialspoint.
We provide free tutorials on various technologies
ชื่อการรับรู้เอนทิตี
input.txt
<START:person> <START:person> Mike <END> <END> is senior programming manager and
<START:person> Rama <END> is a clerk both are working at Tutorialspoint
ไวยากรณ์
> opennlp TokenNameFinder path_for_models../en-token.bin <inputfile..
คำสั่ง
C:\>opennlp TokenNameFinder C:\OpenNLP_models\en-ner-person.bin <input_namefinder.txt
เอาต์พุต
Loading Token Name Finder model ... done (0.730s)
<START:person> <START:person> Mike <END> <END> is senior programming manager and
<START:person> Rama <END> is a clerk both are working at Tutorialspoint
Average: 55.6 sent/s
Total: 1 sent
Runtime: 0.018s
ส่วนต่างๆของการติดแท็กคำพูด
Input.txt
Hi. How are you? Welcome to Tutorialspoint. We provide free tutorials on various technologies
ไวยากรณ์
> opennlp POSTagger path_for_models../en-token.bin <inputfile..
คำสั่ง
C:\>opennlp POSTagger C:\OpenNLP_models/en-pos-maxent.bin < input.txt
เอาต์พุต
Loading POS Tagger model ... done (1.315s)
Hi._NNP How_WRB are_VBP you?_JJ Welcome_NNP to_TO Tutorialspoint._NNP We_PRP
provide_VBP free_JJ tutorials_NNS on_IN various_JJ technologies_NNS
Average: 66.7 sent/s
Total: 1 sent
Runtime: 0.015s