"c. DATE - DATE BC" 的 SUTime SequenceMatchRules

SUTime SequenceMatchRules for "c. DATE - DATE BC"

我正在与 Stanford 的 SequenceMatchRules 斗争,以将以下输入识别为两个日期:

Anaximander (c. 610 – c. 546 BC) was a pre-Socratic Greek philosopher who lived in Miletus, a city of Ionia (in modern-day Turkey).

(取自 Pantheon 数据集,例如 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([=13=], "YEAR_ERA",
            :case {
               [=13=] =~ ( $INT /a\.?d\.?/ ) => ERA_AD,
               [=13=] =~ ( $INT /b\.?c\.?/ ) => ERA_BC,
               :else => ERA_UNKNOWN
            }
          )

          Tag([=14=], "YEAR_ERA",
            :case {
               [=14=] =~ ( $INT /a\.?d\.?/ ) => ERA_AD,
               [=14=] =~ ( /c\.\ / $INT ) => ERA_BC,
               [=14=] =~ ( $INT /b\.?c\.?/ ) => ERA_BC,
               :else => ERA_UNKNOWN
            }
          )

首先它很丑,其次它根本不起作用。

我应该从哪里开始做对?

我正在使用 stanford-corenlp-full-2018-10-05

我应该提到 Pantheon 没有完全规范化,所以我必须稍后处理其他内容,例如 CE/BCE、日期周围缺少空格等。因此,可扩展的方法会很棒。

我认为这条规则会匹配 c. 610 ... 如果它看到模式,它会将相应的 IsoDate 附加到它。请让我知道这是否可行...如果不行,我可以找出问题所在。

{ (/c\./ (/[0-9]{3,4}/)) => IsoDate([0].numcompvalue, NIL, NIL, 0, FALSE) }

这里是 IsoDate 的构造函数,以 era 为参考:

public IsoDate(Number y, Number m, Number d, Number era, Boolean yearEraAdjustNeeded) {
  this.year = (y != null)? y.intValue():-1;
  this.month = (m != null)? m.intValue():-1;
  this.day = (d != null)? d.intValue():-1;
  this.era = (era != null)? era.intValue():ERA_UNKNOWN;
  if (yearEraAdjustNeeded != null && yearEraAdjustNeeded && this.era == ERA_BC) {
    if (this.year > 0) {
      this.year--;
    }
  }
  initBase();
}

如果该规则有效,它应该演示如何匹配文本模式并附加所需的年份。最简单的方法可能是编写一个 pantheon_rules.txt 文件并将其添加到涵盖您想要的所有内容的 SUTime 规则列表中,一旦您掌握了该基本规则,您就可以扩展它以匹配您想要的情况。我还可以在某个时候将处理这些案例的一些规则添加到正式版本中。