【问题标题】:NLTK regex results in wrong pos_tag output for date and currencyNLTK 正则表达式导致日期和货币的错误 pos_tag 输出
【发布时间】:2017-03-14 22:22:06
【问题描述】:

我正在尝试对以下文本进行 pos_tag:

text = """5.1 Basic Wage:

£350.00 per week payable by monthly instalments in arrear
from 18.12.2015 to 30.06.2016

£550.00 per week payable by monthly instalments in arrear
from 01.07.2016 to 30.06.2017
£650.00 per week payable by monthly instalments in arrear
from 01.07.2017 to 30.06.2018
and £25 from 12.07.2016 to 18th December 2016"""

问题似乎是日期的一部分被标记为$VB(18.', '$'), (u'12.2015', 'CD')(u' 30.', 'VB'), (u'06.2018', 'CD') 而不是(u'18.12.2015', CD),而实际货币450.00, 650.00 被选为只有CD,到目前为止我所拥有的正则表达式是

 sentence_re = r'''(?x)(?:(?:[A-Z])(?:.[A-Z])+.?)
                      | (?:\$?\d+(?:.\d+)?%?)
                      | (?:\w+(?:-\w+)*)
                      | (?:...|)(?:[][.,;"\'?():-_`]) 
                   '''
toks = nltk.regexp_tokenize(text, sentence_re)

postoks = nltk.tag.pos_tag(toks)
print postoks

在我的一生中,我似乎无法在这方面取得任何进展,因此非常感谢任何帮助。

【问题讨论】:

标签: python regex nltk


【解决方案1】:

我建议this regex:

(?x)(?:(?:[A-Z])(?:\.[A-Z])+\.?)
| (?:[£$]?\d+(?:\.\d+)*%?)
| (?:\w+(?:-\w+)*)
| (?:\.{3}|[][.,;\"\'?():_`-])

注意事项:

  • 字符类之外的所有点似乎都与文字点匹配,因此必须转义
  • 货币符号 char 类扩展为 [£$](您可以在此处添加更多内容)
  • \d+(?:\.\d+)? 变成了\d+(?:\.\d+)*,现在这将匹配像12.34.56 这样的子字符串
  • 最后一个...应该匹配点,所以,它变成\.{3}并与标点字符类交替,其中连字符放在末尾,以免创建一个范围并匹配文字连字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2022-11-26
    • 2010-10-23
    • 1970-01-01
    • 2015-02-26
    相关资源
    最近更新 更多