OpenNLP - Szybki przewodnik

NLP to zestaw narzędzi służących do uzyskiwania znaczących i przydatnych informacji ze źródeł w języku naturalnym, takich jak strony internetowe i dokumenty tekstowe.

Co to jest Open NLP?

Apache OpenNLPto biblioteka Java typu open source, która służy do przetwarzania tekstu w języku naturalnym. Korzystając z tej biblioteki, możesz zbudować wydajną usługę przetwarzania tekstu.

OpenNLP zapewnia usługi, takie jak tokenizacja, segmentacja zdań, tagowanie części mowy, wyodrębnianie nazwanych jednostek, fragmentowanie, analizowanie i rozwiązywanie współodniesień itp.

Funkcje OpenNLP

Poniżej przedstawiono godne uwagi funkcje OpenNLP -

  • Named Entity Recognition (NER) - Open NLP obsługuje NER, za pomocą którego możesz wyodrębnić nazwy lokalizacji, osób i rzeczy, nawet podczas przetwarzania zapytań.

  • Summarize - Korzystanie z summarize funkcja, możesz podsumować paragrafy, artykuły, dokumenty lub ich kolekcję w NLP.

  • Searching - W OpenNLP podany ciąg wyszukiwania lub jego synonimy można zidentyfikować w podanym tekście, nawet jeśli dane słowo jest zmienione lub błędnie zapisane.

  • Tagging (POS) - Oznaczanie w NLP służy do podzielenia tekstu na różne elementy gramatyczne do dalszej analizy.

  • Translation - W NLP tłumaczenie pomaga w tłumaczeniu jednego języka na inny.

  • Information grouping - Ta opcja w NLP grupuje informacje tekstowe w treści dokumentu, podobnie jak części mowy.

  • Natural Language Generation - Służy do generowania informacji z bazy danych i automatyzacji raportów informacyjnych, takich jak analiza pogody czy raporty medyczne.

  • Feedback Analysis - Jak sama nazwa wskazuje, NLP zbiera różnego rodzaju informacje zwrotne od ludzi na temat produktów, aby przeanalizować, jak skutecznie produkt zdobywa ich serca.

  • Speech recognition - Chociaż analiza ludzkiej mowy jest trudna, NLP ma kilka wbudowanych funkcji spełniających to wymaganie.

Otwórz interfejs API NLP

Biblioteka Apache OpenNLP zapewnia klasy i interfejsy do wykonywania różnych zadań przetwarzania języka naturalnego, takich jak wykrywanie zdań, tokenizacja, znajdowanie nazwy, tagowanie części mowy, dzielenie zdań, analizowanie, rozwiązywanie współodniesień i kategoryzowanie dokumentów.

Oprócz tych zadań możemy również szkolić i oceniać nasze własne modele dla każdego z tych zadań.

OpenNLP CLI

Oprócz biblioteki OpenNLP zapewnia również interfejs wiersza poleceń (CLI), w którym możemy trenować i oceniać modele. Omówimy ten temat szczegółowo w ostatnim rozdziale tego samouczka.

Otwarte modele NLP

Aby wykonywać różne zadania NLP, OpenNLP udostępnia zestaw predefiniowanych modeli. Ten zestaw zawiera modele dla różnych języków.

Pobieranie modeli

Możesz postępować zgodnie z instrukcjami podanymi poniżej, aby pobrać predefiniowane modele dostarczone przez OpenNLP.

Step 1 - Otwórz stronę indeksu modeli OpenNLP, klikając poniższy link - http://opennlp.sourceforge.net/models-1.5/.

Step 2- Odwiedzając podany link, zobaczysz listę komponentów różnych języków i linki do ich pobrania. Tutaj możesz uzyskać listę wszystkich predefiniowanych modeli dostarczonych przez OpenNLP.

Pobierz wszystkie te modele do folderu C:/OpenNLP_models/>, klikając ich odnośniki. Wszystkie te modele są zależne od języka i podczas ich używania musisz upewnić się, że język modelu pasuje do języka tekstu wejściowego.

Historia OpenNLP

  • W 2010 roku OpenNLP wszedł do inkubacji Apache.

  • W 2011 roku wydano Apache OpenNLP 1.5.2 Incubating, który w tym samym roku ukończył jako projekt najwyższego poziomu Apache.

  • W 2015 roku OpenNLP został wydany w wersji 1.6.0.

W tym rozdziale omówimy, w jaki sposób możesz skonfigurować środowisko OpenNLP w swoim systemie. Zacznijmy od procesu instalacji.

Instalowanie OpenNLP

Poniżej przedstawiono kroki do pobrania Apache OpenNLP library w twoim systemie.

Step 1 - Otwórz stronę główną Apache OpenNLP klikając poniższy link - https://opennlp.apache.org/.

Step 2 - Teraz kliknij Downloadspołączyć. Po kliknięciu zostaniesz przekierowany na stronę, na której znajdziesz różne serwery lustrzane, które przekierują Cię do katalogu dystrybucji Apache Software Foundation.

Step 3- Na tej stronie można znaleźć łącza do pobierania różnych dystrybucji Apache. Przejrzyj je, znajdź dystrybucję OpenNLP i kliknij ją.

Step 4 - Po kliknięciu zostaniesz przekierowany do katalogu, w którym możesz zobaczyć indeks dystrybucji OpenNLP, jak pokazano poniżej.

Kliknij najnowszą wersję z dostępnych dystrybucji.

Step 5- Każda dystrybucja zapewnia pliki źródłowe i binarne biblioteki OpenNLP w różnych formatach. Pobierz pliki źródłowe i binarne,apache-opennlp-1.6.0-bin.zip i apache-opennlp1.6.0-src.zip (dla Windowsa).

Ustawianie ścieżki klas

Po pobraniu biblioteki OpenNLP należy ustawić jej ścieżkę do pliku bininformator. Załóżmy, że pobrałeś bibliotekę OpenNLP na dysk E swojego systemu.

Teraz wykonaj kroki podane poniżej -

Step 1 - Kliknij prawym przyciskiem myszy „Mój komputer” i wybierz „Właściwości”.

Step 2 - Kliknij przycisk „Zmienne środowiskowe” na karcie „Zaawansowane”.

Step 3 - Wybierz plik path zmienną i kliknij Edit przycisk, jak pokazano na poniższym zrzucie ekranu.

Step 4 - W oknie Edytuj zmienną środowiskową kliknij plik New i dodaj ścieżkę do katalogu OpenNLP E:\apache-opennlp-1.6.0\bin i kliknij OK przycisk, jak pokazano na poniższym zrzucie ekranu.

Instalacja Eclipse

Możesz ustawić środowisko Eclipse dla biblioteki OpenNLP, ustawiając plik Build path do plików JAR lub za pomocą pom.xml.

Ustawianie ścieżki budowania do plików JAR

Wykonaj poniższe kroki, aby zainstalować OpenNLP w Eclipse -

Step 1 - Upewnij się, że w systemie jest zainstalowane środowisko Eclipse.

Step 2- Otwórz Eclipse. Kliknij Plik → Nowy → Otwórz nowy projekt, jak pokazano poniżej.

Step 3 - Dostaniesz New Projectczarodziej. W tym kreatorze wybierz projekt Java i kontynuuj, klikającNext przycisk.

Step 4 - Następnie otrzymasz plik New Java Project wizard. Tutaj musisz utworzyć nowy projekt i kliknąćNext przycisk, jak pokazano poniżej.

Step 5 - Po utworzeniu nowego projektu kliknij go prawym przyciskiem myszy, wybierz Build Path i kliknij Configure Build Path.

Step 6 - Następnie otrzymasz plik Java Build Pathczarodziej. Tutaj kliknijAdd External JARs przycisk, jak pokazano poniżej.

Step 7 - Wybierz pliki jar opennlp-tools-1.6.0.jar i opennlp-uima-1.6.0.jar zlokalizowany w lib folder z apache-opennlp-1.6.0 folder.

Po kliknięciu Open na powyższym ekranie wybrane pliki zostaną dodane do Twojej biblioteki.

Po kliknięciu OK, pomyślnie dodasz wymagane pliki JAR do bieżącego projektu i możesz zweryfikować te dodane biblioteki, rozszerzając Biblioteki, do których istnieją odniesienia, jak pokazano poniżej.

Korzystanie z pom.xml

Przekonwertuj projekt na projekt Maven i Dodaj następujący kod do jego 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>

W tym rozdziale omówimy klasy i metody, których będziemy używać w kolejnych rozdziałach tego samouczka.

Wykrywanie zdań

SentenceModel, klasa

Ta klasa reprezentuje predefiniowany model, który jest używany do wykrywania zdań w danym surowym tekście. Ta klasa należy do pakietuopennlp.tools.sentdetect.

Konstruktor tej klasy akceptuje plik InputStream obiekt pliku modelu detektora zdań (en-sent.bin).

SentenceDetectorME, klasa

Ta klasa należy do pakietu opennlp.tools.sentdetecti zawiera metody dzielenia surowego tekstu na zdania. Ta klasa używa modelu maksymalnej entropii do oceny znaków końca zdania w ciągu w celu określenia, czy oznaczają one koniec zdania.

Poniżej przedstawiono ważne metody tej klasy.

S.Nr Metody i opis
1

sentDetect()

Ta metoda służy do wykrywania zdań w przekazanym nieprzetworzonym tekście. Przyjmuje zmienną String jako parametr i zwraca tablicę String, która przechowuje zdania z podanego surowego tekstu.

2

sentPosDetect()

Ta metoda służy do wykrywania pozycji zdań w danym tekście. Ta metoda przyjmuje zmienną łańcuchową reprezentującą zdanie i zwraca tablicę obiektów tego typuSpan.

Klasa o nazwie Span z opennlp.tools.util pakiet służy do przechowywania początkowej i końcowej liczby całkowitej zestawów.

3

getSentenceProbabilities()

Ta metoda zwraca prawdopodobieństwa skojarzone z ostatnimi wywołaniami funkcji sentDetect() metoda.

Tokenizacja

Klasa TokenizerModel

Ta klasa reprezentuje predefiniowany model, który jest używany do tokenizacji danego zdania. Ta klasa należy do pakietuopennlp.tools.tokenizer.

Konstruktor tej klasy akceptuje plik InputStream obiekt pliku modelu tokenizera (entoken.bin).

Zajęcia

Aby przeprowadzić tokenizację, biblioteka OpenNLP udostępnia trzy główne klasy. Wszystkie trzy klasy implementują interfejs o nazwieTokenizer.

S.Nr Klasy i opis
1

SimpleTokenizer

Ta klasa tokenizuje dany surowy tekst za pomocą klas znaków.

2

WhitespaceTokenizer

Ta klasa używa białych znaków do tokenizacji podanego tekstu.

3

TokenizerME

Ta klasa konwertuje surowy tekst na oddzielne tokeny. Używa maksymalnej entropii do podejmowania decyzji.

Te klasy zawierają następujące metody.

S.Nr Metody i opis
1

tokenize()

Ta metoda służy do tokenizacji surowego tekstu. Ta metoda akceptuje zmienną String jako parametr i zwraca tablicę Strings (tokenów).

2

sentPosDetect()

Ta metoda służy do uzyskania pozycji lub rozpiętości tokenów. Przyjmuje zdanie (lub) surowy tekst w postaci łańcucha i zwraca tablicę obiektów tego typuSpan.

Oprócz powyższych dwóch metod TokenizerME klasa ma getTokenProbabilities() metoda.

S.Nr Metody i opis
1

getTokenProbabilities()

Ta metoda służy do pobierania prawdopodobieństw skojarzonych z ostatnimi wywołaniami metody tokenizePos() metoda.

NameEntityRecognition

Klasa TokenNameFinderModel

Ta klasa reprezentuje predefiniowany model, który jest używany do wyszukiwania nazwanych jednostek w danym zdaniu. Ta klasa należy do pakietuopennlp.tools.namefind.

Konstruktor tej klasy akceptuje plik InputStream obiekt pliku modelu wyszukiwarki nazw (enner-person.bin).

NameFinderME klasa

Klasa należy do pakietu opennlp.tools.namefindi zawiera metody wykonywania zadań NER. Ta klasa używa modelu maksymalnej entropii, aby znaleźć nazwane jednostki w danym surowym tekście.

S.Nr Metody i opis
1

find()

Ta metoda służy do wykrywania nazw w surowym tekście. Przyjmuje zmienną typu String reprezentującą surowy tekst jako parametr i zwraca tablicę obiektów typu Span.

2

probs()

Ta metoda służy do uzyskania prawdopodobieństwa ostatniej dekodowanej sekwencji.

Znajdowanie części mowy

Klasa POSModel

Ta klasa reprezentuje predefiniowany model, który jest używany do oznaczania części mowy danego zdania. Ta klasa należy do pakietuopennlp.tools.postag.

Konstruktor tej klasy akceptuje plik InputStream obiekt pliku modelu pos-taggera (enpos-maxent.bin).

Klasa POSTaggerME

Ta klasa należy do pakietu opennlp.tools.postagi służy do przewidywania części mowy danego surowego tekstu. Do podejmowania decyzji używa maksymalnej entropii.

S.Nr Metody i opis
1

tag()

Ta metoda służy do przypisywania zdania znaczników tokenów POS. Ta metoda przyjmuje tablicę tokenów (String) jako parametr i zwraca tagi (tablicę).

2

getSentenceProbabilities()

Ta metoda jest używana do uzyskania prawdopodobieństw dla każdego znacznika ostatnio oznaczonego zdania.

Analiza zdania

ParserModel, klasa

Ta klasa reprezentuje predefiniowany model, który jest używany do analizowania danego zdania. Ta klasa należy do pakietuopennlp.tools.parser.

Konstruktor tej klasy akceptuje plik InputStream obiekt pliku modelu parsera (en-parserchunking.bin).

Parser Factory, klasa

Ta klasa należy do pakietu opennlp.tools.parser i jest używany do tworzenia parserów.

S.Nr Metody i opis
1

create()

Jest to metoda statyczna i służy do tworzenia obiektu analizatora składni. Ta metoda akceptuje obiekt Filestream pliku modelu parsera.

ParserTool, klasa

Ta klasa należy do opennlp.tools.cmdline.parser pakiet i służy do analizowania zawartości.

S.Nr Metody i opis
1

parseLine()

Ta metoda ParserToolklasa jest używana do analizowania surowego tekstu w OpenNLP. Ta metoda akceptuje -

  • Zmienna typu String reprezentująca tekst do przeanalizowania.
  • Obiekt parsera.
  • Liczba całkowita reprezentująca liczbę przeprowadzanych analiz.

Kruszenie

Klasa ChunkerModel

Ta klasa reprezentuje predefiniowany model, który służy do dzielenia zdania na mniejsze części. Ta klasa należy do pakietuopennlp.tools.chunker.

Konstruktor tej klasy akceptuje plik InputStream obiekt chunker plik modelu (enchunker.bin).

Klasa ChunkerME

Ta klasa należy do pakietu o nazwie opennlp.tools.chunker i służy do podzielenia danego zdania na mniejsze części.

S.Nr Metody i opis
1

chunk()

Ta metoda służy do podzielenia danego zdania na mniejsze części. Akceptuje tokeny wyroku iPsztuka Ofa SPeech tagi jako parametry.

2

probs()

Ta metoda zwraca prawdopodobieństwa ostatniej zdekodowanej sekwencji.

Podczas przetwarzania języka naturalnego jednym z problemów do rozwiązania jest ustalenie początku i końca zdania. Ten proces jest znany jakoSwejście Boundary Dizambiguacja (SBD) lub po prostu łamanie zdań.

Techniki, których używamy do wykrywania zdań w danym tekście, zależą od języka tekstu.

Wykrywanie zdań za pomocą języka Java

Możemy wykryć zdania w podanym tekście w Javie za pomocą wyrażeń regularnych i zestawu prostych reguł.

Załóżmy na przykład, że na końcu zdania w danym tekście kończy się kropka, znak zapytania lub wykrzyknik, a następnie możemy podzielić zdanie za pomocą split() metoda Stringklasa. Tutaj musimy przekazać wyrażenie regularne w formacie String.

Poniżej znajduje się program, który określa zdania w danym tekście za pomocą wyrażeń regularnych Java (split method). Zapisz ten program w pliku o nazwieSentenceDetection_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);      
   } 
}

Skompiluj i uruchom zapisany plik java z wiersza poleceń, używając następujących poleceń.

javac SentenceDetection_RE.java 
java SentenceDetection_RE

Podczas wykonywania powyższy program tworzy dokument PDF z następującym komunikatem.

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

Wykrywanie zdań za pomocą OpenNLP

Aby wykryć zdania, OpenNLP używa predefiniowanego modelu, pliku o nazwie en-sent.bin. Ten predefiniowany model jest uczony do wykrywania zdań w danym surowym tekście.

Plik opennlp.tools.sentdetect pakiet zawiera klasy i interfejsy, które są używane do wykonywania zadania wykrywania zdań.

Aby wykryć zdanie za pomocą biblioteki OpenNLP, musisz -

  • Załaduj en-sent.bin model przy użyciu SentenceModel klasa

  • Utwórz wystąpienie SentenceDetectorME klasa.

  • Wykryj zdania za pomocą sentDetect() metoda tej klasy.

Poniżej przedstawiono kroki, które należy wykonać, aby napisać program, który wykrywa zdania z podanego surowego tekstu.

Krok 1: Ładowanie modelu

Model wykrywania zdań jest reprezentowany przez nazwaną klasę SentenceModel, który należy do pakietu opennlp.tools.sentdetect.

Aby załadować model wykrywania zdań -

  • Stworzyć InputStream obiekt modelu (Utwórz wystąpienie FileInputStream i przekaż ścieżkę modelu w formacie String do jego konstruktora).

  • Utwórz wystąpienie SentenceModel klasę i zdaj InputStream (obiekt) modelu jako parametr jego konstruktora, jak pokazano w poniższym bloku kodu -

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

Krok 2: tworzenie wystąpienia klasy SentenceDetectorME

Plik SentenceDetectorME klasa pakietu opennlp.tools.sentdetectzawiera metody dzielenia surowego tekstu na zdania. Ta klasa używa modelu Maximum Entropy do oceny znaków końca zdania w ciągu w celu określenia, czy oznaczają one koniec zdania.

Utwórz wystąpienie tej klasy i przekaż obiekt modelu utworzony w poprzednim kroku, jak pokazano poniżej.

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

Krok 3: Wykrywanie zdania

Plik sentDetect() metoda SentenceDetectorMEklasa służy do wykrywania zdań w przekazanym do niej nieprzetworzonym tekście. Ta metoda akceptuje zmienną typu String jako parametr.

Wywołaj tę metodę, przekazując format String zdania do tej metody.

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

Example

Poniżej znajduje się program, który wykrywa zdania w danym surowym tekście. Zapisz ten program w pliku o nazwieSentenceDetectionME.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);  
   } 
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac SentenceDetectorME.java 
java SentenceDetectorME

Podczas wykonywania powyższy program odczytuje podany ciąg znaków i wykrywa zawarte w nim zdania i wyświetla następujące dane wyjściowe.

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

Wykrywanie pozycji zdań

Możemy również wykryć pozycje zdań za pomocą metody sentPosDetect () metody SentenceDetectorME class.

Poniżej przedstawiono kroki, które należy wykonać, aby napisać program wykrywający pozycje zdań z podanego surowego tekstu.

Krok 1: Ładowanie modelu

Model wykrywania zdań jest reprezentowany przez nazwaną klasę SentenceModel, który należy do pakietu opennlp.tools.sentdetect.

Aby załadować model wykrywania zdań -

  • Stworzyć InputStream obiekt modelu (Utwórz wystąpienie FileInputStream i przekaż ścieżkę modelu w formacie String do jego konstruktora).

  • Utwórz wystąpienie SentenceModel klasę i zdaj InputStream (obiekt) modelu jako parametr jego konstruktora, jak pokazano w poniższym bloku kodu.

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

Krok 2: tworzenie wystąpienia klasy SentenceDetectorME

Plik SentenceDetectorME klasa pakietu opennlp.tools.sentdetectzawiera metody dzielenia surowego tekstu na zdania. Ta klasa używa modelu Maximum Entropy do oceny znaków końca zdania w ciągu w celu określenia, czy oznaczają one koniec zdania.

Utwórz wystąpienie tej klasy i przekaż obiekt modelu utworzony w poprzednim kroku.

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

Krok 3: Wykrywanie pozycji zdania

Plik sentPosDetect() metoda SentenceDetectorMEklasa służy do wykrywania pozycji zdań w przekazanym do niej nieprzetworzonym tekście. Ta metoda akceptuje zmienną typu String jako parametr.

Wywołaj tę metodę, przekazując format String zdania jako parametr do tej metody.

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

Krok 4: Drukowanie rozpiętości zdań

Plik sentPosDetect() metoda SentenceDetectorME class zwraca tablicę obiektów tego typu Span. Klasa o nazwie Span of theopennlp.tools.util pakiet służy do przechowywania początkowej i końcowej liczby całkowitej zestawów.

Możesz przechowywać rozpiętości zwrócone przez sentPosDetect() w tablicy Span i wydrukuj je, jak pokazano w poniższym bloku kodu.

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

Example

Poniżej znajduje się program, który wykrywa zdania w podanym surowym tekście. Zapisz ten program w pliku o nazwieSentenceDetectionME.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);  
   } 
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac SentencePosDetection.java 
java SentencePosDetection

Podczas wykonywania powyższy program odczytuje podany ciąg znaków i wykrywa zawarte w nim zdania i wyświetla następujące dane wyjściowe.

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

Zdania wraz z ich pozycjami

Plik substring() metoda klasy String akceptuje metodę begin i end offsetsi zwraca odpowiedni ciąg. Możemy użyć tej metody do wydrukowania zdań i ich rozpiętości (pozycji) razem, jak pokazano w poniższym bloku kodu.

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

Poniżej znajduje się program do wykrywania zdań z podanego surowego tekstu i wyświetlania ich wraz z ich pozycjami. Zapisz ten program w pliku o nazwieSentencesAndPosDetection.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);  
   } 
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac SentencesAndPosDetection.java 
java SentencesAndPosDetection

Podczas wykonywania powyższy program odczytuje podany ciąg znaków i wykrywa zdania wraz z ich pozycjami i wyświetla następujące dane wyjściowe.

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

Wykrywanie prawdopodobieństwa zdania

Plik getSentenceProbabilities() metoda SentenceDetectorME class zwraca prawdopodobieństwa skojarzone z ostatnimi wywołaniami metody sentDetect ().

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

Poniżej znajduje się program wyświetlający prawdopodobieństwa związane z wywołaniami metody sentDetect (). Zapisz ten program w pliku o nazwieSentenceDetectionMEProbs.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]); 
   } 
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac SentenceDetectionMEProbs.java 
java SentenceDetectionMEProbs

Podczas wykonywania powyższy program czyta podany String i wykrywa zdania i je drukuje. Ponadto zwraca również prawdopodobieństwa związane z ostatnimi wywołaniami metody sentDetect (), jak pokazano poniżej.

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

Proces dzielenia danego zdania na mniejsze części (żetony) jest znany jako tokenization. Ogólnie rzecz biorąc, dany tekst surowy jest tokenizowany na podstawie zestawu ograniczników (głównie białych znaków).

Tokenizacja jest wykorzystywana w zadaniach takich jak sprawdzanie pisowni, przetwarzanie wyszukiwań, identyfikacja części mowy, wykrywanie zdań, klasyfikacja dokumentów dokumentów itp.

Tokenizacja za pomocą OpenNLP

Plik opennlp.tools.tokenize pakiet zawiera klasy i interfejsy, które są używane do wykonywania tokenizacji.

Aby tokenizować podane zdania na prostsze fragmenty, biblioteka OpenNLP udostępnia trzy różne klasy -

  • SimpleTokenizer - Ta klasa tokenizuje podany surowy tekst przy użyciu klas znaków.

  • WhitespaceTokenizer - Ta klasa używa białych znaków do tokenizacji podanego tekstu.

  • TokenizerME- Ta klasa konwertuje surowy tekst na oddzielne tokeny. Używa maksymalnej entropii do podejmowania decyzji.

SimpleTokenizer

Aby tokenizować zdanie za pomocą SimpleTokenizer klasa, musisz -

  • Utwórz obiekt odpowiedniej klasy.

  • Tokenizuj zdanie za pomocą tokenize() metoda.

  • Wydrukuj tokeny.

Poniżej przedstawiono kroki, które należy wykonać, aby napisać program, który tokenizuje podany surowy tekst.

Step 1 - Tworzenie instancji odpowiedniej klasy

W obu klasach nie ma dostępnych konstruktorów do ich tworzenia. Dlatego musimy tworzyć obiekty tych klas za pomocą zmiennej statycznejINSTANCE.

SimpleTokenizer tokenizer = SimpleTokenizer.INSTANCE;

Step 2 - Tokenizuj zdania

Obie te klasy zawierają metodę o nazwie tokenize(). Ta metoda akceptuje nieprzetworzony tekst w formacie String. Podczas wywoływania tokenizuje dany ciąg znaków i zwraca tablicę ciągów znaków (tokenów).

Tokenizuj zdanie za pomocą tokenizer() metoda, jak pokazano poniżej.

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

Step 3 - Wydrukuj tokeny

Po tokenizacji zdania możesz wydrukować tokeny za pomocą for loop, jak pokazano niżej.

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

Example

Poniżej znajduje się program, który tokenizuje dane zdanie za pomocą klasy SimpleTokenizer. Zapisz ten program w pliku o nazwieSimpleTokenizerExample.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);  
      }       
   }  
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac SimpleTokenizerExample.java 
java SimpleTokenizerExample

Podczas wykonywania powyższy program odczytuje podany ciąg (nieprzetworzony tekst), tokenizuje go i wyświetla następujące dane wyjściowe -

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

WhitespaceTokenizer

Aby tokenizować zdanie za pomocą WhitespaceTokenizer klasa, musisz -

  • Utwórz obiekt odpowiedniej klasy.

  • Tokenizuj zdanie za pomocą tokenize() metoda.

  • Wydrukuj tokeny.

Poniżej przedstawiono kroki, które należy wykonać, aby napisać program, który tokenizuje podany surowy tekst.

Step 1 - Tworzenie instancji odpowiedniej klasy

W obu klasach nie ma dostępnych konstruktorów do ich tworzenia. Dlatego musimy tworzyć obiekty tych klas za pomocą zmiennej statycznejINSTANCE.

WhitespaceTokenizer tokenizer = WhitespaceTokenizer.INSTANCE;

Step 2 - Tokenizuj zdania

Obie te klasy zawierają metodę o nazwie tokenize(). Ta metoda akceptuje nieprzetworzony tekst w formacie String. Podczas wywoływania tokenizuje dany ciąg znaków i zwraca tablicę ciągów znaków (tokenów).

Tokenizuj zdanie za pomocą tokenizer() metoda, jak pokazano poniżej.

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

Step 3 - Wydrukuj tokeny

Po tokenizacji zdania możesz wydrukować tokeny za pomocą for loop, jak pokazano niżej.

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

Example

Poniżej znajduje się program, który tokenizuje dane zdanie za pomocą WhitespaceTokenizerklasa. Zapisz ten program w pliku o nazwieWhitespaceTokenizerExample.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);        
   } 
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac WhitespaceTokenizerExample.java 
java WhitespaceTokenizerExample

Podczas wykonywania powyższy program odczytuje dany ciąg (nieprzetworzony tekst), tokenizuje go i wyświetla następujące dane wyjściowe.

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

Klasa TokenizerME

OpenNLP używa również predefiniowanego modelu, pliku o nazwie de-token.bin, do tokenizacji zdań. Jest wyszkolony do tokenizacji zdań w danym surowym tekście.

Plik TokenizerME klasa opennlp.tools.tokenizerpackage jest używany do ładowania tego modelu i tokenizacji podanego surowego tekstu za pomocą biblioteki OpenNLP. Aby to zrobić, musisz -

  • Załaduj en-token.bin model przy użyciu TokenizerModel klasa.

  • Utwórz wystąpienie TokenizerME klasa.

  • Tokenizuj zdania za pomocą tokenize() metoda tej klasy.

Poniżej przedstawiono kroki, które należy wykonać, aby napisać program, który tokenizuje zdania z danego surowego tekstu przy użyciu rozszerzenia TokenizerME klasa.

Step 1 - Ładowanie modelu

Model do tokenizacji jest reprezentowany przez nazwaną klasę TokenizerModel, który należy do pakietu opennlp.tools.tokenize.

Aby załadować model tokenizera -

  • Stworzyć InputStream obiekt modelu (Utwórz wystąpienie FileInputStream i przekaż ścieżkę modelu w formacie String do jego konstruktora).

  • Utwórz wystąpienie TokenizerModel klasę i zdaj InputStream (obiekt) modelu jako parametr jego konstruktora, jak pokazano w poniższym bloku kodu.

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

Step 2 - Tworzenie wystąpienia klasy TokenizerME

Plik TokenizerME klasa pakietu opennlp.tools.tokenizezawiera metody cięcia surowego tekstu na mniejsze części (tokeny). Używa maksymalnej entropii do podejmowania decyzji.

Utwórz wystąpienie tej klasy i przekaż obiekt modelu utworzony w poprzednim kroku, jak pokazano poniżej.

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

Step 3 - Tokenizacja wyroku

Plik tokenize() metoda TokenizerMEklasa jest używana do tokenizacji przekazanego do niej surowego tekstu. Ta metoda przyjmuje zmienną String jako parametr i zwraca tablicę Strings (tokenów).

Wywołaj tę metodę, przekazując format String zdania do tej metody w następujący sposób.

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

Example

Poniżej znajduje się program, który tokenizuje podany surowy tekst. Zapisz ten program w pliku o nazwieTokenizerMEExample.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); 
   } 
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac TokenizerMEExample.java 
java TokenizerMEExample

Podczas wykonywania powyższy program odczytuje podany ciąg i wykrywa zawarte w nim zdania i wyświetla następujący wynik -

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

Pobieranie pozycji tokenów

Możemy również uzyskać pozycje lub spans tokenów przy użyciu rozszerzenia tokenizePos()metoda. To jest metoda interfejsu Tokenizera pakietuopennlp.tools.tokenize. Ponieważ wszystkie (trzy) klasy Tokenizera implementują ten interfejs, możesz znaleźć tę metodę we wszystkich z nich.

Ta metoda przyjmuje zdanie lub surowy tekst w postaci ciągu znaków i zwraca tablicę obiektów tego typu Span.

Możesz uzyskać pozycje żetonów za pomocą tokenizePos() metoda w następujący sposób -

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

Drukowanie pozycji (przęseł)

Klasa o nazwie Span z opennlp.tools.util pakiet służy do przechowywania początkowej i końcowej liczby całkowitej zestawów.

Możesz przechowywać rozpiętości zwrócone przez tokenizePos() w tablicy Span i wydrukuj je, jak pokazano w poniższym bloku kodu.

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

Wspólne drukowanie żetonów i ich pozycji

Plik substring() metoda klasy String akceptuje metodę begin i endprzesuwa i zwraca odpowiedni ciąg. Możemy użyć tej metody, aby wydrukować tokeny i ich rozpiętości (pozycje) razem, jak pokazano w poniższym bloku kodu.

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

Example(SimpleTokenizer)

Poniżej znajduje się program, który pobiera zakresy tokenów surowego tekstu przy użyciu rozszerzenia SimpleTokenizerklasa. Drukuje również żetony wraz z ich pozycjami. Zapisz ten program w pliku o nazwieSimpleTokenizerSpans.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()));          
   } 
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac SimpleTokenizerSpans.java 
java SimpleTokenizerSpans

Podczas wykonywania powyższy program odczytuje podany ciąg (nieprzetworzony tekst), tokenizuje go i wyświetla następujące dane wyjściowe -

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

Poniżej znajduje się program, który pobiera zakresy tokenów surowego tekstu przy użyciu rozszerzenia WhitespaceTokenizerklasa. Drukuje również żetony wraz z ich pozycjami. Zapisz ten program w pliku o nazwieWhitespaceTokenizerSpans.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()));        
   } 
}

Skompiluj i uruchom zapisany plik java z wiersza poleceń, używając następujących poleceń

javac WhitespaceTokenizerSpans.java 
java WhitespaceTokenizerSpans

Podczas wykonywania powyższy program odczytuje dany ciąg (nieprzetworzony tekst), tokenizuje go i wyświetla następujące dane wyjściowe.

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

Poniżej znajduje się program, który pobiera zakresy tokenów surowego tekstu przy użyciu rozszerzenia TokenizerMEklasa. Drukuje również żetony wraz z ich pozycjami. Zapisz ten program w pliku o nazwieTokenizerMESpans.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()));      
   } 
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac TokenizerMESpans.java 
java TokenizerMESpans

Podczas wykonywania powyższy program odczytuje podany ciąg (nieprzetworzony tekst), tokenizuje go i wyświetla następujące dane wyjściowe -

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

Prawdopodobieństwo tokenizera

Metoda getTokenProbabilities () klasy TokenizerME służy do uzyskiwania prawdopodobieństw związanych z ostatnimi wywołaniami metody tokenizePos ().

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

Poniżej znajduje się program wyświetlający prawdopodobieństwa związane z wywołaniami metody tokenizePos (). Zapisz ten program w pliku o nazwieTokenizerMEProbs.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]);          
   } 
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac TokenizerMEProbs.java 
java TokenizerMEProbs

Podczas wykonywania powyższy program odczytuje podany ciąg znaków, tokenizuje zdania i drukuje je. Ponadto zwraca również prawdopodobieństwa związane z ostatnimi wywołaniami metody 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

Proces znajdowania nazwisk, osób, miejsc i innych bytów z danego tekstu jest znany jako Named Entity Rpoznanie (NER). W tym rozdziale omówimy, jak przeprowadzić NER przez program Java z wykorzystaniem biblioteki OpenNLP.

Rozpoznawanie nazwanych jednostek przy użyciu otwartego NLP

Aby wykonać różne zadania NER, OpenNLP używa różnych predefiniowanych modeli, a mianowicie en-nerdate.bn, en-ner-location.bin, en-ner-organization.bin, en-ner-person.bin i en-ner-time. kosz. Wszystkie te pliki są predefiniowanymi modelami, które są uczone do wykrywania odpowiednich jednostek w danym surowym tekście.

Plik opennlp.tools.namefindpakiet zawiera klasy i interfejsy, które są używane do wykonywania zadania NER. Aby wykonać zadanie NER przy użyciu biblioteki OpenNLP, musisz -

  • Załaduj odpowiedni model za pomocą pliku TokenNameFinderModel klasa.

  • Utwórz wystąpienie NameFinder klasa.

  • Znajdź nazwiska i wydrukuj je.

Poniżej przedstawiono kroki, które należy wykonać, aby napisać program, który wykrywa encje nazwy z danego surowego tekstu.

Krok 1: Ładowanie modelu

Model wykrywania zdań jest reprezentowany przez nazwaną klasę TokenNameFinderModel, który należy do pakietu opennlp.tools.namefind.

Aby załadować model NER -

  • Stworzyć InputStream obiekt modelu (Utwórz wystąpienie FileInputStream i przekaż ścieżkę odpowiedniego modelu NER w formacie String do jego konstruktora).

  • Utwórz wystąpienie TokenNameFinderModel klasę i zdaj InputStream (obiekt) modelu jako parametr jego konstruktora, jak pokazano w poniższym bloku kodu.

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

Krok 2: Utworzenie wystąpienia klasy NameFinderME

Plik NameFinderME klasa pakietu opennlp.tools.namefindzawiera metody wykonywania zadań NER. Ta klasa używa modelu Maximum Entropy, aby znaleźć nazwane jednostki w danym surowym tekście.

Utwórz wystąpienie tej klasy i przekaż obiekt modelu utworzony w poprzednim kroku, jak pokazano poniżej -

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

Krok 3: Znalezienie nazwisk w zdaniu

Plik find() metoda NameFinderMEklasa służy do wykrywania nazw w przekazanym do niej nieprzetworzonym tekście. Ta metoda akceptuje zmienną typu String jako parametr.

Wywołaj tę metodę, przekazując format String zdania do tej metody.

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

Krok 4: Drukowanie rozpiętości nazw w zdaniu

Plik find() metoda NameFinderMEclass zwraca tablicę obiektów typu Span. Klasa o nazwie Span of theopennlp.tools.util pakiet służy do przechowywania pliku start i end liczba całkowita zbiorów.

Możesz przechowywać rozpiętości zwrócone przez find() w tablicy Span i wydrukuj je, jak pokazano w poniższym bloku kodu.

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

NER Example

Poniżej znajduje się program, który odczytuje podane zdanie i rozpoznaje rozpiętości nazwisk znajdujących się w nim osób. Zapisz ten program w pliku o nazwieNameFinderME_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());    
   }    
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac NameFinderME_Example.java 
java NameFinderME_Example

Podczas wykonywania powyższy program odczytuje podany String (nieprzetworzony tekst), wykrywa nazwiska osób w nim i wyświetla ich pozycje (przęsła), jak pokazano poniżej.

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

Nazwy wraz z ich pozycjami

Plik substring() metoda klasy String akceptuje metodę begin i end offsetsi zwraca odpowiedni ciąg. Możemy użyć tej metody do wydrukowania nazw i ich rozpiętości (pozycji) razem, jak pokazano w poniższym bloku kodu.

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

Poniżej znajduje się program do wykrywania nazw z podanego surowego tekstu i wyświetlania ich wraz z ich pozycjami. Zapisz ten program w pliku o nazwieNameFinderSentences.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()]);      
   }    
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac NameFinderSentences.java 
java NameFinderSentences

Podczas wykonywania powyższy program odczytuje podany String (nieprzetworzony tekst), wykrywa nazwiska osób w nim i wyświetla ich pozycje (rozpiętości), jak pokazano poniżej.

[0..1) person  Mike

Znajdowanie nazw lokalizacji

Ładując różne modele, możesz wykryć różne nazwane jednostki. Poniżej znajduje się program Java, który ładuje pliken-ner-location.binmodel i wykrywa nazwy lokalizacji w zadanym zdaniu. Zapisz ten program w pliku o nazwieLocationFinder.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()]); 
   }    
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac LocationFinder.java 
java LocationFinder

Podczas wykonywania powyższy program odczytuje podany String (nieprzetworzony tekst), wykrywa nazwiska osób w nim i wyświetla ich pozycje (przęsła), jak pokazano poniżej.

[4..5) location  Hyderabad

Prawdopodobieństwo narzędzia NameFinder

Plik probs()metoda NameFinderME klasa służy do uzyskania prawdopodobieństwa ostatniej zdekodowanej sekwencji.

double[] probs = nameFinder.probs();

Poniżej znajduje się program do drukowania prawdopodobieństw. Zapisz ten program w pliku o nazwieTokenizerMEProbs.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]);          
   } 
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac TokenizerMEProbs.java 
java TokenizerMEProbs

Podczas wykonywania powyższy program odczytuje podany String, tokenizuje zdania i drukuje je. Ponadto zwraca również prawdopodobieństwa ostatniej zdekodowanej sekwencji, jak pokazano poniżej.

[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

Korzystając z OpenNLP, możesz także wykryć części mowy danego zdania i je wydrukować. Zamiast pełnych nazw części mowy, OpenNLP używa krótkich form każdej części mowy. Poniższa tabela przedstawia różne części przemówień wykryte przez OpenNLP i ich znaczenie.

Części mowy Znaczenie części mowy
NN Rzeczownik, liczba pojedyncza lub masa
DT Determiner
VB Czasownik, forma podstawowa
VBD Czasownik, czas przeszły
VBZ Czasownik, trzecia osoba liczby pojedynczej obecny
W Przyimek lub koniunkcja podrzędna
NNP Rzeczownik w liczbie pojedynczej
DO do
JJ Przymiotnik

Oznaczanie części mowy

Aby oznaczyć części mowy w zdaniu, OpenNLP używa modelu, pliku o nazwie en-posmaxent.bin. Jest to predefiniowany model, który jest uczony do oznaczania części mowy danego surowego tekstu.

Plik POSTaggerME klasa opennlp.tools.postagpakiet służy do wczytywania tego modelu i oznaczania części mowy danego surowego tekstu za pomocą biblioteki OpenNLP. Aby to zrobić, musisz -

  • Załaduj en-pos-maxent.bin model przy użyciu POSModel klasa.

  • Utwórz wystąpienie POSTaggerME klasa.

  • Tokenizuj zdanie.

  • Wygeneruj tagi za pomocą tag() metoda.

  • Wydrukuj tokeny i tagi za pomocą POSSample klasa.

Poniżej przedstawiono kroki, które należy wykonać, aby napisać program, który oznacza części mowy w danym surowym tekście przy użyciu rozszerzenia POSTaggerME klasa.

Krok 1: Załaduj model

Model oznaczania punktów sprzedaży jest reprezentowany przez nazwaną klasę POSModel, który należy do pakietu opennlp.tools.postag.

Aby załadować model tokenizera -

  • Stworzyć InputStream obiekt modelu (Utwórz wystąpienie FileInputStream i przekaż ścieżkę modelu w formacie String do jego konstruktora).

  • Utwórz wystąpienie POSModel klasę i zdaj InputStream (obiekt) modelu jako parametr jego konstruktora, jak pokazano w poniższym bloku kodu -

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

Krok 2: Tworzenie wystąpienia klasy POSTaggerME

Plik POSTaggerME klasa pakietu opennlp.tools.postagsłuży do przewidywania części mowy danego surowego tekstu. Do podejmowania decyzji używa maksymalnej entropii.

Utwórz wystąpienie tej klasy i przekaż obiekt modelu utworzony w poprzednim kroku, jak pokazano poniżej -

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

Krok 3: Tokenizacja wyroku

Plik tokenize() metoda whitespaceTokenizerklasa jest używana do tokenizacji przekazanego do niej surowego tekstu. Ta metoda akceptuje zmienną String jako parametr i zwraca tablicę Strings (tokenów).

Utwórz wystąpienie whitespaceTokenizer class i wywołaj tę metodę, przekazując format String zdania do tej metody.

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

Krok 4: Generowanie tagów

Plik tag() metoda whitespaceTokenizerclass przypisuje tagi POS do zdania tokenów. Ta metoda przyjmuje tablicę tokenów (String) jako parametr i zwraca tag (tablicę).

Wywołaj tag() poprzez przekazanie do niej tokenów wygenerowanych w poprzednim kroku.

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

Krok 5: Drukowanie tokenów i tagów

Plik POSSampleklasa reprezentuje zdanie oznaczone tagiem POS. Aby utworzyć instancję tej klasy, wymagalibyśmy tablicy tokenów (tekstu) i tablicy tagów.

Plik toString()metoda tej klasy zwraca otagowane zdanie. Utwórz wystąpienie tej klasy, przekazując token i tablice tagów utworzone w poprzednich krokach i wywołaj jegotoString() metoda, jak pokazano w poniższym bloku kodu.

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

Example

Poniżej znajduje się program, który oznacza części mowy w danym surowym tekście. Zapisz ten program w pliku o nazwiePosTaggerExample.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()); 
   
   } 
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac PosTaggerExample.java 
java PosTaggerExample

Podczas wykonywania powyższy program czyta podany tekst i wykrywa części mowy tych zdań i wyświetla je, jak pokazano poniżej.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB

Wydajność POS Taggera

Poniżej znajduje się program, który oznacza fragmenty mowy danego surowego tekstu. Monitoruje również wydajność i wyświetla wydajność taggera. Zapisz ten program w pliku o nazwiePosTagger_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();      
   } 
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac PosTaggerExample.java 
java PosTaggerExample

Powyższy program podczas wykonywania odczytuje podany tekst i taguje części mowy tych zdań i wyświetla je. Ponadto monitoruje również wydajność taggera POS i wyświetla go.

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

Prawdopodobieństwo Taggera POS

Plik probs() metoda POSTaggerME class służy do znajdowania prawdopodobieństw dla każdego znacznika ostatnio oznaczonego zdania.

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

Poniżej znajduje się program, który wyświetla prawdopodobieństwa dla każdego znacznika ostatniego oznaczonego zdania. Zapisz ten program w pliku o nazwiePosTaggerProbs.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]); 
   } 
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac TokenizerMEProbs.java 
java TokenizerMEProbs

Podczas wykonywania powyższy program odczytuje podany surowy tekst, oznacza części mowy każdego tokena w nim i wyświetla je. Ponadto wyświetla również prawdopodobieństwa dla każdej części mowy w danym zdaniu, jak pokazano poniżej.

Hi_NNP welcome_JJ to_TO Tutorialspoint_VB    
0.6416834779738033 
0.42983612874819177 
0.8584513635863117 
0.4394784478206072

Korzystając z API OpenNLP, możesz przeanalizować podane zdania. W tym rozdziale omówimy, jak analizować surowy tekst przy użyciu interfejsu API OpenNLP.

Przetwarzanie surowego tekstu przy użyciu biblioteki OpenNLP

Aby wykryć zdania, OpenNLP używa predefiniowanego modelu, pliku o nazwie en-parserchunking.bin. Jest to wstępnie zdefiniowany model, który jest uczony do analizowania podanego surowego tekstu.

Plik Parser klasa opennlp.tools.Parser pakiet jest używany do przechowywania składników analizy i pliku ParserTool klasa opennlp.tools.cmdline.parser pakiet jest używany do analizowania zawartości.

Poniżej przedstawiono kroki, które należy wykonać, aby napisać program, który analizuje podany surowy tekst przy użyciu rozszerzenia ParserTool klasa.

Krok 1: Ładowanie modelu

Model analizy tekstu jest reprezentowany przez nazwaną klasę ParserModel, który należy do pakietu opennlp.tools.parser.

Aby załadować model tokenizera -

  • Stworzyć InputStream obiekt modelu (Utwórz wystąpienie FileInputStream i przekaż ścieżkę modelu w formacie String do jego konstruktora).

  • Utwórz wystąpienie ParserModel klasę i zdaj InputStream (obiekt) modelu jako parametr jego konstruktora, jak pokazano w poniższym bloku kodu.

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

Krok 2: Tworzenie obiektu klasy Parser

Plik Parser klasa pakietu opennlp.tools.parserreprezentuje strukturę danych do przechowywania składników analizy. Możesz utworzyć obiekt tej klasy za pomocą staticcreate() metoda ParserFactory klasa.

Wywołaj create() metoda ParserFactory przekazując obiekt modelu utworzony w poprzednim kroku, jak pokazano poniżej -

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

Krok 3: Analiza zdania

Plik parseLine() metoda ParserToolklasa jest używana do analizowania surowego tekstu w OpenNLP. Ta metoda akceptuje -

  • zmienna typu String reprezentująca tekst do przeanalizowania.

  • obiekt parsera.

  • liczba całkowita reprezentująca liczbę analiz do wykonania.

Wywołaj tę metodę, przekazując w zdaniu następujące parametry: obiekt analizy utworzony w poprzednich krokach oraz liczbę całkowitą reprezentującą wymaganą liczbę analiz do wykonania.

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

Example

Poniżej znajduje się program, który analizuje podany surowy tekst. Zapisz ten program w pliku o nazwieParserExample.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();          
   } 
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac ParserExample.java 
java ParserExample

Podczas wykonywania powyższy program odczytuje podany surowy tekst, analizuje go i wyświetla następujące dane wyjściowe -

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

Dzielenie zdań odnosi się do łamania / dzielenia zdania na części słów, takie jak grupy słów i grupy czasowników.

Dzielenie zdania za pomocą OpenNLP

Aby wykryć zdania, OpenNLP używa modelu, pliku o nazwie en-chunker.bin. Jest to predefiniowany model, który jest uczony do dzielenia zdań w podanym surowym tekście.

Plik opennlp.tools.chunker pakiet zawiera klasy i interfejsy używane do znajdowania nierekurencyjnych adnotacji składniowych, takich jak fragmenty fraz rzeczownikowych.

Możesz podzielić zdanie za pomocą metody chunk() z ChunkerMEklasa. Ta metoda przyjmuje tokeny zdania i tagi POS jako parametry. Dlatego przed rozpoczęciem procesu chunkingu należy przede wszystkim tokenizować zdanie i generować jego części tagi POS.

Aby podzielić zdanie za pomocą biblioteki OpenNLP, musisz -

  • Tokenizuj zdanie.

  • Wygeneruj dla niego tagi POS.

  • Załaduj en-chunker.bin model przy użyciu ChunkerModel klasa

  • Utwórz wystąpienie ChunkerME klasa.

  • Podziel zdania na kawałki, używając chunk() metoda tej klasy.

Poniżej przedstawiono kroki, które należy wykonać, aby napisać program dzielący zdania z podanego surowego tekstu.

Krok 1: Tokenizacja zdania

Tokenizuj zdania za pomocą tokenize() metoda whitespaceTokenizer class, jak pokazano w poniższym bloku kodu.

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

Krok 2: Generowanie tagów POS

Wygeneruj tagi POS zdania za pomocą tag() metoda POSTaggerME class, jak pokazano w poniższym bloku kodu.

//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);

Krok 3: Ładowanie modelu

Model fragmentacji zdania jest reprezentowany przez nazwaną klasę ChunkerModel, który należy do pakietu opennlp.tools.chunker.

Aby załadować model wykrywania zdań -

  • Stworzyć InputStream obiekt modelu (Utwórz wystąpienie FileInputStream i przekaż ścieżkę modelu w formacie String do jego konstruktora).

  • Utwórz wystąpienie ChunkerModel klasę i zdaj InputStream (obiekt) modelu jako parametr jego konstruktora, jak pokazano w poniższym bloku kodu -

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

Krok 4: Tworzenie wystąpienia klasy chunkerME

Plik chunkerME klasa pakietu opennlp.tools.chunkerzawiera metody do dzielenia zdań. Jest to fragment oparty na maksymalnej entropii.

Utwórz wystąpienie tej klasy i przekaż obiekt modelu utworzony w poprzednim kroku.

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

Krok 5: Dzielenie zdania

Plik chunk() metoda ChunkerMEclass służy do dzielenia zdań w przekazanym do niej surowym tekście. Ta metoda akceptuje jako parametry dwie tablice String reprezentujące tokeny i tagi.

Wywołaj tę metodę, przekazując jako parametry tablicę tokenów i tablicę tagów utworzoną w poprzednich krokach.

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

Example

Poniżej znajduje się program do dzielenia zdań w podanym surowym tekście. Zapisz ten program w pliku o nazwieChunkerExample.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);         
   }    
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następującego polecenia -

javac ChunkerExample.java 
java ChunkerExample

Podczas wykonywania powyższy program odczytuje podany ciąg i dzieli zdania w nim na kawałki, a następnie wyświetla je, jak pokazano poniżej.

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

Wykrywanie pozycji żetonów

Możemy również wykryć pozycje lub rozpiętości fragmentów za pomocą chunkAsSpans() metoda ChunkerMEklasa. Ta metoda zwraca tablicę obiektów typu Span. Klasa o nazwie Span of theopennlp.tools.util pakiet służy do przechowywania pliku start i end liczba całkowita zbiorów.

Możesz przechowywać rozpiętości zwrócone przez chunkAsSpans() w tablicy Span i wydrukuj je, jak pokazano w poniższym bloku kodu.

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

Example

Poniżej znajduje się program, który wykrywa zdania w podanym surowym tekście. Zapisz ten program w pliku o nazwieChunkerSpansEample.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());  
   }    
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac ChunkerSpansEample.java 
java ChunkerSpansEample

Podczas wykonywania powyższy program odczytuje podany ciąg i rozpiętość fragmentów w nim, a następnie wyświetla następujące dane wyjściowe -

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

Wykrywanie prawdopodobieństwa chunkera

Plik probs() metoda ChunkerME class zwraca prawdopodobieństwa ostatniej zdekodowanej sekwencji.

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

Poniżej znajduje się program do drukowania prawdopodobieństw ostatniej zdekodowanej sekwencji przez chunker. Zapisz ten program w pliku o nazwieChunkerProbsExample.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]);       
   }    
}

Skompiluj i uruchom zapisany plik Java z wiersza polecenia, używając następujących poleceń -

javac ChunkerProbsExample.java 
java ChunkerProbsExample

Podczas wykonywania powyższy program czyta podany łańcuch, dzieli go na kawałki i wypisuje prawdopodobieństwa ostatniej zdekodowanej sekwencji.

0.9592746040797778 
0.6883933131241501 
0.8830563473996004 
0.8951150529746051

OpenNLP zapewnia interfejs wiersza poleceń (CLI) do wykonywania różnych operacji za pośrednictwem wiersza poleceń. W tym rozdziale weźmiemy kilka przykładów, aby pokazać, jak możemy używać interfejsu wiersza poleceń OpenNLP.

Tokenizacja

input.txt

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

Składnia

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

Komenda

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

wynik

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

Wykrywanie zdań

input.txt

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

Składnia

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

Komenda

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

Wynik

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

Rozpoznawanie nazwanych jednostek

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

Składnia

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

Komenda

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

Wynik

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

Części znakowania mowy

Input.txt

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

Składnia

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

Komenda

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

Wynik

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