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 วิธีนี้ยอมรับ -

  • ตัวแปร String ที่แสดงถึงข้อความที่จะแยกวิเคราะห์
  • วัตถุแยกวิเคราะห์
  • จำนวนเต็มแทนจำนวนของการแยกวิเคราะห์ที่จะดำเนินการ

การจัดเป็นกลุ่ม

คลาส ChunkerModel

คลาสนี้แสดงถึงโมเดลที่กำหนดไว้ล่วงหน้าซึ่งใช้ในการแบ่งประโยคออกเป็นกลุ่มย่อย ๆ คลาสนี้เป็นของแพ็คเกจopennlp.tools.chunker.

ตัวสร้างของคลาสนี้ยอมรับไฟล์ InputStream วัตถุของ chunker ไฟล์โมเดล (enchunker.bin)

คลาส ChunkerME

คลาสนี้เป็นของแพ็กเกจที่ชื่อ opennlp.tools.chunker และใช้ในการแบ่งประโยคที่กำหนดให้เป็นชิ้นเล็ก ๆ

ส. เลขที่ วิธีการและคำอธิบาย
1

chunk()

วิธีนี้ใช้เพื่อแบ่งประโยคที่กำหนดให้เป็นชิ้นเล็ก ๆ ยอมรับโทเค็นของประโยคและPศิลปะ OSแท็ก 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