使用 re 删除单词会导致删除错误的单词



给定文本"article_utf8",我想删除一个单词列表:

remove = "el|la|de|que|y|a|en|un|ser|se|no|haber|..."
regex = re.compile(r'b('+remove+r')b', flags=re.IGNORECASE)
article_out = regex.sub("", article_utf8)

但是,这是错误地删除了一些单词和单词的一部分,例如:

1- aseguro becomes seguro
2- sería becomes í
3- coma becomes com
4- miercoles becomes 'ercoles'

从技术上讲,单词的某些部分可以匹配正则表达式。要解决此问题,您必须确保正则表达式匹配的任何字母序列都是单个单词,而不是其中的一部分。

一种方法是使正则表达式包含前导和尾随空格,但单词也可以用句点或逗号分隔,因此如果要捕获所有实例,您也必须考虑这些。

或者,您可以尝试使用内置的拆分方法 (https://docs.python.org/2/library/stdtypes.html#str.split) 先将列表拆分为单词。然后我会检查结果列表中的每个单词,删除我不想要的单词并重新加入字符串。然而,这种方法甚至不需要正则表达式,所以尽管简单实用,但它可能不是你想要的。

经过大量测试,以下内容将删除自然语言字符串中的小单词,而不会从其他单词的某些部分中删除它们:

regex = re.compile(r'[s]?b('+remove+')[bs.,]', flags=re.IGNORECASE)

最新更新