使用opennlp自定义命名实体
2018-03-30 00:00
441 查看
序
本文主要研究一下如何使用opennlp自定义命名实体,标注训练及模型运用。maven
<dependency> <groupId>org.apache.opennlp</groupId> <artifactId>opennlp-tools</artifactId> <version>1.8.4</version> </dependency>
实践
训练模型
// train the name finder String typedEntities = "<START:organization> NATO <END>\n" + "<START:location> United States <END>\n" + "<START:organization> NATO Parliamentary Assembly <END>\n" + "<START:location> Edinburgh <END>\n" + "<START:location> Britain <END>\n" + "<START:person> Anders Fogh Rasmussen <END>\n" + "<START:location> U . S . <END>\n" + "<START:person> Barack Obama <END>\n" + "<START:location> Afghanistan <END>\n" + "<START:person> Rasmussen <END>\n" + "<START:location> Afghanistan <END>\n" + "<START:date> 2010 <END>"; ObjectStream<NameSample> sampleStream = new NameSampleDataStream( new PlainTextByLineStream(new MockInputStreamFactory(typedEntities), "UTF-8")); TrainingParameters params = new TrainingParameters(); params.put(TrainingParameters.ALGORITHM_PARAM, "MAXENT"); params.put(TrainingParameters.ITERATIONS_PARAM, 70); params.put(TrainingParameters.CUTOFF_PARAM, 1); TokenNameFinderModel nameFinderModel = NameFinderME.train("eng", null, sampleStream, params, TokenNameFinderFactory.create(null, null, Collections.emptyMap(), new BioCodec()));
opennlp使用<START> 及 <END>来进行自定义标注实体,命名实体的话则在START之后用冒号标明,比如START:person
参数说明
ALGORITHM_PARAM
On the engineering level, using maxent is an excellent way of creating programs which perform very difficult classification tasks very well.
ITERATIONS_PARAM
number of training iterations, ignored if -params is used.
CUTOFF_PARAM
minimal number of times a feature must be seen
使用模型
上面训练完模型之后,就可以使用该模型进行解析NameFinderME nameFinder = new NameFinderME(nameFinderModel); // now test if it can detect the sample sentences String[] sentence = "NATO United States Barack Obama".split("\\s+"); Span[] names = nameFinder.find(sentence); Stream.of(names) .forEach(span -> { String named = IntStream.range(span.getStart(),span.getEnd()) .mapToObj(i -> sentence[i]) .collect(Collectors.joining(" ")); System.out.println("find type: "+ span.getType()+",name: " + named); });
输出如下:
find type: organization,name: NATO find type: location,name: United States find type: person,name: Barack Obama
小结
opennlp的自定义命名实体的标注,给以了一定定制空间,方便开发者定制各自领域特4000
殊的命名实体,以提高特定命名实体分词的准确性。
doc
opennlp-1.8.4-docsOpenNLP进行中文命名实体识别(上:预处理及训练模型)
OpenNLP进行中文命名实体识别(下:载入模型识别实体)
相关文章推荐
- 怎样用OpenNLP来实现命名实体识别
- 自定义实体集合的使用
- C#自定义命名空间与使用自定义的命名空间方法
- C#自定义命名空间与使用自定义的命名空间方法 转载 百度空间
- [NLP] 命名实体识别简要知识点
- 使用Stanford CoreNLP的Python封装包处理中文(分词、词性标注、命名实体识别、句法树、依存句法分析)
- C#自定义命名空间与使用自定义的命名空间方法
- openNLP的POSTagger使用(一)训练模型
- 使用Stanford Word Segmenter and Stanford Named Entity Recognizer (NER)实现中文命名实体识
- 命名实体识别,使用pyltp提取文本中的地址
- 使用ibatis作为orm框架时, 如果实体/DO/POJO类中有自定义的构造函数, 会抛出could not instantiate result class
- 使用opennlp进行文档分类
- 在快速自定义的NopCommerce中使用实体框架(EF)代码优先迁移
- Day14:使用斯坦福 NER 软件包实现你自己的命名实体识别器
- OpenNLP进行中文命名实体识别(下:载入模型识别实体)
- Jquery 自定义命名空间的使用
- Android使用Dom4j解析xml,并存入自定义实体
- C#自定义命名空间与使用自定义的命名空间方法
- 创建并使用DTD--自定义实体
- ant 使用命名空间自定义task