Если повторение слов не является важной особенностью для вашего случая использования, я предлагаю наборы. I.e.:
thestrings = [
"AB 500",
"Bus AB 500",
"News CA",
"News CA BLAH",
]
thesets = dict((s, set(s.split())) for s in thestrings)
similarities = dict()
for s in thestrings:
for o in thestrings:
if s>=o: continue
sims = len(thesets[s] & thesets[o])
if not sims: continue
similarities[s, o] = sims
for s, o in sorted(similarities, similarities.get, reverse=True):
print "%-16r %-16r %2d" % (s, o, similarities[s, o])
Это близко к тому, что вы ищете? Он классифицирует 4 строки, которые вы даете, так, как вы хотите, но это очень слабая выборка, конечно, поэтому я проверяю дважды; -).