我正在与斯坦福大学的 SequenceMatchRules 争夺将以下输入识别为两个日期:
阿那克西曼德(约公元前 610 年 - 约 546 年)是一位前苏格拉底时代的希腊哲学家,居住在爱奥尼亚(现代土耳其)的一座城市米利都。
(取自万神殿数据集,例如http://pantheon.media.mit.edu)
'546 BC'工作得很好,但我也想将'610'识别为'610 BC'(最好不是持续时间)。
到目前为止,我所做的只是为了让事情顺利进行:
修改english.sutime.txt
:
改变了
$POSSIBLE_YEAR = ( $YEAR /a\.?d\.?|b\.?c\.?/? | $INT /a\.?d\.?|b\.?c\.?/ | $INT1000TO3000 );
至
$POSSIBLE_YEAR = ( $YEAR /a\.?d\.?|b\.?c\.?/? | $INT /a\.?d\.?|b\.?c\.?/ | /c\.\ / $INT | $INT1000TO3000 );
并在pattern: ( $POSSIBLE_YEAR)...
提取规则中:
Tag($0, "YEAR_ERA",
:case {
$0 =~ ( $INT /a\.?d\.?/ ) => ERA_AD,
$0 =~ ( $INT /b\.?c\.?/ ) => ERA_BC,
:else => ERA_UNKNOWN
}
)
至
Tag($0, "YEAR_ERA",
:case {
$0 =~ ( $INT /a\.?d\.?/ ) => ERA_AD,
$0 =~ ( /c\.\ / $INT ) => ERA_BC,
$0 =~ ( $INT /b\.?c\.?/ ) => ERA_BC,
:else => ERA_UNKNOWN
}
)
首先它很丑,其次它根本不起作用。
我应该从哪里开始做正确的事?
我正在使用stanford-corenlp-full-2018-10-05
.
我应该提一下 Pantheon 并没有完全标准化,所以我必须稍后处理诸如 CE/BCE 之类的额外内容,日期周围缺少空格等。因此,可扩展的方法会很棒。