【发布时间】: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
在我的一生中,我似乎无法在这方面取得任何进展,因此非常感谢任何帮助。
【问题讨论】:
-
toks的输出是否符合预期?从我观察到标记化需要修复的原因。 -
试试
(?x)(?:(?:[A-Z])(?:\.[A-Z])+\.?)|(?:[£$]?\d+(?:\.\d+)*%?)|(?:\w+(?:-\w+)*)|(?:\.{3}|[][.,;\"\'?():_`-])。我怀疑你错过了逃避点,这里的主要解决方法是用*替换?为(?:\.\d+)模式。