使用欧洲日期修复CoreNLP句子分割

时间:2017-03-01 22:01:26

标签: nlp date-parsing stanford-nlp

Stanford CoreNLP不适用于许多常见的欧洲日期格式(c.f。Date and time notation in Europe (Wikipedia))。

我们都知道日期解析是一团糟,特别是crazy mm-dd-yyyy format the U.S. uses。尽管如此,CoreNLP甚至无法处理基本的欧洲日期格式,因为它在点上过于分散。

但是,通常会提供日期信息,例如为:

  

DieTerroranschläge,2001年9月11日,einem Dienstag,waren vierkoordinierteFlugzeugentführungenmitanschließendenSelbstmordattentaten...... (Wikipedia)

无论我尝试什么,CoreNLP都将其分为:

1. Die Terroranschläge am 11.
2. September 2001, einem Dienstag, waren vier [...]

使CoreNLP在德国NLP中基本无法使用。点只是将其标记为序数,即这是德国的写作方式“2001年9月11日”。您还会经常看到德语中的符号“11. 9. 2001”,CoreNLP认为9.是另一句话,也是“2001年9月11日”

是否有任何钩子(例如覆盖某些方法)允许我定义模式以使用自己的规则重新连接错误分割的句子?例如,[123]?\d\. 1?\d\.对于日期来说是典型的,并且没有多少个月......

2 个答案:

答案 0 :(得分:0)

虽然这不是一个涉及CoreNLP的解决方案,但是在一个无耻的自我插件中让我发布我自己的(基于Python的)句子分割器和单词标记器,segtok; GitHub。阅读此投诉后,我意识到我自己的分段器也不支持此功能,所以我刚刚添加它并将更新推送到PyPI和GitHub。

我喜欢认为,一般来说,它提供了相当不错的结果,并且它具有针对欧洲特定问题的一些“专业知识”(我讲流利的西班牙语,英语和德语,并掌握其他欧洲语言)所以你可能想看看。

答案 1 :(得分:0)

我在错误报告中发布了一个解决方法:

https://github.com/stanfordnlp/CoreNLP/issues/380

基本上,如果中间没有字符且前一个标记都是数字,我将现有的TokenizerAnnotator与一个将点合并到前一个标记的{{1}}包装起来。这应该是合理有效的 - 比基于正则表达式的方法更有效。