📅  最后修改于: 2020-11-23 03:57:03             🧑  作者: Mango
使用OpenNLP,您还可以检测给定句子的词性并将其打印出来。 OpenNLP而不是词性的全称,而是使用词性的简短形式。下表列出了OpenNLP检测到的语音的各个部分及其含义。
Parts of Speech | Meaning of parts of speech |
---|---|
NN | Noun, singular or mass |
DT | Determiner |
VB | Verb, base form |
VBD | Verb, past tense |
VBZ | Verb, third person singular present |
IN | Preposition or subordinating conjunction |
NNP | Proper noun, singular |
TO | to |
JJ | Adjective |
为了标记句子的词性,OpenNLP使用一个名为en-posmaxent.bin的模型。这是一个预定义的模型,经过训练可以标记给定原始文本的语音部分。
opennlp.tools.postag包的POSTaggerME类用于加载此模型,并使用OpenNLP库标记给定原始文本的词性。为此,您需要-
使用POSModel类加载en-pos-maxent.bin模型。
实例化POSTaggerME类。
标记句子。
使用tag()方法生成标签。
使用POSSample类打印标记和标签。
以下是编写程序的步骤,该程序使用POSTaggerME类在给定的原始文本中标记语音的各个部分。
POS标记模型由名为POSModel的类表示,该类属于包opennlp.tools.postag 。
加载令牌化器模型-
创建模型的InputStream对象(实例化FileInputStream并将String格式的模型路径传递给其构造函数)。
实例化POSModel类,并将模型的InputStream (对象)作为参数传递给其构造函数,如以下代码块所示-
//Loading Parts of speech-maxent model
InputStream inputStream = new FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModel(inputStream);
软件包opennlp.tools.postag的POSTaggerME类用于预测给定原始文本的词性。它使用最大熵来做出决策。
实例化该类并传递在上一步中创建的模型对象,如下所示-
//Instantiating POSTaggerME class
POSTaggerME tagger = new POSTaggerME(model);
whitespaceTokenizer类的tokenize()方法用于标记传递给它的原始文本。此方法接受String变量作为参数,并返回String(令牌)数组。
实例化whitespaceTokenizer类,并通过将句子的String格式传递给此方法来调用此方法。
//Tokenizing the sentence using WhitespaceTokenizer class
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
whitespaceTokenizer类的tag()方法将POS标签分配给标记语句。此方法接受标记数组(字符串)作为参数,并返回标记(数组)。
通过将上一步中生成的令牌传递给它来调用tag()方法。
//Generating tags
String[] tags = tagger.tag(tokens);
POSSample类表示带有POS标签的句子。要实例化此类,我们将需要一个令牌(文本)数组和一个标签数组。
此类的toString()方法返回带标记的句子。通过传递在先前步骤中创建的标记和标记数组来实例化此类,并调用其toString()方法,如以下代码块所示。
//Instantiating the POSSample class
POSSample sample = new POSSample(tokens, tags);
System.out.println(sample.toString());
例
以下是在给定的原始文本中标记语音部分的程序。将该程序保存在名为PosTaggerExample.java的文件中。
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSSample;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class PosTaggerExample {
public static void main(String args[]) throws Exception{
//Loading Parts of speech-maxent model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModel(inputStream);
//Instantiating POSTaggerME class
POSTaggerME tagger = new POSTaggerME(model);
String sentence = "Hi welcome to Tutorialspoint";
//Tokenizing the sentence using WhitespaceTokenizer class
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Generating tags
String[] tags = tagger.tag(tokens);
//Instantiating the POSSample class
POSSample sample = new POSSample(tokens, tags);
System.out.println(sample.toString());
}
}
使用以下命令从命令提示符处编译并执行保存的Java文件-
javac PosTaggerExample.java
java PosTaggerExample
在执行时,上述程序将读取给定的文本并检测这些句子的词性并将其显示出来,如下所示。
Hi_NNP welcome_JJ to_TO Tutorialspoint_VB
以下是标记给定原始文本的语音部分的程序。它还监视性能并显示标记器的性能。将该程序保存在名为PosTagger_Performance.java的文件中。
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.cmdline.PerformanceMonitor;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSSample;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class PosTagger_Performance {
public static void main(String args[]) throws Exception{
//Loading Parts of speech-maxent model
InputStream inputStream = new
FileInputStream("C:/OpenNLP_models/en-pos-maxent.bin");
POSModel model = new POSModel(inputStream);
//Creating an object of WhitespaceTokenizer class
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Instantiating POSTaggerME class
POSTaggerME tagger = new POSTaggerME(model);
//Generating tags
String[] tags = tagger.tag(tokens);
//Instantiating POSSample class
POSSample sample = new POSSample(tokens, tags);
System.out.println(sample.toString());
//Monitoring the performance of POS tagger
PerformanceMonitor perfMon = new PerformanceMonitor(System.err, "sent");
perfMon.start();
perfMon.incrementCounter();
perfMon.stopAndPrintFinalResult();
}
}
使用以下命令从命令提示符处编译并执行保存的Java文件-
javac PosTaggerExample.java
java PosTaggerExample
在执行时,以上程序读取给定的文本并标记这些句子的词性并显示它们。此外,它还监视POS标记器的性能并显示它。
Hi_NNP welcome_JJ to_TO Tutorialspoint_VB
Average: 0.0 sent/s
Total: 1 sent
Runtime: 0.0s
POSTaggerME类的probs()方法用于查找最近标记的句子的每个标记的概率。
//Getting the probabilities of the recent calls to tokenizePos() method
double[] probs = detector.getSentenceProbabilities();
以下是显示最后标记的句子的每个标记的概率的程序。将该程序保存在名为PosTaggerProbs.java的文件中。
import java.io.FileInputStream;
import java.io.InputStream;
import opennlp.tools.postag.POSModel;
import opennlp.tools.postag.POSSample;
import opennlp.tools.postag.POSTaggerME;
import opennlp.tools.tokenize.WhitespaceTokenizer;
public class PosTaggerProbs {
public static void main(String args[]) throws Exception{
//Loading Parts of speech-maxent model
InputStream inputStream = new FileInputStream("C:/OpenNLP_mdl/en-pos-maxent.bin");
POSModel model = new POSModel(inputStream);
//Creating an object of WhitespaceTokenizer class
WhitespaceTokenizer whitespaceTokenizer= WhitespaceTokenizer.INSTANCE;
//Tokenizing the sentence
String sentence = "Hi welcome to Tutorialspoint";
String[] tokens = whitespaceTokenizer.tokenize(sentence);
//Instantiating POSTaggerME class
POSTaggerME tagger = new POSTaggerME(model);
//Generating tags
String[] tags = tagger.tag(tokens);
//Instantiating the POSSample class
POSSample sample = new POSSample(tokens, tags);
System.out.println(sample.toString());
//Probabilities for each tag of the last tagged sentence.
double [] probs = tagger.probs();
System.out.println(" ");
//Printing the probabilities
for(int i = 0; i
使用以下命令从命令提示符处编译并执行保存的Java文件-
javac TokenizerMEProbs.java
java TokenizerMEProbs
在执行时,上面的程序读取给定的原始文本,在其中标记每个令牌的语音部分,并显示它们。此外,它还会显示给定句子中每个语音部分的概率,如下所示。
Hi_NNP welcome_JJ to_TO Tutorialspoint_VB
0.6416834779738033
0.42983612874819177
0.8584513635863117
0.4394784478206072