在nlp
标记化中,收缩有时被拆分为:
>>> import re
>>> s = 'he cannot fly'
>>> pattern, substitution = r"(?i)\b(can)(not)\b", r" \1 \2 "
>>> re.sub(pattern, substitution, s)
'he can not fly'
为了扭转这种局面(即脱毒),我尝试了以下方法:
>>> rev_pattern, rev_substitution = r"(?i)\b(can)\s(not)\b", r" \1\2 "
>>> re.sub(rev_pattern, rev_substitution, s)
'he cannot fly'
问题是r"(?i)\b(can)\s(not)\b"
和r" \1\2 "
是原始模式替代的反面吗?有没有其他方法可以扭转这种局面?你知道吗
在本例中,我手动将\s
编码到模式中。主要的问题是,有一堆regex是为标记化而手动编码的,我必须为它们手动添加\s
:
CONTRACTIONS2 = [re.compile(r"(?i)\b(can)(not)\b"),
re.compile(r"(?i)\b(d)('ye)\b"),
re.compile(r"(?i)\b(gim)(me)\b"),
re.compile(r"(?i)\b(gon)(na)\b"),
re.compile(r"(?i)\b(got)(ta)\b"),
re.compile(r"(?i)\b(lem)(me)\b"),
re.compile(r"(?i)\b(mor)('n)\b"),
re.compile(r"(?i)\b(wan)(na) ")]
CONTRACTIONS3 = [re.compile(r"(?i) ('t)(is)\b"),
re.compile(r"(?i) ('t)(was)\b")]
CONTRACTIONS4 = [re.compile(r"(?i)\b(whad)(dd)(ya)\b"),
re.compile(r"(?i)\b(wha)(t)(cha)\b")]
有没有一种方法可以自动遍历regex列表并在组之间添加\s
,而不必硬编码detokenzation regex
我知道原始的标记化替换是->;`r'\1\2',所以要撤消它,我必须将它改回r'\1\2'。你知道吗
你可以在中间加上一个注释
(?#...)
。然后做pattern.replace
例如:
相关问题 更多 >
编程相关推荐