我正在尝试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
对于我的生活,我似乎无法取得任何进展,所以非常感谢任何帮助。
答案 0 :(得分:1)
我建议this regex:
(?x)(?:(?:[A-Z])(?:\.[A-Z])+\.?)
| (?:[£$]?\d+(?:\.\d+)*%?)
| (?:\w+(?:-\w+)*)
| (?:\.{3}|[][.,;\"\'?():_`-])
注意:
[£$]
(您可以在那里添加更多)\d+(?:\.\d+)?
已变为\d+(?:\.\d+)*
,现在这将匹配12.34.56
...
应该匹配点,因此,它会转换为\.{3}
并与标点字符类交替,其中连字符放在最后以免创建范围并匹配文字连字符。