Skulle nog skapa en funktion som går igenom strängen och sekventiellt delar upp den i ord och annan text. T.ex. så här
TOK_ALPHA = "A"
TOK_OTHER = "O"
TOK_SENTINEL = "#"
def toktype(c):
if str.isalpha(c):
return TOK_ALPHA
return TOK_OTHER
def word_accumulator(toks, c):
tt = toktype(c)
if toks[-1][0] == tt:
# Same token as previous character, append to existing string
toks[-1] = (tt, toks[-1][1] + c.lower())
else:
# New type of token, add new entry
toks.append((tt, c))
return toks
def parse(s):
return reduce(word_accumulator, s, [(TOK_SENTINEL, None)])[1:]
s = "hello therer! this Is a text string, actually really sundelly peruchally this is another string. this is a text string."
print parse(s)
[('A', 'hello'), ('O', ' '), ('A', 'therer'), ('O', '! '), ('A', 'this'), ('O', ' '), ('A', 'Is'), ('O', ' '), ('A', 'a'), ('O', ' '), ('A', 'text'), ('O', ' '), ('A', 'string'), ('O', ', '), ('A', 'actually'), ('O', ' '), ('A', 'really'), ('O', ' '), ('A', 'sundelly'), ('O', ' '), ('A', 'peruchally'), ('O', ' '), ('A', 'this'), ('O', ' '), ('A', 'is'), ('O', ' '), ('A', 'another'), ('O', ' '), ('A', 'string'), ('O', '. '), ('A', 'this'), ('O', ' '), ('A', 'is'), ('O', ' '), ('A', 'a'), ('O', ' '), ('A', 'text'), ('O', ' '), ('A', 'string'), ('O', '.')]
Nu har du en lista där det går att särskilja ord från annat utan att något är bortplockat, det som nu behövs göras är att räkna hur många ord som är lika (och hoppa över allt som inte är ord).
Sedan filtrerar man bort alla ord som det inte finns mer än ett av (detta har du ju redan gjort).