2012-04-04 4 views
3

Я пытаюсь сравнить два списка данных, которые имеют некоторый свободный текст, обозначающий один и тот же объект. примерPython сравнение сравнения строк

List 1 ['abc LLC','xyz, LLC'] 
List 2 ['abc , LLC','xyz LLC'] 

Это простой пример, но проблема в том, что может быть много изменений, таких как изменения в случае или добавление некоторых "." между. Есть ли какой-либо пакет python, который может выполнить сравнение и дать меру сходства?

+0

Что вы подразумеваете под «вероятностью»? –

+0

@OliCharlesworth Я думаю, что автор хочет найти процент сходства между двумя строками. Как если бы строки были похожи на 85%. – bezmax

+0

Вы не хотите «вероятность», вы хотите «подобие». http://stackoverflow.com/questions/682367/good-python-modules-for-fuzzy-string-comparison – Joe

ответ

7

Вы можете использовать реализацию алгоритма Levenshtein Distance для неточного соответствия строк, например this one from Wikibooks.

Другим вариантом было бы, например, сложить все в нижнем регистре, удалить пробелы и т.д. до сырым сравнения - это, конечно, зависит от случая использования:

import string, unicodedata 
allowed = string.letters + string.digits 
def fold(s): 
    s = unicodedata.normalize("NFKD", unicode(s).lower()).encode("ascii", "ignore") 
    s = "".join(c for c in s if c in allowed) 
    return s 

for example in ['abc LLC','xyz, LLC', 'abc , LLC','xyz LLC']: 
    print "%r -> %r" % (example, fold(example)) 

напечатает

'abc LLC' -> 'abcllc' 
'xyz, LLC' -> 'xyzllc' 
'abc , LLC' -> 'abcllc' 
'xyz LLC' -> 'xyzllc' 
3

есть отличная бинарная библиотека, которая использует расстояние levenshtein (расстояние редактирования) между строками для оценки сходства. Дайте ему попробовать:

https://github.com/miohtama/python-Levenshtein

Смежные вопросы