当前位置: 首页 > 知识库问答 >
问题:

如何在node.js应用程序中使用Apache OpenNLP

马弘和
2023-03-14

使用Apache Open NLP和node的最佳方式是什么。js?

具体来说,我想使用名称实体提取应用编程接口。下面是关于它的说明——留档很糟糕(我认为是新项目):

http://opennlp.apache.org/documentation/manual/opennlp.html#tools.namefind

来自文档:

要在生产系统中使用名称查找器,强烈建议将其直接嵌入到应用程序中,而不是使用命令行界面。首先,名称查找器模型必须从磁盘或其他源加载到内存中。在下面的示例中,它是从磁盘加载的。

InputStream modelIn = new FileInputStream("en-ner-person.bin");

try {
  TokenNameFinderModel model = new TokenNameFinderModel(modelIn);
}
catch (IOException e) {
  e.printStackTrace();
}
finally {
  if (modelIn != null) {
    try {
      modelIn.close();
    }
    catch (IOException e) {
    }
  }
}

模型加载失败的原因有很多:

底层I/O的问题

该模型的版本与OpenNLP版本不兼容

该模型加载到了错误的组件中,例如,标记器模型加载了TokenNameFindModel类。

由于其他原因,模型内容无效

加载模型后,可以实例化NameFinderME。

NameFinderME nameFinder = new NameFinderME(model);

初始化现已完成,可以使用Name Finder。NameFinderME类不是线程安全的,它必须只能从一个线程调用。要使用多个线程,可以创建多个共享相同模型实例的NameFinderME实例。输入文本应分段为文档、句子和标记。要执行实体检测,应用程序为文档中的每个句子调用查找方法。在每个文档清除后,必须调用AdaptiveData以清除特征生成器中的自适应数据。不调用clearAdaptiveData会导致几个文档后检测率急剧下降。以下代码说明:

for (String document[][] : documents) {

  for (String[] sentence : document) {
    Span nameSpans[] = find(sentence);
    // do something with the names
  }

  nameFinder.clearAdaptiveData()
}

the following snippet shows a call to find


String sentence = new String[]{
    "Pierre",
    "Vinken",
    "is",
    "61",
    "years"
    "old",
    "."
    };

Span nameSpans[] = nameFinder.find(sentence);

nameSpans数组现在只包含一个跨度,它标记了Pierre Vinken的名字。开始偏移和结束偏移之间的元素是名称标记。在这种情况下,开始偏移为0,结束偏移为2。Span对象还知道实体的类型。在这种情况下,它的人(由模型定义)。可以通过调用Span来检索它。getType()。除了统计名称查找器,OpenNLP还提供了字典和正则表达式名称查找器实现。

共有1个答案

漆雕育
2023-03-14

检查这个NodeJS库。
https://github.com/mbejda/Node-OpenNLP
https://www.npmjs.com/package/opennlp

只是做NPM安装opennlp

看看Github上的例子。

var nameFinder = new openNLP().nameFinder;
nameFinder.find(sentence, function(err, results) {
    console.log(results)
});
 类似资料:
  • 如何使用node.js(后端)禁用Azure应用程序Insights中的采样

  • 问题内容: —我构建了一个简单的应用程序,该应用程序从Redis数据库中提取数据(50个项目)并将其扔到localhost。我做了一个ApacheBench(c = 100,n = 50000),并且在1.73GHz(我的6岁笔记本电脑)的双核T2080上获得了半不错的150个请求/秒,但是proc的使用非常令人失望显示: 仅使用了一个内核,这是按照Node中的设计进行的,但是我认为,如果我可以使

  • 问题内容: 如何调试Node.js服务器应用程序? 现在,我主要使用带有以下打印语句的 警报调试 : 必须有更好的调试方法。我知道GoogleChrome浏览器有一个命令行调试器。该调试器也可用于Node.js吗? 问题答案: 节点检查器可以节省一天!从支持WebSocket的任何浏览器中使用它。断点,事件探查器,实时编码等,这真的很棒。 通过以下方式安装: 然后运行:

  • 问题内容: 我想从我的node.js应用程序ping服务器。 那可行吗? 谢谢 问题答案: 您可以用来调用系统ping命令

  • 问题内容: 在Debian服务器上,我安装了Node.js。我了解如何使用以下命令行从腻子启动应用程序: 并通过地址(IP和端口)访问它。 但是,一旦我关闭腻子,那我就无法到达地址了。 如何使Node.js应用程序永久运行? 如您所料,我是Linux和Node.js的初学者。 问题答案: 尽管其他答案解决了OP的问题,但它们都是过大的,不能解释为什么他或她遇到此问题。 关键是这一行,“我关闭油灰,

  • 问题内容: 我有一个Swing应用程序,我希望将其从意大利面条转换为对Guice使用依赖项注入。使用Guice提供诸如配置和任务队列之类的服务的过程非常好,但是我现在是从应用程序的GUI开始的,不确定如何进行。 该应用程序基本上是,在中带有一堆标签。每个选项卡都是一个单独的子类,该子类列出了各种组件,并且需要服务才能在按下某些按钮时执行操作。 在当前应用程序中,这看起来像这样: 显然,这并不完全遵