【问题标题】:Stanford CoreNLP merge tokens斯坦福 CoreNLP 合并令牌
【发布时间】:2016-09-21 16:31:39
【问题描述】:

我找到了强大的 RegexNER,它是来自 Stanford CoreNLP 的超集 TokensRegex
有一些规则应该会给我很好的结果,比如带有头衔的人的模式:
“g. Meho Mehic”或“gdin. N. Neko”(g. 和 gdin. 在波斯尼亚语中是 mr. 的缩写)。

我在使用现有的分词器时遇到了一些问题。它将一些字符串拆分为两个标记,而将一些字符串拆分为一个,例如标记“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. 是否有任何我错过的设置可以帮助我解决这个问题?

【问题讨论】:

    标签: token stanford-nlp


    【解决方案1】:

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

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

    我不太了解分词器,但显然那里有一个职位列表,所以它们一定是它不会分开期间的情况。

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

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

    主页上有关于构建包含所有主要斯坦福 CoreNLP 类的 jar 的说明。我想如果你只是运行 ant 进程它会自动生成基于 PTBLexer.flex 的新的 PTBLexer.java。

    【讨论】:

    • 谢谢,我昨天自己也想过这个问题。如果标记器可以用这些东西进行参数化,那就太好了......:D
    • 我已经成功了,再次感谢! :D 在build.xml 中有一个名为flexeverything 的任务。我只需要用这个新罐子替换旧罐子。
    • 我也无法回答这个重要的 corenlp 问题stackoverflow.com/questions/39688652/…
    猜你喜欢
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    相关资源
    最近更新 更多