我正在为SpaCy预处理文本,并尝试删除标点符号,数字之间除外。然而,在某些情况下,当标点符号与数字连接时,它不会被删除。你能建议一下如何处理这个边缘案件吗?
一个例子:
import re
text = "Fast-charge $ EV ! battery maker StoreDot pulls in $80.7M led led by Vietnam’s VinFast"
preprocessed = re.sub(r'(?<!d)[%$!.,,;:’“”—-](?!d)',' ', text)
print(preprocessed)
# Fast charge EV battery maker StoreDot pulls in $80.7M led by Vietnam s VinFast
预期结果:
# Fast charge EV battery maker StoreDot pulls in 80.7M led by Vietnam s VinFast
负环视在两侧都应该为真,这样就不会与$80
中的$
匹配
您可以匹配字符类的一个字符,断言在左侧或右侧使用交替|
没有数字。
(?<!d)[%$!.,;:’“”—-]|[%$!.,;:’“”—-](?!d)
查看regex演示
票据
示例字符串中有
led led
,预期结果中只有一个led
,但我认为这是拼写错误,因为字符类无法匹配led
字符类中还有一个
,
的双条目。不确定是否要保留它们,但在替换中使用空格可能会留下双倍间距的间隙,正如您在预期结果中看到的那样。如果要删除它们,可以使用
strip()
来删除前导空格和尾随空格,并使用sub和r"[^Sn]{2,}"
来匹配2个或多个没有换行符的空格,并用单个空格替换它们