目录

Name Finder

模型训练

命名识别


Name Finder

命名查找器可以检测文本中的命名实体和数字。为了能够检测到实体,命名查找器需要一个模型。模型依赖于它被训练的语言和实体类型。OpenNLP项目提供了许多预先培训过的名字查找模型,这些模型在各种免费的语料库上进行了培训。它们可以在我们的模型下载页面下载。要在原始文本中查找名称,必须将文本分成标记和句子。

默认情况下,输入的训练数据中每行一个句子,句子内是经过tokenizer分词的词语。名称实体使用Span进行标记;输入中遇到一个空行表示文档结束。官方建议训练一个模型至少需要15000个句子。如:

<START:person> Pierre Vinken <END> , 61 years old , will join the board as a nonexecutive director Nov. 29 .

Mr . <START:person> Vinken <END> is chairman of Elsevier N.V. , the Dutch publishing group .

OpenNLP定义了一个默认的特性生成,在没有指定自定义特性生成时使用,用户可以通过API自定义特征生成器。

模型训练

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.namefind.NameFinderME;import opennlp.tools.namefind.NameSample;import opennlp.tools.namefind.NameSampleDataStream;import opennlp.tools.namefind.TokenNameFinderFactory;import opennlp.tools.namefind.TokenNameFinderModel;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;public class NameFinderTrain {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 + "naneFinder.txt";//训练后模型的保存路径String modelPath = modelResourcesDir + "en-ner-person-my.bin";//按行读取数据InputStreamFactory inputStreamFactory = new MarkableFileInputStreamFactory(new File(filePath));ObjectStream<String> lineStream = new PlainTextByLineStream(inputStreamFactory, StandardCharsets.UTF_8);      //按行读取数据ObjectStream<NameSample> sampleStream = new NameSampleDataStream(lineStream);TokenNameFinderFactory factory =new TokenNameFinderFactory();//训练模型TokenNameFinderModel model =NameFinderME.train("en","person", sampleStream,  TrainingParameters.defaultParams(),  factory);        //保存模型FileOutputStream fos=new FileOutputStream(new File(modelPath));OutputStream modelOut = new BufferedOutputStream(fos);model.serialize(modelOut);//评估模型TokenNameFinderEvaluator evaluator = new TokenNameFinderEvaluator(new NameFinderME(model));evaluator.evaluate(sampleStream);FMeasure result = evaluator.getFMeasure();System.out.println(result.toString());}}

命名识别

import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import opennlp.tools.namefind.NameFinderME;import opennlp.tools.namefind.TokenNameFinderModel;import opennlp.tools.util.Span;public class NameFinderPredit {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-ner-person.bin";InputStream modelIn = new FileInputStream(modelPath) ;//加载模型TokenNameFinderModel model = new TokenNameFinderModel(modelIn);//实例化模型NameFinderME nameFinder  = new NameFinderME(model);String tokens[] = new String[]{"Vinken","is","61","years","old","Pierre",".","Pierre",};//命名检测//Span 保存表示命名实体在tokens中的位置Span[] nameFinds= nameFinder.find(tokens);for(Span str:nameFinds){System.out.println("type:"+str.getType()+";Tostring:"+str.toString()+";length:"+nameFinds.length+"start:"+str.getStart()+";end:"+str.getEnd()+";name:"+tokens[str.getStart()]);}}}

输出:

type:person;Tostring:[5..6) person;length:2start:5;end:6;name:Pierre

type:person;Tostring:[7..8) person;length:2start:7;end:8;name:Pierre

[NLP]OpenNLP命名实体识别(NameFinder)的使用相关推荐

  1. NLP的命名实体识别 -- 嵌套实体问题

    NLP的命名实体识别 – 嵌套实体问题 NER是一个比较常见的NLP任务,通常采用LSTM+CRF处理一些简单NER任务.NER还存在嵌套实体问题(实体重叠问题),实体嵌套是指在一句文本中出现的实体, ...

  2. NLP(5) | 命名实体识别

    NLP(1) | 词向量one hot编码词向量编码思想 NLP(2) | 中文分词分词的概念分词方法分类CRFHMM分词 NLP(3)| seq to seq 模型 NLP(4) | 用词向量技术简 ...

  3. 【每周NLP论文推荐】 NLP中命名实体识别从机器学习到深度学习的代表性研究

    NER是自然语言处理中相对比较基础的任务,但却是非常重要的任务.在NLP中,大部分的任务都需要NER的能力,例如,聊天机器人中,需要NER来提取实体完成对用户输入的理解:在信息提取任务中,需要提取相应 ...

  4. 自然语言处理(NLP)之命名实体识别

    本文将会简单介绍自然语言处理(NLP)中的命名实体识别(NER). 命名实体识别(Named Entity Recognition,简称NER)是信息提取.问答系统.句法分析.机器翻译等应用领域的重要 ...

  5. NLP算法-命名实体识别

    命名实体识别 什么是命名实体识别? NER 研究的命名实体 NER研究目前所遇到的问题 命名实体识别的主要方法: 基于条件随机场的命名实体识别 常用的NER模型 1.Spacy NER 模型 2.斯坦 ...

  6. 自然语言处理之——词性标注和命名实体识别

    1. 摘要 基于上次分享的分词技术介绍,本次继续分享在分词后与词相关联的两个技术:词性标注和命名实体识别.词性是词汇基本的语法属性,也可以称为词类.词性标注的行为就是在给定的中文句子中判定每个词的语法 ...

  7. (转)OpenNLP进行中文命名实体识别(下:载入模型识别实体)

    上一节介绍了使用OpenNLP训练命名实体识别模型的方法,并将模型写到磁盘上形成二进制bin文件,这一节就是将模型从磁盘上载入,然后进行命名实体识别.依然是先上代码: [java] view plai ...

  8. NLP命名实体识别开源实战教程 | 深度应用

    作者 | 小宋是呢 来源 | CSDN博客 近几年来,基于神经网络的深度学习方法在计算机视觉.语音识别等领域取得了巨大成功,另外在自然语言处理领域也取得了不少进展.在NLP的关键性基础任务-命名实体识 ...

  9. NLP命名实体识别NER数据准备及模型训练实例

    NLP命名实体识别NER数据准备及模型训练实例 目录 NLP命名实体识别NER数据准备及模型训练实例 ​ 方案一

最新文章

  1. isdigit函数在C语言什么意思,C 库函数 isdigit() 使用方法及示例
  2. UI分层中使用PageFactory
  3. java实现选择排序
  4. oracle安装实训心得,oracle数据库实训心得.docx
  5. 【转】c#中类的默认访问修饰符
  6. 第一章 统计学概论
  7. 从java中安装webolgc_Javaweb| 文件下载
  8. csdn 不登录浏览全文 chrome 浏览器
  9. 素数的判断(c语言)
  10. html网页制作把文字放在右边,网页滚动文字的制作HTML代码
  11. 加州大学洛杉矶分校计算机硕士学费,加州大学洛杉矶分校学费
  12. css ms是什么意思,CSS 3中-webkit-, -moz-, -o-, -ms-这些私有前缀的含义和兼容
  13. 《写给大家看的设计书》
  14. PDJCAD皮带机设计软件
  15. HDU 6441(费马大定理+奇偶数列法)
  16. 冯·诺依曼体系结构总结
  17. 黑客水平测试 大家可以自测一下
  18. 鸟哥Linux私房菜:第七章笔记
  19. JAVA基础(七)JAVA面向对象
  20. [OpenGL] 屏幕后处理:景深效果

热门文章

  1. apply和call的区别
  2. java 符号引用与直接引用
  3. WPF DataGrid 获取选中的当前行某列值
  4. 【九】注入框架RoboGuice使用:(Your First Injected Service and BroadcastReceiver)
  5. MongoDB运行状态、性能监控,分析
  6. 查看windows系统信息
  7. Linux第十一周微职位
  8. Codeforces Round #168 (Div. 2)
  9. ADO.NET 之 一
  10. php 操作xls,php中使用PHPExcel操作excel(xls)文件