OpenNLP - Hızlı Kılavuz

NLP, web sayfaları ve metin belgeleri gibi doğal dil kaynaklarından anlamlı ve faydalı bilgiler elde etmek için kullanılan bir dizi araçtır.

Açık NLP nedir?

Apaçi OpenNLPdoğal dil metnini işlemek için kullanılan açık kaynaklı bir Java kitaplığıdır. Bu kitaplığı kullanarak verimli bir metin işleme hizmeti oluşturabilirsiniz.

OpenNLP, belirteçleme, cümle bölümleme, konuşma parçası etiketleme, adlandırılmış varlık çıkarma, parçalama, ayrıştırma ve ortak referans çözümleme gibi hizmetler sağlar.

OpenNLP'nin Özellikleri

OpenNLP'nin dikkate değer özellikleri şunlardır -

  • Named Entity Recognition (NER) - Açık NLP, sorguları işlerken bile konumların, kişilerin ve şeylerin adlarını çıkarabileceğiniz NER'i destekler.

  • Summarize - Kullanmak summarize özelliği, Paragrafları, makaleleri, belgeleri veya bunların koleksiyonunu NLP'de özetleyebilirsiniz.

  • Searching - OpenNLP'de, belirli bir arama dizesi veya eşanlamlıları, verilen kelime değiştirilmiş veya yanlış yazılmış olsa bile, verilen metinde tanımlanabilir.

  • Tagging (POS) - NLP'de etiketleme, metni daha fazla analiz için çeşitli dilbilgisi öğelerine bölmek için kullanılır.

  • Translation - Çeviri, NLP'de bir dilin diğerine çevrilmesine yardımcı olur.

  • Information grouping - NLP'deki bu seçenek, tıpkı konuşmanın bölümleri gibi, belge içeriğindeki metin bilgilerini gruplandırır.

  • Natural Language Generation - Bir veri tabanından bilgi üretmek ve hava durumu analizi veya tıbbi raporlar gibi bilgi raporlarını otomatikleştirmek için kullanılır.

  • Feedback Analysis - Adından da anlaşılacağı gibi, NLP tarafından ürünlerin kalplerini kazanmada ne kadar başarılı olduğunu analiz etmek için insanlardan ürünlerle ilgili çeşitli geri bildirimler toplanır.

  • Speech recognition - İnsan konuşmasını analiz etmek zor olsa da, NLP bu gereksinim için bazı yerleşik özelliklere sahiptir.

NLP API'sini aç

Apache OpenNLP kitaplığı, cümle algılama, belirteçleştirme, bir ad bulma, konuşma bölümlerini etiketleme, bir cümleyi parçalama, ayrıştırma, ortak referans çözümleme ve belge kategorizasyonu gibi çeşitli doğal dil işleme görevlerini gerçekleştirmek için sınıflar ve arayüzler sağlar.

Bu görevlere ek olarak, bu görevlerden herhangi biri için kendi modellerimizi de eğitebilir ve değerlendirebiliriz.

OpenNLP CLI

OpenNLP, kütüphaneye ek olarak, modelleri eğitip değerlendirebileceğimiz bir Komut Satırı Arayüzü (CLI) de sağlar. Bu eğitimin son bölümünde bu konuyu ayrıntılı olarak tartışacağız.

Açık NLP Modelleri

OpenNLP, çeşitli NLP görevlerini gerçekleştirmek için önceden tanımlanmış bir dizi model sağlar. Bu set, farklı diller için modeller içerir.

Modelleri indirmek

OpenNLP tarafından sağlanan önceden tanımlanmış modelleri indirmek için aşağıda verilen adımları takip edebilirsiniz.

Step 1 - Aşağıdaki bağlantıya tıklayarak OpenNLP modellerinin dizin sayfasını açın - http://opennlp.sourceforge.net/models-1.5/.

Step 2- Verilen bağlantıyı ziyaret ettiğinizde, çeşitli dillerdeki bileşenlerin bir listesini ve bunları indirmek için bağlantıları göreceksiniz. Burada, OpenNLP tarafından sağlanan tüm önceden tanımlanmış modellerin listesini alabilirsiniz.

Tüm bu modelleri klasöre indirin C:/OpenNLP_models/>, ilgili bağlantılara tıklayarak. Tüm bu modeller dile bağlıdır ve bunları kullanırken model dilinin giriş metninin diliyle eşleştiğinden emin olmalısınız.

OpenNLP Tarihçesi

  • 2010 yılında OpenNLP, Apache inkübasyonuna girdi.

  • 2011 yılında Apache OpenNLP 1.5.2 Incubating piyasaya sürüldü ve aynı yıl üst düzey Apache projesi olarak mezun oldu.

  • 2015 yılında OpenNLP 1.6.0 yayınlandı.

Bu bölümde, sisteminizde OpenNLP ortamını nasıl kurabileceğinizi tartışacağız. Kurulum süreciyle başlayalım.

OpenNLP'yi Yükleme

İndirme adımları aşağıdadır Apache OpenNLP library sisteminizde.

Step 1 - ana sayfasını açın Apache OpenNLP aşağıdaki bağlantıya tıklayarak - https://opennlp.apache.org/.

Step 2 - Şimdi, Downloadsbağlantı. Tıkladığınızda, sizi Apache Software Foundation Distribution dizinine yönlendirecek çeşitli yansımaları bulabileceğiniz bir sayfaya yönlendirileceksiniz.

Step 3- Bu sayfada çeşitli Apache dağıtımlarını indirmek için bağlantılar bulabilirsiniz. Bunlara göz atın ve OpenNLP dağıtımını bulun ve tıklayın.

Step 4 - Tıkladığınızda, aşağıda gösterildiği gibi OpenNLP dağıtımının dizinini görebileceğiniz dizine yönlendirileceksiniz.

Mevcut dağıtımlardan en son sürüme tıklayın.

Step 5- Her dağıtım, çeşitli biçimlerde OpenNLP kitaplığının Kaynak ve İkili dosyalarını sağlar. Kaynak ve ikili dosyaları indirin,apache-opennlp-1.6.0-bin.zip ve apache-opennlp1.6.0-src.zip (pencereler için).

Sınıf Yolunu Ayarlama

OpenNLP kitaplığını indirdikten sonra, yolunu bindizin. OpenNLP kitaplığını sisteminizin E sürücüsüne indirdiğinizi varsayın.

Şimdi, aşağıda verilen adımları izleyin -

Step 1 - "Bilgisayarım" ı sağ tıklayın ve "Özellikler" i seçin.

Step 2 - "Gelişmiş" sekmesinin altındaki "Ortam Değişkenleri" düğmesini tıklayın.

Step 3 - seçin path değişken ve tıklayın Edit düğmesi, aşağıdaki ekran görüntüsünde gösterildiği gibi.

Step 4 - Ortam Değişkenini Düzenle penceresinde, New düğmesini tıklayın ve OpenNLP dizininin yolunu ekleyin E:\apache-opennlp-1.6.0\bin ve tıklayın OK düğmesi, aşağıdaki ekran görüntüsünde gösterildiği gibi.

Eclipse Kurulumu

OpenNLP kitaplığı için Eclipse ortamını, Build path JAR dosyalarına veya kullanarak pom.xml.

JAR Dosyalarının Derleme Yolunu Ayarlama

Eclipse'de OpenNLP'yi kurmak için aşağıdaki adımları izleyin -

Step 1 - Sisteminizde Eclipse ortamının kurulu olduğundan emin olun.

Step 2- Eclipse'i açın. Aşağıda gösterildiği gibi Dosya → Yeni → Yeni bir proje aç'ı tıklayın.

Step 3 - Alacaksın New Projectsihirbaz. Bu sihirbazda, Java projesini seçin veNext buton.

Step 4 - Sonra, alacaksın New Java Project wizard. Burada yeni bir proje oluşturmanız veNext düğmesi aşağıda gösterildiği gibi.

Step 5 - Yeni bir proje oluşturduktan sonra üzerine sağ tıklayın, seçin Build Path ve tıkla Configure Build Path.

Step 6 - Sonra, alacaksın Java Build Pathsihirbaz. Buraya tıklayınAdd External JARs düğmesi aşağıda gösterildiği gibi.

Step 7 - Jar dosyalarını seçin opennlp-tools-1.6.0.jar ve opennlp-uima-1.6.0.jar Içinde bulunan lib klasörü apache-opennlp-1.6.0 folder.

Tıklandığında Open Yukarıdaki ekranda bulunan butonuna tıkladığınızda, seçilen dosyalar kitaplığınıza eklenecektir.

Tıklandığında OK, gerekli JAR dosyalarını mevcut projeye başarıyla ekleyeceksiniz ve aşağıda gösterildiği gibi Başvurulan Kitaplıkları genişleterek bu eklenen kitaplıkları doğrulayabilirsiniz.

Pom.xml kullanma

Projeyi bir Maven projesine dönüştürün ve aşağıdaki kodu projeye ekleyin. 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>

Bu bölümde, bu eğitimin sonraki bölümlerinde kullanacağımız sınıflar ve yöntemler hakkında tartışacağız.

Cümle Algılama

CümleModel sınıfı

Bu sınıf, verilen ham metindeki cümleleri tespit etmek için kullanılan önceden tanımlanmış modeli temsil eder. Bu sınıf pakete aittiropennlp.tools.sentdetect.

Bu sınıfın kurucusu bir InputStream cümle algılayıcı model dosyasının nesnesi (en-sent.bin).

CümleDetectorME sınıfı

Bu sınıf pakete aittir opennlp.tools.sentdetectve ham metni cümlelere bölmek için yöntemler içerir. Bu sınıf, cümlenin sonunu ifade edip etmediklerini belirlemek için bir dizedeki cümle sonu karakterlerini değerlendirmek için bir maksimum entropi modeli kullanır.

Bu sınıfın önemli yöntemleri aşağıdadır.

S.No Yöntemler ve Açıklama
1

sentDetect()

Bu yöntem, kendisine aktarılan ham metindeki cümleleri tespit etmek için kullanılır. Bir String değişkenini parametre olarak kabul eder ve verilen ham metinden cümleleri tutan bir String dizisi döndürür.

2

sentPosDetect()

Bu yöntem, verilen metindeki cümlelerin konumlarını tespit etmek için kullanılır. Bu yöntem, cümleyi temsil eden bir dize değişkenini kabul eder ve türdeki nesnelerin bir dizisini döndürürSpan.

Adlı sınıf Span of opennlp.tools.util paketi, kümelerin başlangıç ​​ve bitiş tam sayılarını saklamak için kullanılır.

3

getSentenceProbabilities()

Bu yöntem, en son yapılan çağrılarla ilişkili olasılıkları döndürür. sentDetect() yöntem.

Tokenizasyon

TokenizerModel sınıfı

Bu sınıf, verilen cümleyi belirtmek için kullanılan önceden tanımlanmış modeli temsil eder. Bu sınıf pakete aittiropennlp.tools.tokenizer.

Bu sınıfın kurucusu bir InputStream belirteç model dosyasının nesnesi (entoken.bin).

Sınıflar

Tokenizasyon gerçekleştirmek için OpenNLP kütüphanesi üç ana sınıf sağlar. Her üç sınıf da adı verilen arayüzü uygularTokenizer.

S.No Sınıflar ve Açıklama
1

SimpleTokenizer

Bu sınıf, karakter sınıflarını kullanarak verilen ham metni belirteçler.

2

WhitespaceTokenizer

Bu sınıf, verilen metni belirtmek için beyaz boşlukları kullanır.

3

TokenizerME

Bu sınıf, ham metni ayrı belirteçlere dönüştürür. Kararlarını vermek için Maksimum Entropi kullanır.

Bu sınıflar aşağıdaki yöntemleri içerir.

S.No Yöntemler ve Açıklama
1

tokenize()

Bu yöntem, ham metni belirtmek için kullanılır. Bu yöntem bir String değişkenini parametre olarak kabul eder ve bir Dizeler (belirteçler) dizisi döndürür.

2

sentPosDetect()

Bu yöntem, jetonların konumlarını veya aralıklarını almak için kullanılır. Dize biçiminde cümle (veya) ham metni kabul eder ve türden bir nesne dizisi döndürür.Span.

Yukarıdaki iki yönteme ek olarak, TokenizerME sınıf var getTokenProbabilities() yöntem.

S.No Yöntemler ve Açıklama
1

getTokenProbabilities()

Bu yöntem, en son yapılan çağrılarla ilişkili olasılıkları almak için kullanılır. tokenizePos() yöntem.

NameEntityRecognition

TokenNameFinderModel sınıfı

Bu sınıf, verilen cümlede adlandırılan varlıkları bulmak için kullanılan önceden tanımlanmış modeli temsil eder. Bu sınıf pakete aittiropennlp.tools.namefind.

Bu sınıfın kurucusu bir InputStream ad bulucu model dosyasının nesnesi (enner-person.bin).

NameFinderME sınıfı

Sınıf pakete aittir opennlp.tools.namefindve NER görevlerini gerçekleştirmek için yöntemler içerir. Bu sınıf, verilen ham metinde adlandırılmış varlıkları bulmak için bir maksimum entropi modeli kullanır.

S.No Yöntemler ve Açıklama
1

find()

Bu yöntem ham metindeki isimleri tespit etmek için kullanılır. Ham metni bir parametre olarak temsil eden bir String değişkenini kabul eder ve Span türünde bir dizi nesne döndürür.

2

probs()

Bu yöntem, son kodu çözülen dizinin olasılıklarını elde etmek için kullanılır.

Konuşmanın Bölümlerini Bulmak

POSModel sınıfı

Bu sınıf, verilen cümlenin konuşma bölümlerini etiketlemek için kullanılan önceden tanımlanmış modeli temsil eder. Bu sınıf pakete aittiropennlp.tools.postag.

Bu sınıfın kurucusu bir InputStream pos-tagger model dosyasının nesnesi (enpos-maxent.bin).

POSTaggerME sınıfı

Bu sınıf pakete aittir opennlp.tools.postagve verilen ham metnin konuşma bölümlerini tahmin etmek için kullanılır. Kararlarını vermek için Maksimum Entropi kullanır.

S.No Yöntemler ve Açıklama
1

tag()

Bu yöntem, POS etiketlerinin işaretlerini atamak için kullanılır. Bu yöntem, bir dizi belirteci (String) bir parametre olarak kabul eder ve bir etiket (dizi) döndürür.

2

getSentenceProbabilities()

Bu yöntem, yakın zamanda etiketlenen cümlenin her bir etiketinin olasılıklarını elde etmek için kullanılır.

Cümlenin Ayrıştırılması

ParserModel sınıfı

Bu sınıf, verilen cümleyi ayrıştırmak için kullanılan önceden tanımlanmış modeli temsil eder. Bu sınıf pakete aittiropennlp.tools.parser.

Bu sınıfın kurucusu bir InputStream ayrıştırıcı model dosyasının nesnesi (en-parserchunking.bin).

Ayrıştırıcı Fabrika sınıfı

Bu sınıf pakete aittir opennlp.tools.parser ve ayrıştırıcılar oluşturmak için kullanılır.

S.No Yöntemler ve Açıklama
1

create()

Bu statik bir yöntemdir ve bir ayrıştırıcı nesnesi oluşturmak için kullanılır. Bu yöntem, ayrıştırıcı model dosyasının Filestream nesnesini kabul eder.

ParserTool sınıfı

Bu sınıf, opennlp.tools.cmdline.parser paketi ve içeriği ayrıştırmak için kullanılır.

S.No Yöntemler ve Açıklama
1

parseLine()

Bu yöntem ParserToolsınıfı, ham metni OpenNLP'de ayrıştırmak için kullanılır. Bu yöntem kabul eder -

  • Ayrıştırılacak metni temsil eden bir String değişkeni.
  • Ayrıştırıcı nesne.
  • Gerçekleştirilecek ayrıştırma sayısını temsil eden bir tamsayı.

Kümeleme

ChunkerModel sınıfı

Bu sınıf, bir cümleyi daha küçük parçalara bölmek için kullanılan önceden tanımlanmış modeli temsil eder. Bu sınıf pakete aittiropennlp.tools.chunker.

Bu sınıfın kurucusu bir InputStream nesnesi chunker model dosyası (enchunker.bin).

ChunkerME sınıfı

Bu sınıf adlı pakete ait opennlp.tools.chunker ve verilen cümleyi daha küçük parçalara bölmek için kullanılır.

S.No Yöntemler ve Açıklama
1

chunk()

Bu yöntem, verilen cümleyi daha küçük parçalara bölmek için kullanılır. Bir cümlenin belirteçlerini kabul eder vePsanatlar Of Sparametreler olarak peech etiketleri.

2

probs()

Bu yöntem, son kodu çözülen dizinin olasılıklarını döndürür.

Doğal bir dili işlerken cümlelerin başına ve sonuna karar vermek, ele alınması gereken sorunlardan biridir. Bu süreç olarak bilinirSgiriş Boundary Dbelirsizlik (SBD) veya basitçe cümle kırma.

Verilen metindeki cümleleri tespit etmek için kullandığımız teknikler, metnin diline bağlıdır.

Java Kullanarak Cümle Algılama

Java'da verilen metindeki cümleleri, Normal İfadeler ve bir dizi basit kural kullanarak tespit edebiliriz.

Örneğin, verilen metinde bir nokta, soru işareti veya ünlem işareti bir cümleyi bitirdiğimizi varsayalım, sonra cümleyi kullanarak cümleyi bölebiliriz. split() yöntemi Stringsınıf. Burada String formatında bir düzenli ifade geçmemiz gerekiyor.

Aşağıda, Java düzenli ifadelerini kullanarak belirli bir metindeki cümleleri belirleyen program yer almaktadır. (split method). Bu programı adıyla bir dosyaya kaydedinSentenceDetection_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);      
   } 
}

Kaydedilen java dosyasını aşağıdaki komutları kullanarak komut isteminden derleyin ve yürütün.

javac SentenceDetection_RE.java 
java SentenceDetection_RE

Yürütüldüğünde, yukarıdaki program aşağıdaki mesajı görüntüleyen bir PDF belgesi oluşturur.

Hi 
How are you 
Welcome to Tutorialspoint 
We provide free tutorials on various technologies

OpenNLP Kullanarak Cümle Algılama

OpenNLP, cümleleri algılamak için önceden tanımlanmış bir model kullanır; en-sent.bin. Bu önceden tanımlanmış model, belirli bir ham metindeki cümleleri tespit etmek için eğitilmiştir.

opennlp.tools.sentdetect paketi, cümle algılama görevini gerçekleştirmek için kullanılan sınıfları ve arabirimleri içerir.

OpenNLP kitaplığını kullanarak bir cümleyi tespit etmek için yapmanız gerekenler -

  • Yükle en-sent.bin kullanarak model SentenceModel sınıf

  • Örnekleyin SentenceDetectorME sınıf.

  • Kullanarak cümleleri tespit edin sentDetect() bu sınıfın yöntemi.

Verilen ham metinden cümleleri tespit eden bir program yazmak için izlenecek adımlar aşağıdadır.

Adım 1: Modeli yükleme

Cümle algılama modeli, adlı sınıf tarafından temsil edilir. SentenceModelpakete ait olan opennlp.tools.sentdetect.

Bir cümle algılama modeli yüklemek için -

  • Oluşturduğunuz bir InputStream modelin nesnesi (FileInputStream öğesini örnekleyin ve modelin yolunu String biçiminde yapıcısına iletin).

  • Örnekleyin SentenceModel sınıf ve geç InputStream (nesne), aşağıdaki kod bloğunda gösterildiği gibi yapıcısına bir parametre olarak modelin -

//Loading sentence detector model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/ensent.bin"); 
SentenceModel model = new SentenceModel(inputStream);

Adım 2: CümleDetectorME sınıfını örnekleme

SentenceDetectorME paketin sınıfı opennlp.tools.sentdetectişlenmemiş metni cümlelere ayırmak için yöntemler içerir. Bu sınıf, bir dizedeki cümle sonu karakterlerini, bir cümlenin sonunu ifade edip etmediklerini belirlemek üzere değerlendirmek için Maksimum Entropi modelini kullanır.

Bu sınıfı somutlaştırın ve aşağıda gösterildiği gibi önceki adımda oluşturulan model nesnesini iletin.

//Instantiating the SentenceDetectorME class 
SentenceDetectorME detector = new SentenceDetectorME(model);

3. Adım: Cümlenin tespit edilmesi

sentDetect() yöntemi SentenceDetectorMEsınıfı, kendisine aktarılan ham metindeki cümleleri tespit etmek için kullanılır. Bu yöntem, bir String değişkenini parametre olarak kabul eder.

Cümlenin String biçimini bu yönteme ileterek bu yöntemi çağırın.

//Detecting the sentence 
String sentences[] = detector.sentDetect(sentence);

Example

Aşağıda verilen ham metindeki cümleleri tespit eden program yer almaktadır. Bu programı isimli bir dosyaya kaydedin.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);  
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac SentenceDetectorME.java 
java SentenceDetectorME

Yürütüldüğünde, yukarıdaki program verilen String'i okur ve içindeki cümleleri algılar ve aşağıdaki çıktıyı görüntüler.

Hi. How are you? 
Welcome to Tutorialspoint. 
We provide free tutorials on various technologies

Cümlelerin Konumlarını Tespit Etmek

Ayrıca cümlelerin konumlarını sentPosDetect () yöntemini kullanarak tespit edebiliriz. SentenceDetectorME class.

Verilen ham metinden cümlelerin konumlarını tespit eden bir program yazmak için izlenecek adımlar aşağıdadır.

Adım 1: Modeli yükleme

Cümle algılama modeli, adlı sınıf tarafından temsil edilir. SentenceModelpakete ait olan opennlp.tools.sentdetect.

Bir cümle algılama modeli yüklemek için -

  • Oluşturduğunuz bir InputStream modelin nesnesi (FileInputStream öğesini örnekleyin ve modelin yolunu String biçiminde yapıcısına iletin).

  • Örnekleyin SentenceModel sınıf ve geç InputStream (nesne) modelinin yapıcısına bir parametre olarak aşağıdaki kod bloğunda gösterildiği gibi.

//Loading sentence detector model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-sent.bin"); 
SentenceModel model = new SentenceModel(inputStream);

Adım 2: CümleDetectorME sınıfını örnekleme

SentenceDetectorME paketin sınıfı opennlp.tools.sentdetectişlenmemiş metni cümlelere ayırmak için yöntemler içerir. Bu sınıf, bir dizedeki cümle sonu karakterlerini, bir cümlenin sonunu ifade edip etmediklerini belirlemek üzere değerlendirmek için Maksimum Entropi modelini kullanır.

Bu sınıfı örnekleyin ve önceki adımda oluşturulan model nesnesini iletin.

//Instantiating the SentenceDetectorME class 
SentenceDetectorME detector = new SentenceDetectorME(model);

3. Adım: Cümlenin konumunu tespit etmek

sentPosDetect() yöntemi SentenceDetectorMEsınıfı, kendisine aktarılan ham metindeki cümlelerin konumlarını tespit etmek için kullanılır. Bu yöntem, bir String değişkenini parametre olarak kabul eder.

Cümlenin String biçimini bir parametre olarak bu yönteme ileterek bu yöntemi çağırın.

//Detecting the position of the sentences in the paragraph  
Span[] spans = detector.sentPosDetect(sentence);

Adım 4: Cümlelerin aralıklarını yazdırma

sentPosDetect() yöntemi SentenceDetectorME sınıf, türdeki nesnelerin bir dizisini döndürür Span. Span adlı sınıfopennlp.tools.util paketi, kümelerin başlangıç ​​ve bitiş tam sayılarını saklamak için kullanılır.

Tarafından döndürülen aralıkları saklayabilirsiniz. sentPosDetect() yöntemini Span dizisine ekleyin ve aşağıdaki kod bloğunda gösterildiği gibi yazdırın.

//Printing the sentences and their spans of a sentence 
for (Span span : spans)         
System.out.println(paragraph.substring(span);

Example

Aşağıda verilen ham metindeki cümleleri tespit eden program yer almaktadır. Bu programı isimli bir dosyaya kaydedin.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);  
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac SentencePosDetection.java 
java SentencePosDetection

Yürütüldüğünde, yukarıdaki program verilen String'i okur ve içindeki cümleleri algılar ve aşağıdaki çıktıyı görüntüler.

[0..16) 
[17..43) 
[44..93)

Pozisyonları ile birlikte cümleler

substring() String sınıfının yöntemi, begin ve end offsetsve ilgili dizeyi döndürür. Aşağıdaki kod bloğunda gösterildiği gibi, cümleleri ve bunların aralıklarını (konumlarını) birlikte yazdırmak için bu yöntemi kullanabiliriz.

for (Span span : spans)         
   System.out.println(sen.substring(span.getStart(), span.getEnd())+" "+ span);

Aşağıda verilen ham metinden cümleleri tespit etme ve konumlarıyla birlikte görüntüleme programı verilmiştir. Bu programı adıyla bir dosyaya kaydedinSentencesAndPosDetection.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);  
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac SentencesAndPosDetection.java 
java SentencesAndPosDetection

Yürütüldüğünde, yukarıdaki program verilen dizgeyi okur ve cümleleri konumlarıyla birlikte algılar ve aşağıdaki çıktıyı görüntüler.

Hi. How are you? [0..16) 
Welcome to Tutorialspoint. [17..43)  
We provide free tutorials on various technologies [44..93)

Cümle Olasılık Tespiti

getSentenceProbabilities() yöntemi SentenceDetectorME sınıfı, sentDetect () yöntemine yapılan en son çağrılarla ilişkili olasılıkları döndürür.

//Getting the probabilities of the last decoded sequence       
double[] probs = detector.getSentenceProbabilities();

SentDetect () yöntemine yapılan çağrılarla ilişkili olasılıkları yazdırmak için program aşağıdadır. Bu programı adıyla bir dosyaya kaydedinSentenceDetectionMEProbs.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]); 
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac SentenceDetectionMEProbs.java 
java SentenceDetectionMEProbs

Yürütüldüğünde, yukarıdaki program verilen dizgeyi okur ve cümleleri algılar ve yazdırır. Ek olarak, aşağıda gösterildiği gibi sentDetect () yöntemine yapılan en son çağrılarla ilişkili olasılıkları da döndürür.

Hi. How are you? 
Welcome to Tutorialspoint. 
We provide free tutorials on various technologies 
   
0.9240246995179983 
0.9957680129995953 
1.0

Verilen cümleyi daha küçük parçalara (jetonlara) bölme süreci şu şekilde bilinir: tokenization. Genel olarak, verilen işlenmemiş metin bir dizi sınırlayıcıya (çoğunlukla beyaz boşluklar) dayalı olarak belirtilir.

Tokenizasyon, yazım denetimi, aramaları işleme, konuşma bölümlerini tanımlama, cümle algılama, belgelerin belge sınıflandırması vb. Gibi görevlerde kullanılır.

OpenNLP kullanarak kodlama

opennlp.tools.tokenize paketi, belirteçleştirmeyi gerçekleştirmek için kullanılan sınıfları ve arabirimleri içerir.

Verilen cümleleri daha basit parçalar halinde belirtmek için, OpenNLP kitaplığı üç farklı sınıf sağlar -

  • SimpleTokenizer - Bu sınıf, karakter sınıflarını kullanarak verilen ham metni belirteçler.

  • WhitespaceTokenizer - Bu sınıf, verilen metni belirtmek için beyaz boşlukları kullanır.

  • TokenizerME- Bu sınıf, ham metni ayrı belirteçlere dönüştürür. Kararlarını vermek için Maksimum Entropi kullanır.

SimpleTokenizer

Kullanarak bir cümleyi belirtmek için SimpleTokenizer sınıf, yapmanız gereken -

  • İlgili sınıfın bir nesnesini oluşturun.

  • Cümleyi kullanarak cümleyi şifreleyin tokenize() yöntem.

  • Jetonları yazdırın.

Verilen ham metni belirteçlere ayıran bir program yazmak için izlenecek adımlar aşağıdadır.

Step 1 - İlgili sınıfı örneklemek

Her iki sınıfta da, onları başlatacak yapıcılar yoktur. Bu nedenle, statik değişkeni kullanarak bu sınıfların nesnelerini oluşturmamız gerekir.INSTANCE.

SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;

Step 2 - Cümleleri şifreleyin

Her iki sınıf da adında bir yöntem içerir tokenize(). Bu yöntem, String formatında bir ham metni kabul eder. Çağrıldığında, verilen String'i jetonlaştırır ve bir Dizeler (jetonlar) dizisi döndürür.

Cümleyi kullanarak cümleyi şifreleyin tokenizer() yöntemi aşağıda gösterildiği gibi.

//Tokenizing the given sentence 
 String tokens[] = tokenizer.tokenize(sentence);

Step 3 - Jetonları yazdırın

Cümleyi belirtdikten sonra, belirteçleri kullanarak yazdırabilirsiniz. for loop, Aşağıda gösterildiği gibi.

//Printing the tokens 
for(String token : tokens)       
   System.out.println(token);

Example

Aşağıda verilen cümleyi SimpleTokenizer sınıfını kullanarak belirteç yapan program yer almaktadır. Bu programı adıyla bir dosyaya kaydedinSimpleTokenizerExample.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);  
      }       
   }  
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac SimpleTokenizerExample.java 
java SimpleTokenizerExample

Yürütüldüğünde, yukarıdaki program verilen String'i (ham metin) okur, onu tokenize eder ve aşağıdaki çıktıyı görüntüler -

Hi 
. 
How 
are 
you 
? 
Welcome 
to 
Tutorialspoint 
. 
We 
provide 
free 
tutorials 
on 
various 
technologies

WhitespaceTokenizer

Kullanarak bir cümleyi belirtmek için WhitespaceTokenizer sınıf, yapmanız gereken -

  • İlgili sınıfın bir nesnesini oluşturun.

  • Cümleyi kullanarak cümleyi şifreleyin tokenize() yöntem.

  • Jetonları yazdırın.

Verilen ham metni belirteçlere ayıran bir program yazmak için izlenecek adımlar aşağıdadır.

Step 1 - İlgili sınıfı örneklemek

Her iki sınıfta da, onları başlatacak yapıcılar yoktur. Bu nedenle, statik değişkeni kullanarak bu sınıfların nesnelerini oluşturmamız gerekir.INSTANCE.

WhitespaceTokenizer tokenizer = WhitespaceTokenizer.INSTANCE;

Step 2 - Cümleleri şifreleyin

Her iki sınıf da adında bir yöntem içerir tokenize(). Bu yöntem, String formatında bir ham metni kabul eder. Çağrıldığında, verilen String'i jetonlaştırır ve bir Dizeler (jetonlar) dizisi döndürür.

Cümleyi kullanarak cümleyi şifreleyin tokenizer() yöntemi aşağıda gösterildiği gibi.

//Tokenizing the given sentence 
 String tokens[] = tokenizer.tokenize(sentence);

Step 3 - Jetonları yazdırın

Cümleyi belirtdikten sonra, belirteçleri kullanarak yazdırabilirsiniz. for loop, Aşağıda gösterildiği gibi.

//Printing the tokens 
for(String token : tokens)       
   System.out.println(token);

Example

Aşağıda, verilen cümleyi kullanarak jetonlaştıran programdır. WhitespaceTokenizersınıf. Bu programı adıyla bir dosyaya kaydedinWhitespaceTokenizerExample.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);        
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac WhitespaceTokenizerExample.java 
java WhitespaceTokenizerExample

Yürütüldüğünde, yukarıdaki program verilen String'i (ham metin) okur, onu tokenize eder ve aşağıdaki çıktıyı görüntüler.

Hi. 
How 
are 
you? 
Welcome 
to 
Tutorialspoint. 
We 
provide 
free 
tutorials 
on 
various 
technologies

TokenizerME sınıfı

OpenNLP ayrıca cümleleri belirtmek için önceden tanımlanmış bir model, de-token.bin adlı bir dosya kullanır. Belirli bir ham metindeki cümleleri belirtmek için eğitilmiştir.

TokenizerME sınıfı opennlp.tools.tokenizerpaketi, bu modeli yüklemek ve verilen ham metni OpenNLP kitaplığını kullanarak belirtmek için kullanılır. Bunu yapmak için yapmanız gerekenler -

  • Yükle en-token.bin kullanarak model TokenizerModel sınıf.

  • Örnekleyin TokenizerME sınıf.

  • Cümleleri kullanarak şifreleyin tokenize() bu sınıfın yöntemi.

Aşağıdaki adımları kullanarak verilen ham metinden cümleleri dizgeye dönüştüren bir program yazmak için izlenecek adımlar verilmiştir. TokenizerME sınıf.

Step 1 - Modeli yükleme

Simgeleştirme modeli, adlı sınıf tarafından temsil edilir. TokenizerModelpakete ait olan opennlp.tools.tokenize.

Bir jetonlaştırıcı modeli yüklemek için -

  • Oluşturduğunuz bir InputStream modelin nesnesi (FileInputStream öğesini örnekleyin ve modelin yolunu String biçiminde yapıcısına iletin).

  • Örnekleyin TokenizerModel sınıf ve geç InputStream (nesne) modelinin yapıcısına bir parametre olarak aşağıdaki kod bloğunda gösterildiği gibi.

//Loading the Tokenizer model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-token.bin"); 
TokenizerModel tokenModel = new TokenizerModel(inputStream);

Step 2 - TokenizerME sınıfını örnekleme

TokenizerME paketin sınıfı opennlp.tools.tokenizeişlenmemiş metni daha küçük parçalara (jetonlar) ayırmak için yöntemler içerir. Kararlarını vermek için Maksimum Entropi kullanır.

Bu sınıfı somutlaştırın ve önceki adımda oluşturulan model nesnesini aşağıda gösterildiği gibi iletin.

//Instantiating the TokenizerME class 
TokenizerME tokenizer = new TokenizerME(tokenModel);

Step 3 - Cümlenin simge haline getirilmesi

tokenize() yöntemi TokenizerMEsınıfı, kendisine iletilen ham metni belirtmek için kullanılır. Bu yöntem bir String değişkenini parametre olarak kabul eder ve bir Dizeler (belirteçler) dizisi döndürür.

Aşağıdaki gibi, cümlenin String biçimini bu yönteme ileterek bu yöntemi çağırın.

//Tokenizing the given raw text 
String tokens[] = tokenizer.tokenize(paragraph);

Example

Aşağıda verilen ham metni tokenize eden program yer almaktadır. Bu programı adıyla bir dosyaya kaydedinTokenizerMEExample.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); 
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac TokenizerMEExample.java 
java TokenizerMEExample

Yürütüldüğünde, yukarıdaki program verilen String'i okur ve içindeki cümleleri algılar ve aşağıdaki çıktıyı görüntüler -

Hi 
. 
How 
are 
you 
? 
Welcome 
to 
Tutorialspoint 
. 
We 
provide 
free 
tutorials 
on 
various 
technologie

Jetonların Konumlarını Geri Alma

Pozisyonları da alabiliriz veya spans token'ların tokenizePos()yöntem. Bu, paketin Tokenizer arayüzünün yöntemidiropennlp.tools.tokenize. Tüm (üç) Tokenizer sınıfı bu arayüzü uyguladığından, bu yöntemi hepsinde bulabilirsiniz.

Bu yöntem cümleyi veya ham metni bir dize biçiminde kabul eder ve türdeki nesnelerin bir dizisini döndürür Span.

Tokenların pozisyonlarını şurayı kullanarak alabilirsiniz: tokenizePos() yöntem, aşağıdaki gibi -

//Retrieving the tokens 
tokenizer.tokenizePos(sentence);

Pozisyonları (aralıkları) yazdırma

Adlı sınıf Span of opennlp.tools.util paketi, kümelerin başlangıç ​​ve bitiş tam sayılarını saklamak için kullanılır.

Tarafından döndürülen aralıkları saklayabilirsiniz. tokenizePos() yöntemini Span dizisine ekleyin ve aşağıdaki kod bloğunda gösterildiği gibi yazdırın.

//Retrieving the tokens 
Span[] tokens = tokenizer.tokenizePos(sentence);
//Printing the spans of tokens 
for( Span token : tokens)        
   System.out.println(token);

Jetonları ve konumlarını birlikte yazdırma

substring() String sınıfının yöntemi, begin ve endofsetler ve ilgili dizeyi döndürür. Aşağıdaki kod bloğunda gösterildiği gibi, bu yöntemi tokenleri ve bunların aralıklarını (konumlarını) birlikte yazdırmak için kullanabiliriz.

//Printing the spans of tokens 
for(Span token : tokens)  
   System.out.println(token +" "+sent.substring(token.getStart(), token.getEnd()));

Example(SimpleTokenizer)

Aşağıda, ham metnin belirteç aralıklarını kullanarak SimpleTokenizersınıf. Ayrıca, jetonları konumlarıyla birlikte yazdırır. Bu programı isimli bir dosyaya kaydedin.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()));          
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac SimpleTokenizerSpans.java 
java SimpleTokenizerSpans

Yürütüldüğünde, yukarıdaki program verilen String'i (ham metin) okur, onu tokenize eder ve aşağıdaki çıktıyı görüntüler -

[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)

Aşağıda, ham metnin belirteç aralıklarını kullanarak WhitespaceTokenizersınıf. Ayrıca, jetonları konumlarıyla birlikte yazdırır. Bu programı adıyla bir dosyaya kaydedinWhitespaceTokenizerSpans.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()));        
   } 
}

Kaydedilen java dosyasını aşağıdaki komutları kullanarak komut isteminden derleyin ve yürütün

javac WhitespaceTokenizerSpans.java 
java WhitespaceTokenizerSpans

Yürütüldüğünde, yukarıdaki program verilen String'i (ham metin) okur, onu tokenize eder ve aşağıdaki çıktıyı görüntüler.

[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)

Aşağıda, ham metnin belirteç aralıklarını kullanarak TokenizerMEsınıf. Ayrıca, jetonları konumlarıyla birlikte yazdırır. Bu programı adıyla bir dosyaya kaydedinTokenizerMESpans.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()));      
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac TokenizerMESpans.java 
java TokenizerMESpans

Yürütüldüğünde, yukarıdaki program verilen String'i (ham metin) okur, onu tokenize eder ve aşağıdaki çıktıyı görüntüler -

[0..5) Hello 
[6..10) John 
[11..14) how 
[15..18) are 
[19..22) you 
[23..30) welcome 
[31..33) to 
[34..48) Tutorialspoint

Tokenizatör Olasılığı

TokenizerME sınıfının getTokenProbabilities () yöntemi, tokenizePos () yöntemine yapılan en son çağrılarla ilişkili olasılıkları almak için kullanılır.

//Getting the probabilities of the recent calls to tokenizePos() method 
double[] probs = detector.getSentenceProbabilities();

Aşağıdaki program, tokenizePos () yöntemine yapılan çağrılarla ilişkili olasılıkları yazdırmaktır. Bu programı adıyla bir dosyaya kaydedinTokenizerMEProbs.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]);          
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac TokenizerMEProbs.java 
java TokenizerMEProbs

Yürütüldüğünde, yukarıdaki program verilen dizgeyi okur ve cümleleri belirtip, yazdırır. Ek olarak, tokenizerPos () yöntemine yapılan en son çağrılarla ilişkili olasılıkları da döndürür.

[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

Belirli bir metinden isimleri, kişileri, yerleri ve diğer varlıkları bulma süreci, Named Entity Rtanıma (NER). Bu bölümde, OpenNLP kitaplığını kullanarak Java programı aracılığıyla NER'in nasıl gerçekleştirileceğini tartışacağız.

Açık NLP kullanarak Adlandırılmış Varlık Tanıma

OpenNLP, çeşitli NER görevlerini gerçekleştirmek için önceden tanımlanmış farklı modeller kullanır: en-nerdate.bn, en-ner-location.bin, en-ner-organization.bin, en-ner-person.bin ve en-ner-time. çöp Kutusu. Tüm bu dosyalar, belirli bir ham metindeki ilgili varlıkları tespit etmek için eğitilmiş önceden tanımlanmış modellerdir.

opennlp.tools.namefindpaketi, NER görevini gerçekleştirmek için kullanılan sınıfları ve arabirimleri içerir. OpenNLP kitaplığını kullanarak NER görevini gerçekleştirmek için yapmanız gerekenler -

  • Kullanarak ilgili modeli yükleyin TokenNameFinderModel sınıf.

  • Örnekleyin NameFinder sınıf.

  • İsimleri bulun ve yazdırın.

Belirli bir ham metinden isim varlıklarını algılayan bir program yazmak için izlenecek adımlar aşağıdadır.

Adım 1: Modeli yükleme

Cümle algılama modeli, adlı sınıf tarafından temsil edilir. TokenNameFinderModelpakete ait olan opennlp.tools.namefind.

Bir NER modeli yüklemek için -

  • Oluşturduğunuz bir InputStream modelin nesnesi (FileInputStream'i somutlaştırın ve uygun NER modelinin yolunu String biçiminde yapıcısına iletin).

  • Örnekleyin TokenNameFinderModel sınıf ve geç InputStream (nesne) modelinin yapıcısına bir parametre olarak aşağıdaki kod bloğunda gösterildiği gibi.

//Loading the NER-person model 
InputStream inputStreamNameFinder = new FileInputStream(".../en-nerperson.bin");       
TokenNameFinderModel model = new TokenNameFinderModel(inputStreamNameFinder);

2. Adım: NameFinderME sınıfının örneğini oluşturma

NameFinderME paketin sınıfı opennlp.tools.namefindNER görevlerini gerçekleştirmek için yöntemler içerir. Bu sınıf, verilen ham metinde adlandırılmış varlıkları bulmak için Maksimum Entropy modelini kullanır.

Bu sınıfı örnekleyin ve önceki adımda oluşturulan model nesnesini aşağıda gösterildiği gibi iletin -

//Instantiating the NameFinderME class 
NameFinderME nameFinder = new NameFinderME(model);

3. Adım: Cümledeki isimleri bulmak

find() yöntemi NameFinderMEsınıfı, kendisine aktarılan ham metindeki isimleri tespit etmek için kullanılır. Bu yöntem, bir String değişkenini parametre olarak kabul eder.

Cümlenin String biçimini bu yönteme ileterek bu yöntemi çağırın.

//Finding the names in the sentence 
Span nameSpans[] = nameFinder.find(sentence);

Adım 4: Cümledeki adların aralıklarını yazdırma

find() yöntemi NameFinderMEclass, Span türünde bir dizi nesne döndürür. Span adlı sınıfopennlp.tools.util paketi saklamak için kullanılır start ve end kümelerin tamsayısı.

Tarafından döndürülen aralıkları saklayabilirsiniz. find() yöntemini Span dizisine ekleyin ve aşağıdaki kod bloğunda gösterildiği gibi yazdırın.

//Printing the sentences and their spans of a sentence 
for (Span span : spans)         
System.out.println(paragraph.substring(span);

NER Example

Aşağıda verilen cümleyi okuyan ve içindeki kişilerin isimlerinin açıklıklarını tanıyan programdır. Bu programı adıyla bir dosyaya kaydedinNameFinderME_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());    
   }    
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac NameFinderME_Example.java 
java NameFinderME_Example

Yürütüldüğünde, yukarıdaki program verilen Dizgeyi (ham metin) okur, içindeki kişilerin adlarını algılar ve aşağıda gösterildiği gibi konumlarını (aralıkları) görüntüler.

[0..1) person 
[2..3) person

İsimler ve Pozisyonları

substring() String sınıfının yöntemi, begin ve end offsetsve ilgili dizeyi döndürür. Bu yöntemi, aşağıdaki kod bloğunda gösterildiği gibi adları ve açıklıklarını (konumlarını) birlikte yazdırmak için kullanabiliriz.

for(Span s: nameSpans)        
   System.out.println(s.toString()+"  "+tokens[s.getStart()]);

Aşağıda verilen ham metinden isimleri tespit etmek ve konumlarıyla birlikte görüntülemek için program yer almaktadır. Bu programı adıyla bir dosyaya kaydedinNameFinderSentences.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()]);      
   }    
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac NameFinderSentences.java 
java NameFinderSentences

Yürütüldüğünde, yukarıdaki program verilen Dizgeyi (ham metin) okur, içindeki kişilerin adlarını algılar ve aşağıda gösterildiği gibi konumlarını (aralıklarını) görüntüler.

[0..1) person  Mike

Konumun Adlarını Bulmak

Çeşitli modeller yükleyerek, çeşitli adlandırılmış varlıkları tespit edebilirsiniz. Aşağıdakileri yükleyen bir Java programıen-ner-location.binverilen cümlede yer adlarını modelleyip algılar. Bu programı adıyla bir dosyaya kaydedinLocationFinder.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()]); 
   }    
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac LocationFinder.java 
java LocationFinder

Yürütüldüğünde, yukarıdaki program verilen Dizgeyi (ham metin) okur, içindeki kişilerin adlarını algılar ve aşağıda gösterildiği gibi konumlarını (aralıkları) görüntüler.

[4..5) location  Hyderabad

Ad Bulucu Olasılığı

probs()yöntemi NameFinderME sınıfı, son kodu çözülen dizinin olasılıklarını elde etmek için kullanılır.

double[] probs = nameFinder.probs();

Olasılıkları yazdırmak için program aşağıdadır. Bu programı adıyla bir dosyaya kaydedinTokenizerMEProbs.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]);          
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac TokenizerMEProbs.java 
java TokenizerMEProbs

Yürütüldüğünde, yukarıdaki program verilen String'i okur, cümleleri belirteçler ve yazdırır. Ek olarak, aşağıda gösterildiği gibi, son kodu çözülen dizinin olasılıklarını da döndürür.

[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'yi kullanarak, belirli bir cümlenin Konuşma Bölümlerini de algılayabilir ve bunları yazdırabilirsiniz. OpenNLP, konuşma bölümlerinin tam adı yerine, her konuşma bölümünün kısa biçimlerini kullanır. Aşağıdaki tablo OpenNLP tarafından algılanan çeşitli konuşma bölümlerini ve anlamlarını gösterir.

Konuşmanın Bölümleri Konuşma bölümlerinin anlamı
NN İsim, tekil veya kitle
DT Belirleyici
VB Fiil, temel biçim
VBD Fiil, geçmiş zaman
VBZ Fiil, üçüncü tekil şahıs şimdiki zaman
İÇİNDE Edat veya ikincil bağlaç
NNP Uygun isim, tekil
KİME -e
JJ Sıfat

Konuşma Bölümlerini Etiketleme

OpenNLP, bir cümlenin konuşma bölümlerini etiketlemek için bir model, adında bir dosya kullanır. en-posmaxent.bin. Bu, verilen ham metnin konuşma bölümlerini etiketlemek için eğitilmiş önceden tanımlanmış bir modeldir.

POSTaggerME sınıfı opennlp.tools.postagpaketi, bu modeli yüklemek ve OpenNLP kitaplığını kullanarak verilen ham metnin konuşma bölümlerini etiketlemek için kullanılır. Bunu yapmak için yapmanız gerekenler -

  • Yükle en-pos-maxent.bin kullanarak model POSModel sınıf.

  • Örnekleyin POSTaggerME sınıf.

  • Cümleyi şifreleyin.

  • Kullanarak etiketleri oluşturun tag() yöntem.

  • Belirteçleri ve etiketleri kullanarak yazdırın POSSample sınıf.

Aşağıdaki ham metinde konuşmanın bölümlerini kullanarak etiketleyen bir program yazmak için izlenecek adımlar aşağıdadır. POSTaggerME sınıf.

Adım 1: Modeli yükleyin

POS etiketleme modeli, adlı sınıf tarafından temsil edilir. POSModelpakete ait olan opennlp.tools.postag.

Bir jetonlaştırıcı modeli yüklemek için -

  • Oluşturduğunuz bir InputStream modelin nesnesi (FileInputStream öğesini örnekleyin ve modelin yolunu String biçiminde yapıcısına iletin).

  • Örnekleyin POSModel sınıf ve geç InputStream (nesne), aşağıdaki kod bloğunda gösterildiği gibi yapıcısına bir parametre olarak modelin -

//Loading Parts of speech-maxent model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin"); 
POSModel model = new POSModel(inputStream);

Adım 2: POSTaggerME sınıfını örnekleme

POSTaggerME paketin sınıfı opennlp.tools.postagverilen ham metnin konuşma bölümlerini tahmin etmek için kullanılır. Kararlarını vermek için Maksimum Entropi kullanır.

Bu sınıfı örnekleyin ve aşağıda gösterildiği gibi önceki adımda oluşturulan model nesnesini iletin -

//Instantiating POSTaggerME class 
POSTaggerME tagger = new POSTaggerME(model);

3. Adım: Cümlenin şifrelenmesi

tokenize() yöntemi whitespaceTokenizersınıfı, kendisine iletilen ham metni belirtmek için kullanılır. Bu yöntem bir String değişkenini parametre olarak kabul eder ve bir Dizeler (belirteçler) dizisi döndürür.

Örnekleyin whitespaceTokenizer sınıfı ve cümlenin String biçimini bu yönteme ileterek bu yöntemi çağırın.

//Tokenizing the sentence using WhitespaceTokenizer class  
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; 
String[] tokens = whitespaceTokenizer.tokenize(sentence);

4. Adım: Etiketleri oluşturma

tag() yöntemi whitespaceTokenizerclass, POS etiketlerini jetonların cümlesine atar. Bu yöntem bir dizi belirteci (String) bir parametre olarak kabul eder ve tag (dizi) döndürür.

Çağırın tag() yöntem, önceki adımda oluşturulan jetonları ona geçirerek.

//Generating tags 
String[] tags = tagger.tag(tokens);

Adım 5: Jetonları ve etiketleri yazdırma

POSSamplesınıf, POS etiketli cümleyi temsil eder. Bu sınıfı somutlaştırmak için, bir dizi (metin) ve bir etiket dizisi gerekir.

toString()bu sınıfın yöntemi etiketli cümleyi döndürür. Önceki adımlarda oluşturulan belirteci ve etiket dizilerini ileterek bu sınıfı somutlaştırın vetoString() yöntem, aşağıdaki kod bloğunda gösterildiği gibi.

//Instantiating the POSSample class 
POSSample sample = new POSSample(tokens, tags); 
System.out.println(sample.toString());

Example

Aşağıda, belirli bir ham metinde konuşma bölümlerini etiketleyen program verilmiştir. Bu programı adıyla bir dosyaya kaydedinPosTaggerExample.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()); 
   
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac PosTaggerExample.java 
java PosTaggerExample

Yürütüldüğünde, yukarıdaki program verilen metni okur ve bu cümlelerin konuşma bölümlerini tespit eder ve aşağıda gösterildiği gibi görüntüler.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB

POS Etiketleyici Performansı

Aşağıda, belirli bir ham metnin konuşma bölümlerini etiketleyen program verilmiştir. Ayrıca, performansı izler ve etiketleyicinin performansını gösterir. Bu programı adıyla bir dosyaya kaydedinPosTagger_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();      
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac PosTaggerExample.java 
java PosTaggerExample

Yürütüldüğünde, yukarıdaki program verilen metni okur ve bu cümlelerin konuşma bölümlerini etiketler ve görüntüler. Ek olarak, POS etiketleyicinin performansını da izler ve görüntüler.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB  
Average: 0.0 sent/s  
Total: 1 sent 
Runtime: 0.0s

POS Etiketleyici Olasılığı

probs() yöntemi POSTaggerME sınıfı, yakın zamanda etiketlenen cümlenin her bir etiketinin olasılıklarını bulmak için kullanılır.

//Getting the probabilities of the recent calls to tokenizePos() method 
double[] probs = detector.getSentenceProbabilities();

Aşağıda, etiketlenen son cümlenin her bir etiketi için olasılıkları gösteren program yer almaktadır. Bu programı adıyla bir dosyaya kaydedinPosTaggerProbs.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]); 
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac TokenizerMEProbs.java 
java TokenizerMEProbs

Yürütüldüğünde, yukarıdaki program verilen ham metni okur, içindeki her simgenin konuşma bölümlerini etiketler ve bunları görüntüler. Ek olarak, aşağıda gösterildiği gibi, verilen cümledeki her bir kelime parçası için olasılıkları da gösterir.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB    
0.6416834779738033 
0.42983612874819177 
0.8584513635863117 
0.4394784478206072

OpenNLP API kullanarak verilen cümleleri ayrıştırabilirsiniz. Bu bölümde, OpenNLP API kullanılarak ham metnin nasıl ayrıştırılacağını tartışacağız.

OpenNLP Kitaplığını Kullanarak Ham Metni Ayrıştırma

Cümleleri algılamak için, OpenNLP önceden tanımlanmış bir model kullanır; en-parserchunking.bin. Bu, verilen ham metni ayrıştırmak için eğitilmiş önceden tanımlanmış bir modeldir.

Parser sınıfı opennlp.tools.Parser paket ayrıştırma bileşenlerini tutmak için kullanılır ve ParserTool sınıfı opennlp.tools.cmdline.parser paket içeriği ayrıştırmak için kullanılır.

Aşağıda, verilen ham metni kullanarak ayrıştıran bir program yazmak için izlenecek adımlar verilmiştir. ParserTool sınıf.

Adım 1: Modeli yükleme

Metni ayrıştırma modeli, adlı sınıf tarafından temsil edilir. ParserModelpakete ait olan opennlp.tools.parser.

Bir jetonlaştırıcı modeli yüklemek için -

  • Oluşturduğunuz bir InputStream modelin nesnesi (FileInputStream öğesini örnekleyin ve modelin yolunu String biçiminde yapıcısına iletin).

  • Örnekleyin ParserModel sınıf ve geç InputStream (nesne) modelinin yapıcısına bir parametre olarak aşağıdaki kod bloğunda gösterildiği gibi.

//Loading parser model 
InputStream inputStream = new FileInputStream(".../en-parserchunking.bin"); 
ParserModel model = new ParserModel(inputStream);

Adım 2: Parser sınıfının bir nesnesini oluşturma

Parser paketin sınıfı opennlp.tools.parserayrıştırma bileşenlerini tutmak için bir veri yapısını temsil eder. Statik kullanarak bu sınıfın bir nesnesini oluşturabilirsiniz.create() yöntemi ParserFactory sınıf.

Çağırın create() yöntemi ParserFactory önceki adımda oluşturulan model nesnesini aşağıda gösterildiği gibi ileterek -

//Creating a parser Parser parser = ParserFactory.create(model);

3. Adım: Cümlenin ayrıştırılması

parseLine() yöntemi ParserToolsınıfı, ham metni OpenNLP'de ayrıştırmak için kullanılır. Bu yöntem kabul eder -

  • ayrıştırılacak metni temsil eden bir String değişkeni.

  • ayrıştırıcı nesnesi.

  • gerçekleştirilecek ayrıştırma sayısını temsil eden bir tam sayı.

Aşağıdaki parametreleri cümleyi ileterek bu yöntemi çağırın: önceki adımlarda oluşturulan ayrıştırma nesnesi ve yürütülecek gerekli çözümleme sayısını temsil eden bir tam sayı.

//Parsing the sentence 
String sentence = "Tutorialspoint is the largest tutorial library.";       
Parse topParses[] = ParserTool.parseLine(sentence, parser, 1);

Example

Verilen ham metni ayrıştıran program aşağıdadır. Bu programı adıyla bir dosyaya kaydedinParserExample.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();          
   } 
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac ParserExample.java 
java ParserExample

Yürütüldüğünde, yukarıdaki program verilen ham metni okur, ayrıştırır ve aşağıdaki çıktıyı görüntüler -

(TOP (S (NP (NN Tutorialspoint)) (VP (VBZ is) (NP (DT the) (JJS largest) (NN
   tutorial) (NN library.)))))

Bir cümleyi parçalamak, bir cümleyi kelime grupları ve fiil grupları gibi kelimelerin parçalarına ayırmak / bölmek anlamına gelir.

OpenNLP Kullanarak Cümle Oluşturma

Cümleleri algılamak için OpenNLP, bir model, adında bir dosya kullanır. en-chunker.bin. Bu, verilen ham metindeki cümleleri parçalamak için eğitilmiş önceden tanımlanmış bir modeldir.

opennlp.tools.chunker paketi, isim öbekleri gibi özyinelemeli olmayan sözdizimsel ek açıklamaları bulmak için kullanılan sınıfları ve arabirimleri içerir.

Yöntemi kullanarak bir cümleyi parçalayabilirsiniz chunk() of ChunkerMEsınıf. Bu yöntem, bir cümlenin simgelerini ve POS etiketlerini parametre olarak kabul eder. Bu nedenle, parçalama sürecine başlamadan önce, öncelikle cümleyi şifrelemeniz ve bölümlerinin POS etiketlerini oluşturmanız gerekir.

OpenNLP kitaplığını kullanarak bir cümleyi parçalamak için yapmanız gerekenler -

  • Cümleyi şifreleyin.

  • Bunun için POS etiketleri oluşturun.

  • Yükle en-chunker.bin kullanarak model ChunkerModel sınıf

  • Örnekleyin ChunkerME sınıf.

  • Kullanarak cümleleri parçalara ayırın chunk() bu sınıfın yöntemi.

Verilen ham metinden cümleleri parçalamak için bir program yazmak için izlenecek adımlar aşağıdadır.

Adım 1: Cümlenin şifrelenmesi

Cümleleri kullanarak şifreleyin tokenize() yöntemi whitespaceTokenizer aşağıdaki kod bloğunda gösterildiği gibi.

//Tokenizing the sentence 
String sentence = "Hi welcome to Tutorialspoint";       
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE; 
String[] tokens = whitespaceTokenizer.tokenize(sentence);

Adım 2: POS etiketlerinin oluşturulması

Cümlenin POS etiketlerini kullanarak tag() yöntemi POSTaggerME aşağıdaki kod bloğunda gösterildiği gibi.

//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. Adım: Modeli yükleme

Bir cümleyi parçalama modeli, adlı sınıf tarafından temsil edilir. ChunkerModelpakete ait olan opennlp.tools.chunker.

Bir cümle algılama modeli yüklemek için -

  • Oluşturduğunuz bir InputStream modelin nesnesi (FileInputStream öğesini örnekleyin ve modelin yolunu String biçiminde yapıcısına iletin).

  • Örnekleyin ChunkerModel sınıf ve geç InputStream (nesne), aşağıdaki kod bloğunda gösterildiği gibi yapıcısına bir parametre olarak modelin -

//Loading the chunker model 
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-chunker.bin"); 
ChunkerModel chunkerModel = new ChunkerModel(inputStream);

Adım 4: chunkerME sınıfını örnekleme

chunkerME paketin sınıfı opennlp.tools.chunkercümleleri parçalamak için yöntemler içerir. Bu, maksimum entropi tabanlı bir parçalayıcıdır.

Bu sınıfı örnekleyin ve önceki adımda oluşturulan model nesnesini iletin.

//Instantiate the ChunkerME class 
ChunkerME chunkerME = new ChunkerME(chunkerModel);

Adım 5: Cümlenin parçalanması

chunk() yöntemi ChunkerMEsınıfı, kendisine aktarılan ham metindeki cümleleri parçalara ayırmak için kullanılır. Bu yöntem, belirteçleri ve etiketleri parametreler olarak temsil eden iki String dizisini kabul eder.

Önceki adımlarda oluşturulan belirteç dizisini ve etiket dizisini parametre olarak ileterek bu yöntemi çağırın.

//Generating the chunks 
String result[] = chunkerME.chunk(tokens, tags);

Example

Aşağıda, verilen ham metindeki cümleleri parçalama programı verilmiştir. Bu programı adıyla bir dosyaya kaydedinChunkerExample.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);         
   }    
}

Kaydedilen Java dosyasını aşağıdaki komutu kullanarak Komut isteminden derleyin ve yürütün -

javac ChunkerExample.java 
java ChunkerExample

Yürütüldüğünde, yukarıdaki program verilen String'i okur ve içindeki cümleleri parçalar ve aşağıda gösterildiği gibi görüntüler.

Loading POS Tagger model ... done (1.040s) 
B-NP 
I-NP 
B-VP 
I-VP

Jetonların Konumlarının Tespiti

Ayrıca parçaların konumlarını veya aralıklarını da chunkAsSpans() yöntemi ChunkerMEsınıf. Bu yöntem, Span türünde bir dizi nesne döndürür. Span adlı sınıfopennlp.tools.util paketi saklamak için kullanılır start ve end kümelerin tamsayısı.

Tarafından döndürülen aralıkları saklayabilirsiniz. chunkAsSpans() yöntemini Span dizisine ekleyin ve aşağıdaki kod bloğunda gösterildiği gibi yazdırın.

//Generating the tagged chunk spans 
Span[] span = chunkerME.chunkAsSpans(tokens, tags); 
       
for (Span s : span) 
   System.out.println(s.toString());

Example

Aşağıda verilen ham metindeki cümleleri tespit eden program yer almaktadır. Bu programı adıyla bir dosyaya kaydedinChunkerSpansEample.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());  
   }    
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac ChunkerSpansEample.java 
java ChunkerSpansEample

Yürütüldüğünde, yukarıdaki program verilen String'i ve içindeki parçaların aralıklarını okur ve aşağıdaki çıktıyı görüntüler -

Loading POS Tagger model ... done (1.059s) 
[0..2) NP 
[2..4) VP

Chunker Olasılık Algılama

probs() yöntemi ChunkerME sınıfı, son kodu çözülen dizinin olasılıklarını döndürür.

//Getting the probabilities of the last decoded sequence       
double[] probs = chunkerME.probs();

Aşağıda, son kodu çözülen dizinin olasılıklarını, chunker. Bu programı adıyla bir dosyaya kaydedinChunkerProbsExample.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]);       
   }    
}

Kaydedilen Java dosyasını aşağıdaki komutları kullanarak Komut isteminden derleyin ve yürütün -

javac ChunkerProbsExample.java 
java ChunkerProbsExample

Yürütüldüğünde, yukarıdaki program verilen String'i okur, parçalara ayırır ve son kodu çözülen dizinin olasılıklarını yazdırır.

0.9592746040797778 
0.6883933131241501 
0.8830563473996004 
0.8951150529746051

OpenNLP, komut satırı üzerinden farklı işlemler gerçekleştirmek için bir Komut Satırı Arayüzü (CLI) sağlar. Bu bölümde, OpenNLP Komut Satırı Arayüzünü nasıl kullanabileceğimizi göstermek için bazı örnekler alacağız.

Tokenleştirme

input.txt

Hi. How are you? Welcome to Tutorialspoint. We provide free tutorials on various technologies

Sözdizimi

> opennlp TokenizerME path_for_models../en-token.bin <inputfile..> outputfile..

komut

C:\> opennlp TokenizerME C:\OpenNLP_models/en-token.bin <input.txt >output.txt

çıktı

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

Cümle Algılama

input.txt

Hi. How are you? Welcome to Tutorialspoint. We provide free tutorials on various technologies

Sözdizimi

> opennlp SentenceDetector path_for_models../en-token.bin <inputfile..> outputfile..

komut

C:\> opennlp SentenceDetector C:\OpenNLP_models/en-sent.bin <input.txt > output_sendet.txt

Çıktı

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

Adlandırılmış Varlık Tanıma

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

Sözdizimi

> opennlp TokenNameFinder path_for_models../en-token.bin <inputfile..

Komut

C:\>opennlp TokenNameFinder C:\OpenNLP_models\en-ner-person.bin <input_namefinder.txt

Çıktı

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

Konuşma Etiketlemenin Parçaları

Input.txt

Hi. How are you? Welcome to Tutorialspoint. We provide free tutorials on various technologies

Sözdizimi

> opennlp POSTagger path_for_models../en-token.bin <inputfile..

Komut

C:\>opennlp POSTagger C:\OpenNLP_models/en-pos-maxent.bin < input.txt

Çıktı

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