opennlp TokenNameFinder用于与名称不同的实体

时间:2014-02-10 19:49:09

标签: opennlp

我是openNlp的新手。我开始训练模型(TokenNameFinderTrainer),以识别名称。到目前为止一切顺利,但现在我想识别组织(例如“微软”)。

我的问题是:默认情况下opennlp会识别哪些类型的实体? (如果有的话 ...)

我看到它可以处理<START:person> Daryl Williams <END>

但可以创建类似:<START:organization> Metro-Goldwyn-Mayer Studios Inc. <END>的内容吗?或<START:company> Metro-Goldwyn-Mayer Studios Inc. <END>

含义:我可以随意标记类别吗?或

我必须使用默认类别吗?既然如此,这是默认的?

修改

我通过进一步阅读找到了答案。我现在要求确认......

我可以随意标记实体,并且每个实体制作1个模型更明智,我就在那里吗?

例如:1表示位置,1表示名称,1表示公司?

任何想法必须在同一个(例如)公司写的地方进行: 微软,还有微软?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

你可以为你想要的任何NER模型制作模型,我推荐每种类型一个模型。 OpenNLP使用机器学习来查找实体,因此它会找到模型告诉它的内容。因此,如果你注释微软和微软,甚至微软的拼写错误,它将试图找到它。 如果您有一个小的名称列表,并且每个名称只有几个变体,并且您需要将结果标准化,请考虑使用RegexNameFinder。如果拉动主干,可以使用Map将RegexNameFinder构造为一组正则表达式模式。

编辑:这是RegexNameFinder的OpenNLP单元测试用例的链接。这是1.6快照

http://svn.apache.org/viewvc/opennlp/trunk/opennlp-tools/src/test/java/opennlp/tools/namefind/RegexNameFinderTest.java?view=co

如果链接不起作用,这是一个基本的例子。

  public void test() {

    Pattern testPattern = Pattern.compile("test");
    String sentence[] = new String[]{"a", "test", "b", "c"};


    Pattern[] patterns = new Pattern[]{testPattern};
    Map<String, Pattern[]> regexMap = new HashMap<>();
    String type = "testtype";

    regexMap.put(type, patterns);

    RegexNameFinder finder =
            new RegexNameFinder(regexMap);

    Span[] result = finder.find(sentence);


  }