【问题标题】:nltk custom grammar for chunking dates using RegexpParser使用 RegexpParser 分块日期的 nltk 自定义语法
【发布时间】:2017-03-14 10:26:44
【问题描述】:

使用此博客post 中的信息提取,我正在尝试定义一个语法,其中包括将日期添加为具有以下语法的新块;

grammar = r"""
    NBAR:
        {<NN.*|JJ>*<NN.*>}  # Nouns and Adjectives, terminated with Nouns

    NP:
        {<NBAR>}
        {<NBAR><IN><NBAR>}  # Above, connected with in/of/etc...
    DATE -> MONTH SEP DAY SEP YEAR
    SEP -> "/"
    MONTH -> DIGIT | DIGIT DIGIT
    DAY -> DIGIT | DIGIT DIGIT
    YEAR -> DIGIT DIGIT DIGIT DIGIT
    DIGIT -> '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '0'

但是当我调用chunker = nltk.RegexpParser(grammar) 时,这会引发非法的块模式,任何关于如何包含始终表示为 8 位数字的日期的想法DD/MM/YYYY 或以长形式表示月份和日期后跟序号指示符st,nd, or th,因此结果为DDthMONTHYYYY

【问题讨论】:

    标签: python regex date parsing nltk


    【解决方案1】:

    您正在混合苹果和橙子。只有你的前两个扩展是有效的 nltk RegexpParser 规则,所以你在第三个得到一个错误。将其余的转换为相同的格式:将分隔符从-&gt; 更改为:,然后将扩展写为RegexpParser 表达式。请注意,您使用的是分块器,而不是分层解析器。 (请参阅上述文档,以及 NLTK 书中的所有 Chapter 7。)

    【讨论】:

    • 附言。请注意,块解析器与令牌上的 POS 标签匹配,而不是单个字符。您可能想退后一步,重新考虑您用于此任务的工具...
    猜你喜欢
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 2012-05-14
    • 2013-03-14
    相关资源
    最近更新 更多