Gibt es eine Möglichkeit, doppelte und kontinuierliche Wörter/Sätze in einer Zeichenfolge zu entfernen? Z.B.Gibt es eine Möglichkeit, doppelte und kontinuierliche Wörter/Phrasen in einer Zeichenfolge zu entfernen?
[in]:foo foo bar bar foo bar
[out]:foo bar foo bar
Ich habe versucht, dies:
>>> 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'
Was passiert, wenn es ein wenig komplizierter wird, und ich will Phrasen entfernen (sagen wir, Phrasen können aus bis zu 5 Wörtern bestehen)? Wie kann es gemacht werden? Z.B.
[in]:foo bar foo bar foo bar
[out]:foo bar
Ein weiteres Beispiel:
[in]:this is a sentence sentence sentence this is a sentence where phrases phrases duplicate where phrases duplicate . sentence are not prhases .
[out]:this is a sentence where phrases duplicate . sentence are not prhases .
Clever Antwort! +1 Aber würde dies zu Leistungsproblemen führen, wenn es auf eine sehr große Zeichenfolge angewendet wird? – ridgerunner