我从Stanford CoreNLP找到了强大的RegexNER及其超集TokensRegex。
有一些规则可以给我很好的结果,比如带有标题的PERSON图案:
"克。 Meho Mehic"或者" gdin。 N. Neko" (g。和gdin。是先生波斯尼亚语的缩写)。
我在使用现有的tokenizer时遇到了一些麻烦。它将一些字符串拆分为两个标记,一些树叶作为一个标记,例如,标记&#34; g。&#34;保留为单词<word>g.</word>
和标记&#34; gdin。&#34;分为2个令牌:<word>gdin</word>
和<word>.</word>
。
这会导致我的正则表达式出现问题,我必须处理单令牌和多令牌情况(请注意两个&#34;也许 - 点&#34; s),RegexNER示例:
( /g\.?|gdin\.?/ /\./? ([{ word:/[A-Z][a-z]*\.?/ }]+) ) PERSON
另外,这会导致另一个问题,句子分裂,一些句子没有被很好地识别,因此正则表达式失败...例如,当一个句子包含&#34; gdin。&#34;它将它分成两部分,因此一个点将结束(不存在的)句子。我设法暂时绕过ssplit.isOneSentence = true
。
问题:
答案 0 :(得分:1)
好的,我想了一下,实际上可以想到一些非常简单的事情。你可以做的一件事是添加&#34; gdin&#34;到标记器中的标题列表。
标记器规则在edu.stanford.nlp.process.PTBLexer.flex中(见第741行)
我并不是很了解这个令牌,但显然有一份职位名单,所以它们必须是不会分割期限的情况。
这当然要求您使用Stanford CoreNLP的自定义构建。
您可以在我们的GitHub上获取完整代码:https://github.com/stanfordnlp/CoreNLP
主页上有说明,用于构建包含所有主要Stanford CoreNLP类的jar。我想如果你只运行ant进程,它将自动生成基于PTBLexer.flex的新PTBLexer.java。