Найти процент совпадения между двумя строками, также учитывая порядок слов - Python - PullRequest
0 голосов
/ 31 октября 2018

Я ищу способ вывода процента совпадения между двумя строками (например, именами), а также с учетом того, что они могут быть одинаковыми, но со словами в другом порядке. Я пытался использовать SequenceMatcher (), но результаты только частично удовлетворяют:

a = "john doe"
b = "jon doe"
c = "doe john"
d = "jon d"
e = 'john do'

s = SequenceMatcher(None, a, b)
s.ratio()
0.9333333333333333

s = SequenceMatcher(None, a, c)
s.ratio()
0.5

s = SequenceMatcher(None, a, d)
s.ratio()
0.7692307692307693

s = SequenceMatcher(None, a, e)
s.ratio()
0.9333333333333333

Я в порядке со всеми, кроме второго результата. Я замечаю, что не принимается во внимание, что c содержит те же слова, что и в a другого порядка.

Есть ли другой способ сопоставления строк и получения более высокого процента совпадения в случае, который я упоминал выше. Следует также учитывать, что имена могут содержать более двух слов.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Вы можете использовать другие алгоритмы схожести строк. Выбор алгоритма подобия широко осуществляется на основе использования. Тщательно выбирайте!

Итак, библиотека textdistance имеет множество алгоритмов расстояния текста. Лучше всего в вашем случае использовать кости Соренсена сходство или Jaccard сходство.

Код:

import textdistance as td

a = "john doe"
c = "doe john"
print(td.sorensen.normalized_similarity(a,c))

Выход:

1.0
0 голосов
/ 31 октября 2018

Это зависит от того, что вы ожидаете от расширенного соответствия. Если вы думаете, что второй должен быть 1.0, тогда все просто: разбейте строку на слова, отсортируйте слова, , затем примените SM (SequenceMatcher). Если вы хотите получить штраф за совпадение при сортировке, вы можете использовать любую из функций преобразования, чтобы измерить расстояние между двумя списками слов, и использовать его как фактор возможного совпадения.

Это поможет вам продвинуться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...