【问题标题】:SUTime SequenceMatchRules for "c. DATE - DATE BC"“c. DATE - DATE BC”的 SUTime SequenceMatchRules
【发布时间】:2018-12-17 19:20:18
【问题描述】:

我正在与斯坦福大学的 SequenceMatchRules 抗争,将以下输入识别为两个日期:

Anaximander (c. 610 – c. 546 BC) 是前苏格拉底时期的希腊哲学家 他住在爱奥尼亚(今土耳其)的一座城市米利都。

(取自 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($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、日期周围缺少空格等其他内容。因此,可扩展的方法会很棒。

【问题讨论】:

    标签: regex date stanford-nlp sutime


    【解决方案1】:

    我认为这条规则将匹配c. 610 ...如果它看到模式,它将附加相应的 IsoDate 到它。请让我知道这是否有效......如果没有,我可以弄清楚是什么坏了。

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

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

    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 规则列表中,一旦您有了基本规则,您就可以扩展它以匹配您想要的情况。我还可以在某个时候将一些处理这些案例的规则添加到官方版本中。

    【讨论】:

    • 完美,效果很好!而且由于模式匹配是基于标记发生的,因此不会出现任何问题,例如匹配“......在临床c. 610 人......”,对吗?
    • 是的,模式匹配是基于标记的。
    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 2016-08-30
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多