[NLP]OpenNLP块检测器(Chunker)的使用
Chunker
分块是将文章的内容分成句法相关的词组,如名词组、动词组,但不指定它们的内部结构,也不说明它们在主句中的作用。
训练数据的输入格式如下:
Rockwell NNP B-NP
International NNP I-NP
Corp. NNP I-NP
's POS B-NP
Tulsa NNP I-NP
unit NN I-NP
said VBD B-VP
it PRP B-NP
signed VBD B-VP
a DT B-NP
tentative JJ I-NP
agreement NN I-NP
extending VBG B-VP
its PRP$ B-NP
contract NN I-NP
with IN B-PP
Boeing NNP B-NP
Co. NNP I-NP
to TO B-VP
provide VB I-VP
structural JJ B-NP
parts NNS I-NP
for IN B-PP
Boeing NNP B-NP
's POS B-NP
747 CD I-NP
jetliners NNS I-NP
标注说明:
用chunker分块后的标志由两部分组成:块在原句中的位置-词性
如B-NP的B表示该词在句子开始的位置,NP表示名词;I-NP的I表示该词在句中中间的位置,NP表示名词。
- \B 标注开始
- \I 标注的中间
- \E 标注的结束
- NP 名词块
- VB 动词块
模型训练
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import opennlp.tools.chunker.ChunkSample;
import opennlp.tools.chunker.ChunkSampleStream;
import opennlp.tools.chunker.ChunkerEvaluator;
import opennlp.tools.chunker.ChunkerFactory;
import opennlp.tools.chunker.ChunkerME;
import opennlp.tools.chunker.ChunkerModel;
import opennlp.tools.util.InputStreamFactory;
import opennlp.tools.util.MarkableFileInputStreamFactory;
import opennlp.tools.util.ObjectStream;
import opennlp.tools.util.PlainTextByLineStream;
import opennlp.tools.util.TrainingParameters;
import opennlp.tools.util.eval.FMeasure;public class ChunkerTrain {public static void main(String[] args) throws IOException {// TODO Auto-generated method stubString rootDir = System.getProperty("user.dir") + File.separator;String fileResourcesDir = rootDir + "resources" + File.separator;String modelResourcesDir = rootDir + "opennlpmodel" + File.separator;//训练数据的路径String filePath = fileResourcesDir + "chunker.txt";//训练后模型的保存路径String modelPath = modelResourcesDir + "en-chunker-my.bin";//按行读取数据InputStreamFactory inputStreamFactory = new MarkableFileInputStreamFactory(new File(filePath));ObjectStream<String> lineStream = new PlainTextByLineStream(inputStreamFactory, StandardCharsets.UTF_8);//按行读取数据ObjectStream<ChunkSample> sampleStream = new ChunkSampleStream(lineStream);ChunkerFactory factory =new ChunkerFactory();//训练模型ChunkerModel model =ChunkerME.train("en",sampleStream, TrainingParameters.defaultParams(), factory);//保存模型FileOutputStream fos=new FileOutputStream(new File(modelPath));OutputStream modelOut = new BufferedOutputStream(fos);model.serialize(modelOut); //模型评估ChunkerEvaluator evaluator=new ChunkerEvaluator(new ChunkerME(model));FMeasure fm=evaluator.getFMeasure();System.out.println("FMeasure:"+fm.getFMeasure()+";precision="+fm.getPrecisionScore()+";recall"+fm.getRecallScore()); }
}
词句分块
```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.util.Sequence;public class ChunkerPredit {public static void main(String[] args) throws IOException {// TODO Auto-generated method stubString rootDir = System.getProperty("user.dir") + File.separator;String fileResourcesDir = rootDir + "resources" + File.separator;String modelResourcesDir = rootDir + "opennlpmodel" + File.separator;//String filePath = fileResourcesDir + "sentenceDetector.txt";String modelPath = modelResourcesDir + "en-chunker.bin";InputStream modelIn = new FileInputStream(modelPath) ;//加载模型ChunkerModel model = new ChunkerModel(modelIn);//实例化模型ChunkerME chunker = new ChunkerME(model);//分块检测String sent[] = new String[] { "Rockwell", "International", "Corp.", "'s","Tulsa", "unit", "said", "it", "signed", "a", "tentative", "agreement","extending", "its", "contract", "with", "Boeing", "Co.", "to","provide", "structural", "parts", "for", "Boeing", "'s", "747","jetliners", "." };String pos[] = new String[] { "NNP", "NNP", "NNP", "POS", "NNP", "NN","VBD", "PRP", "VBD", "DT", "JJ", "NN", "VBG", "PRP$", "NN", "IN","NNP", "NNP", "TO", "VB", "JJ", "NNS", "IN", "NNP", "POS", "CD", "NNS","." };String tag[] = chunker.chunk(sent, pos);//获取概率参数double chunkerProbs[] = chunker.probs();for(String str:tag){System.out.print(str+",");} System.out.println();for(double pro:chunkerProbs){System.out.print(pro+",");}Sequence[] sentens = chunker.topKSequences(sent, pos);System.out.println();for(Sequence se:sentens){System.out.print(se+",");}}
}
[NLP]OpenNLP块检测器(Chunker)的使用相关推荐
- [NLP]OpenNLP语句检测器的使用
目录 Sentence Detector 模型训练 语句检测 Sentence Detector 语句检测器,OpenNLP语句检测器可以检测标点字符是否标记了句子的结尾.在这个意义上,句子被定义为两 ...
- [NLP]OpenNLP语言检测器的使用
目录 Language Detector 模型训练 语言类型预测 Language Detector 语言检测器,属于分类范畴.即OpenNLP语言检测器根据模型的能力用ISO-639-3(国际语种代 ...
- [NLP]OpenNLP词形还原器(Lemmatizer)的使用
Lemmatizer 词形还原,把用POS tagger标注格式的词还原为标注前的格式.如 输入: Rockwell_NNP International_NNP Corp._NNP 's_POS Tu ...
- [NLP]OpenNLP命名实体识别(NameFinder)的使用
目录 Name Finder 模型训练 命名识别 Name Finder 命名查找器可以检测文本中的命名实体和数字.为了能够检测到实体,命名查找器需要一个模型.模型依赖于它被训练的语言和实体类型.Op ...
- [NLP]OpenNLP标记器的使用
目录 Tokenizer 模型训练 句子分词 Tokenizer OpenNLP标记器将输入字符序列分段为标记.标记通常是单词.标点符号.数字等.标记化是一个两阶段的过程:首先,确定句子边界,然后识别 ...
- [NLP]OpenNLP Maven工程的依赖
目录 OpenNLP Tools依赖 OpenNLP UIMA Annotators 依赖 OpenNLP Morfologik AddOn依赖 OpenNLP Brat Annotator依赖 Op ...
- Apache OpenNLP
Apache OpenNLP库是一种基于机器学习的工具包,用于处理自然语言文本. 它支持最常见的NLP任务,如标记化,句子分割,词性标记,命名实体提取,分块,解析和参考解析. 通常需要这些任务来构建更 ...
- 斯坦福全球AI报告:人才需求两年暴增35倍,中国机器人部署量涨500%
来源:量子位 作者:安妮 栗子 乾明 一璞 刚刚,斯坦福全球AI报告正式发布. 从去年开始,斯坦福大学主导.来自MIT.OpenAI.哈佛.麦肯锡等机构的多位专家教授,组建了一个小组,每年发布AI i ...
- 基于spaCy的领域命名实体识别
基于spaCy的命名实体识别 ----以"大屠杀"领域命名实体识别研究为例 作者: Dr. W.J.B. Mattingly Postdoctoral Fellow at the ...
最新文章
- 图像处理 100 问!!
- 自定义AlertView
- VS.Net 开发 MSN一样缓慢出来的提示信息的方法
- 《绅士》Typecho个人博客模板主题
- redis连接数据库进行操作
- python replace替换多个字符_「Python 秘籍」字符串忽略大小写的搜索替换
- inno setup 打包工具介绍
- Labwindows_cvi基于C语言程控矢量网络分析仪
- ps_裁剪出圆形区域并将多余透明去掉
- 敏捷史话(一):用一半的时间做两倍的事——Scrum之父Jeff Sutherland的传奇人生
- Python3.6-Flask:制作一个语音对话问答机器人系统(网页版)
- imperva 默认策略添加例外
- 单片机毕业设计 stm32智能路灯设计与实现
- Idea 打包JAVA项目
- 数据结构 期末复习主观题练习题(答案版)
- NGNIX在CENTEROS 下部署
- SAAS云平台搭建札记: (一) 浅论SAAS多租户自助云服务平台的产品、服务和订单
- 将idea设置为中文
- 2021年福建省安全员B证(项目负责人)考试试题及福建省安全员B证(项目负责人)作业模拟考试
- Linux下c语言文本方式文件读取