OpenNLP是Apache基金会下面的一个机器学习工具包,用于处理自然语言文本。支持大多数常用的NLP任务,例如:分词、分句、词性标注、命名实体识别、主块分析、语法解析等。其中几个主要的学习网址;
官网:http://opennlp.apache.org/
用户手册:http://opennlp.apache.org/documentation/1.7.2/manual/opennlp.html
模型下载:http://opennlp.sourceforge.net/models-1.5/
OpenNLP不仅提供了训练好的各种模型,最终要的是,它还允许自己训练模型。
1、OpenNLP的使用
1.1 使用说明
OpenNLP的使用十分简单,归纳起来一般都是遵循以下几个步骤:
a、训练模型,当然也可以跳过该步骤,而直接使用官网提供的一些已经训练好的模型;
b、加载模型,不同任务需要加载不同的模型,通常都是通过构造一个InputStream来加载训练好的模型;
c、构造预测器,通过加载进来的训练好的模型构造预测器;
d、利用预测器进行NLP相关任务
1.2 下载及使用环境配置
a、下载jar包
b、在eclipse下创建项目
解压下载的apache-opennlp-1.7.2-bin.zip,将apache-opennlp-1.7.2-bin文件中lib文件下的jar包添加到新建的项目中
(1.5.3的版本中是4个jar包,1.7.2的版本jar包很多,可以只放用到的)
c、下载需要的模型文件,下载地址 http://opennlp.sourceforge.net/models-1.5/
1.2、主要的功能
a、Sentence Detector
1、下载en-sent.bin ,并复制到project中。或者单独建立文件夹,放到一个文件中
InputStream is =new FileInputStream("en-sent.bin")
InputStream is =new FileInputStream("./nlpbin/en-sent.bin")
2、代码
package TestOpenNLP;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
import opennlp.tools.util.InvalidFormatException;
public class test {
public static void main(String[] args)throws InvalidFormatException, IOException {
// 句子探测器 //Sentence Detector
SentenceDetect();
}
public static void SentenceDetect()throws InvalidFormatException,IOException {
String paragraph ="Hi. How are you? This is Mike.";
//加载模型,通常为一个模型类的构造函数提供一个具有模型的FileInputStream
//来加载一个模型
InputStream is =new FileInputStream("./nlpbin/en-sent.bin");
//在模型被加载之后,这个组件工具自身可以被实例化
SentenceModel model =new SentenceModel(is);
SentenceDetectorME sdetector =new SentenceDetectorME(model);
String sentences[] =sdetector.sentDetect(paragraph);
for(int i=0;i
System.out.println(sentences[i]);
}
}
}
b、句子切分成token(Tokenizer)
package TestOpenNLP;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import opennlp.tools.sentdetect.SentenceDetectorME;
import opennlp.tools.sentdetect.SentenceModel;
import opennlp.tools.tokenize.Tokenizer;
import opennlp.tools.tokenize.TokenizerME;
import opennlp.tools.tokenize.TokenizerModel;
import opennlp.tools.util.InvalidFormatException;
public class test {
public static void main(String[] args)throws InvalidFormatException, IOException {
Tokenize();
}
public static void Tokenize()throws InvalidFormatException, IOException {
InputStream is =new FileInputStream("./nlpbin/en-token.bin");
TokenizerModel model =new TokenizerModel(is);
Tokenizer tokenizer =new TokenizerME(model);
String tokens[] = tokenizer.tokenize("Hi. How are you? This is Mike.");
for (String a : tokens)
System.out.println(a);
is.close();
}
}