Как я могу получить вероятность того, что строка похожа на другую строку в Python?
Я хочу получить десятичное значение, например, 0,9 (что означает 90%) и т. Д. Предпочтительно со стандартным Python и библиотекой.
например
similar("Apple","Appel") #would have a high prob.
similar("Apple","Mango") #would have a lower prob.
python
probability
similarity
metric
tenstar
источник
источник
Ответы:
Есть встроенный.
Используй это:
источник
SequenceMatcher
противpython-Levenshtein
модуля. stackoverflow.com/questions/6690739/...get_close_matches
встроенный, хотя я нашелsorted(... key=lambda x: difflib.SequenceMatcher(None, x, search).ratio(), ...)
более надежный, с пользовательскимиsorted(... .get_matching_blocks())[-1] > min_match
проверкамиget_closest_matches
). Это удобная функция, которая может быть тем, что вы ищете, АКА читайте документы! В моем конкретном приложении я выполнял некоторую базовую проверку ошибок / отчеты для пользователя, предоставляющего неверные данные, и этот ответ позволяет мне сообщать им о возможных совпадениях и о том, в чем заключалось «сходство». Если вам не нужно показывать сходство, обязательно посмотритеget_closest_matches
Я думаю, что, возможно, вы ищете алгоритм, описывающий расстояние между строками. Вот некоторые, к которым вы можете обратиться:
источник
Решение № 1: встроенный Python
использовать SequenceMatcher из difflib
Плюсы : нативная библиотека Python, нет необходимости в дополнительном пакете.
пример :минусы : слишком ограниченный, есть много других хороших алгоритмов для сходства строк.
Решение № 2: библиотека медуз
Это очень хорошая библиотека с хорошим освещением и несколькими проблемами. он поддерживает:
- Расстояние Левенштейна - Расстояние
Дамерау-Левенштейна
- Расстояние
Яро - Расстояние Яро-Винклера
- Сравнение подходов к рейтингу матчей
- Расстояние Хэмминга
Плюсы : простота в использовании, гамма поддерживаемых алгоритмов, проверено.
минусы : не родная библиотека.
пример :
источник
Fuzzy Wuzzy
это пакет, который реализует расстояние Левенштейна в python, с некоторыми вспомогательными функциями, которые помогают в определенных ситуациях, когда вы можете захотеть, чтобы две разные строки считались идентичными. Например:источник
Вы можете создать функцию как:
источник
if self.similar(search_string, item.text()) > 0.80:
работает на данный момент. Спасибо,Пакетное расстояние включает расстояние Левенштейна:
источник
Встроенная функция
SequenceMatcher
очень медленная при большом вводе, вот как это можно сделать с помощью diff-match-patch :источник
Обратите внимание,
difflib.SequenceMatcher
только находит самую длинную непрерывную совпадающую подпоследовательность, это часто не то, что требуется, например:Обнаружение сходства между двумя строками тесно связано с концепцией парного выравнивания последовательностей в биоинформатике. Для этого есть много специализированных библиотек, включая biopython . В этом примере реализован алгоритм Needleman Wunsch :
Использование биопиона или другого пакета биоинформатики является более гибким, чем любая часть стандартной библиотеки Python, поскольку доступно множество различных схем и алгоритмов оценки. Кроме того, вы можете получить соответствующие последовательности для визуализации происходящего:
источник
Вы можете найти большинство методов схожести текста и способы их расчета по этой ссылке: https://github.com/luozhouyang/python-string-sdentifity#python-string-sdentifity Вот несколько примеров;
Нормализовано, метрика, сходство и расстояние
(Нормализованное) сходство и расстояние
Метрические расстояния
источник