java - 在 openNLP 中编写我们自己的模型

标签 java nlp opennlp named-entity-recognition

如果我在命令行中使用这样的查询

./opennlp TokenNameFinder en-ner-person.bin "input.txt" "output.txt"

我将在output.txt中打印人名,但我想编写自己的模型,以便打印我自己的实体。

例如

  1. icm2500 的风险值是多少。
  2. prd_234 的交付将延迟到达。
  3. Watson 正在处理 router_34。

如果我通过这些行,它应该解析并提取product_entities。 icm2500、prd_234、router_34...等这些都是产品(我们可以将此信息保存在文件中,我们可以将其用作模型或 openNLP 的查找类型)。

有人可以告诉我该怎么做吗?

最佳答案

您需要通过以 opennlp 格式注释一些句子来训练您自己的模型。对于您发布的例句,格式如下:

what is the risk value on <START:product> icm2500 <END>.
Delivery of <START:product> prd_234 <END> will be arrived late.
Watson is handling <START:product> router_34 <END>.

确保每个句子都以换行符结尾,并且句子中是否有换行符以某种方式转义它们。 一旦您从数据中创建了这样的文件,那么您就可以使用 Java API 来训练这样的模型

public static void main(String[] args){

Charset charset = Charset.forName("UTF-8");
ObjectStream<String> lineStream =
        new PlainTextByLineStream(new FileInputStream("your file in the above format"), charset);
ObjectStream<NameSample> sampleStream = new NameSampleDataStream(lineStream);

TokenNameFinderModel model;

try {
  model = NameFinderME.train("en", "person", sampleStream, TrainingParameters.defaultParams(),
            null, Collections.<String, Object>emptyMap());
}
finally {
  sampleStream.close();
}

try {
  modelOut = new BufferedOutputStream(new FileOutputStream(modelFile));
  model.serialize(modelOut);
} finally {
  if (modelOut != null) 
     modelOut.close();      
}

}

现在您可以通过名称查找器使用该模型。

由于您可能有一个明确且可能简短的产品名称列表,因此您可能会考虑使用简单的正则表达式方法。

这里是 opennlp 文档,其中稍微介绍了 NameFinder:

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

关于java - 在 openNLP 中编写我们自己的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24381095/

相关文章:

java - 英特尔 MPI mpirun 不会使用 java Process.destroy() 终止

java - 奇怪的 Tomcat 和 Axis Webservice 行为

java - 如何在eclipse上使用opennlp

parsing - opennlp 与 corenlp : Market reach - popularity

java - 在 R 中安装 R 包 openNLP

java - 如何在 Android 中将 TableRow 宽度设置为最大?

java - 根据上次执行的操作,从自定义代码更新进度条消息

java - 如何在 Hadoop 上的 OpenNLP 中训练意大利语模型?

r - 从文本中提取名词+名词或(形容词|名词)+名词

python - 有人有办法标记一个段落,将每个句子放入 pandas 数据框架中,并对每个句子进行情感分析吗?