斯坦福 CoreNLP 合并令牌

Stanford CoreNLP merge tokens

我从 Stanford CoreNLP 找到了强大的 RegexNER and it's superset TokensRegex
有一些规则应该能给我很好的结果,比如 PERSONs with titles 的模式:
"g. Meho Mehic" 或 "gdin. N. Neko"(g. 和 gdin. 是波斯尼亚语中 mr. 的缩写)。

我在使用现有分词器时遇到了一些问题。它将一些字符串拆分为两个标记,一些字符串作为一个保留,例如,标记 "g." 被保留为单词 <word>g.</word> 并且标记 "gdin." 被拆分为 2 个标记:<word>gdin</word><word>.</word>.

这会导致我的正则表达式出现问题,我必须处理单标记和多标记的情况(注意两个 "maybe-dot"s),RegexNER 示例:

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

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

问题:

  1. 我必须制作自己的分词器吗?如何制作? (合并一些标记,如 "gdin.")
  2. 是否有任何我遗漏的设置可以帮助我解决这个问题?

好的,我考虑了一下,实际上可以为您的案例想出一些非常直接的东西。您可以做的一件事是将 "gdin" 添加到分词器的标题列表中。

标记器规则在 edu.stanford.nlp.process.PTBLexer.flex 中(查看第 741 行)

分词器我不是很了解,但很明显里面有职位列表,所以它们一定是不会拆分句点的情况。

这当然需要您使用自定义构建的 Stanford CoreNLP。

您可以在我们的 GitHub:https://github.com/stanfordnlp/CoreNLP

获取完整代码

主页上有使用所有主要 Stanford CoreNLP 类 构建 jar 的说明。我想如果你只是 运行 蚂蚁进程,它会根据 PTBLexer.flex.

自动生成新的 PTBLexer.java