gpt4 book ai didi

python - 有没有办法删除字符串中重复和连续的单词/短语?

转载 作者:太空狗 更新时间:2023-10-30 00:24:17 26 4
gpt4 key购买 nike

有没有办法删除字符串中重复的和连续的单词/短语?例如。

[in]: foo foo bar bar foo bar

[out]: foo bar foo bar

我试过这个:

>>> s = 'this is a foo bar bar black sheep , have you any any wool woo , yes sir yes sir three bag woo wu wool'
>>> [i for i,j in zip(s.split(),s.split()[1:]) if i!=j]
['this', 'is', 'a', 'foo', 'bar', 'black', 'sheep', ',', 'have', 'you', 'any', 'wool', 'woo', ',', 'yes', 'sir', 'yes', 'sir', 'three', 'bag', 'woo', 'wu']
>>> " ".join([i for i,j in zip(s.split(),s.split()[1:]) if i!=j]+[s.split()[-1]])
'this is a foo bar black sheep , have you any wool woo , yes sir yes sir three bag woo wu'

当它变得有点复杂并且我想删除短语时会发生什么(假设短语最多可以由 5 个单词组成)?如何做呢?例如。

[in]: foo bar foo bar foo bar

[out]: foo bar

另一个例子:

[in]: 这是一个句子 sentence sentence this is a sentence where phrase phrase duplicate where phrase duplicate 。句子不是短语。

[out]: This is a sentence where phrase duplicate .句子不是短语。

最佳答案

你可以为此使用 re 模块。

>>> s = 'foo foo bar bar'
>>> re.sub(r'\b(.+)\s+\1\b', r'\1', s)
'foo bar'

>>> s = 'foo bar foo bar foo bar'
>>> re.sub(r'\b(.+)\s+\1\b', r'\1', s)
'foo bar foo bar'

如果你想匹配任意数量的连续出现:

>>> s = 'foo bar foo bar foo bar'
>>> re.sub(r'\b(.+)(\s+\1\b)+', r'\1', s)
'foo bar'

编辑。最后一个例子的补充。为此,您必须在存在重复短语时调用 re.sub。所以:

>>> s = 'this is a sentence sentence sentence this is a sentence where phrases phrases duplicate where phrases duplicate'
>>> while re.search(r'\b(.+)(\s+\1\b)+', s):
... s = re.sub(r'\b(.+)(\s+\1\b)+', r'\1', s)
...
>>> s
'this is a sentence where phrases duplicate'

关于python - 有没有办法删除字符串中重复和连续的单词/短语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22065164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com