OpenNLP - znajdowanie części mowy
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 przyjmuje 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