2016-09-20 171 views
0

我发现来自Stanford CoreNLP的功能强大的RegexNER及其超集TokensRegex
有一些规则应该给我很好的结果,例如标题为PERSON的模式:
“g。Meho Mehic”或“gdin。N. Neko”(g。和gdin。是波斯尼亚语中的缩写, )。Stanford CoreNLP合并令牌

我在使用现有的标记器时遇到了一些麻烦。它将一些字符串拆分为两个令牌,其中一些离开为一个字符,例如令牌“g”。保留为单词<word>g.</word>和令牌“gdin”。分为2个标记:<word>gdin</word><word>.</word>

这会导致麻烦我正则表达式,我必须处理一个令牌和多令牌的情况下(注意两个“可能点”上),RegexNER例如:

(/g\.?|gdin\.?/ /\./? ([{ word:/[A-Z][a-z]*\.?/ }]+)) PERSON 

而且,这会导致另一个问题,句子拆分,一些句子不被很好地识别,所以正则表达式失败......例如,当一个句子包含“gdin”时。它会将它分成两部分,因此一个点将结束(不存在的)句子。我设法绕过ssplit.isOneSentence = true现在。

问题:

  1. 我必须使自己的标记生成器,以及如何? (合并一些象“gdin”的令牌)
  2. 有没有我错过的设置可以帮助我?

回答

1

好吧,我想了一下,实际上可以想到你的情况非常简单的事情。你可以做的一件事就是将“gdin”添加到标记器中的标题列表中。

标记生成规则在edu.stanford.nlp.process.PTBLexer.flex(看线741)

我真的不明白,很好,但显然也有职称的列表中的标记生成器在那里,所以他们必须是不会分裂时期的情况。

这当然需要您使用Stanford CoreNLP的自定义版本。

您可以在我们的GitHub上获得完整的代码:https://github.com/stanfordnlp/CoreNLP

有建立一个罐子与所有主要的斯坦福CoreNLP类的主要页面上的说明。我想如果你只是运行ant进程,它会自动生成基于PTBLexer.flex的新的PTBLexer.java。

+0

谢谢,我昨天就想到了这个。这将是很好,如果tokenizer可以用这些东西参数化...:D –

+0

我已经做了itttttttt,再次感谢! :D在'build.xml'中有一个叫'flexeverything'的任务。我只需要用这个新的替换旧的罐子。 –

+0

另外我无法得到这个重要的corenlp问题的答案http://stackoverflow.com/questions/39688652/german-corenlp-model-defaulting-to-english-models – stackit

相关问题