2017-03-01 37 views
1

斯坦福CoreNLP不適用於許多常見的歐洲日期格式(c.f. Date and time notation in Europe (Wikipedia))。修復CoreNLP與歐洲日期分割的句子

我們都知道日期解析是一團糟,尤其是crazy mm-dd-yyyy format the U.S. uses。儘管如此,CoreNLP甚至無法處理基本的歐洲日期格式,因爲它在點上過分分裂。

然而,日期信息通常呈現在例如如:

模具Terroranschläge是2001年11月,einem Dienstag,瓦倫koordinierteFlugzeugentführungenMITanschließendenSelbstmordattentaten ... (Wikipedia)

無論我嘗試,CoreNLP分裂VIER到這一點:

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

使CoreNLP在很大程度上無法用於德語NLP。點簡單地將其標記爲序數,即這是德語寫作「2001年9月11日」的方式。 CoreNLP認爲9.是另一句話,也是「2001年9月11日」

是否有任何鉤子(例如,重寫某種方法)可以允許我定義模式來重新連接錯誤地將句子與自己的規則分開?例如,[123]?\d\. 1?\d\.將是典型的日期,並且沒有太多的月...

+0

嗨我會努力讓它重新啓動! – StanfordNLPHelp

+1

您可以簡單地使用這種模式從輸入字符串中刪除點。但是這是一個黑客。 –

+0

我正在嘗試這樣的事情 - 現在用空格替換它們,以保持字符偏移不動。但是,如果CoreNLP支持這一點,那將會更好。 –

回答

0

雖然這不是一個涉及CoreNLP的解決方案,但是在一個無恥的自我插件中,讓我宣傳​​我自己的(Python-基於)的分詞器和詞分詞器,segtok; GitHub。看完這個投訴後,我意識到我自己的分段器也不支持這個功能,所以我剛剛添加它,並將更新推送到PyPI和GitHub。

我喜歡這樣認爲,一般來說,它提供了相當不錯的結果,它對於歐洲特定的問題有一些「專家知識」(我會講流利的西班牙語,英語和德語,並掌握一些關於其他歐洲語言的知識)所以你可能想看看。

0

我已經發布的bug報告解決方法:

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

從本質上講,我包裝現有TokenizerAnnotator有一個融合點到以前的道理,如果其間沒有字符和以前的令牌都是數字。這應該是合理高效的 - 比基於正則表達式的方法更有效。

+0

儘管這*可能比正則表達式更快(它也可以作爲線性掃描實現[作爲DFA,例如RE2]來實現,因此不會比此解決方案慢),現在您將合併所有句子以數字結尾。也許那個(在句子終端之前的數字)在你的特定語料庫中較不頻繁,但總的來說,它不太可能是一個好的解決方案。 – fnl

+0

是的,現在可能會出現誤報。但我確實看到了很多這樣的情況,而且對於我來說,通常錯誤分裂的錯誤更爲嚴重。 CoreNLP默認情況下,我遇到了很多*錯誤,直到我對其性能真的不高興,並且正在考慮探索替代方案。就目前而言,這再次「足夠好」(還有一些像這樣的黑客)。 CoreNLP的句子拆分器肯定需要更多的工作和直接評估。 –