Наиболее эффективная метрическая функция сходства строк - PullRequest
0 голосов
/ 29 мая 2018

Я ищу эффективную реализацию метрической функции сходства строк в Python (или библиотеки, которая обеспечивает привязки Python).

Я хочу сравнить строки со средним размером 10 КБ, и я могу 'Я не хочу сравнивать все по порядку, как сравнивать построчно.Меня не волнует, какая именно метрика будет использоваться, если результаты будут разумными и вычисления будут быстрыми.Вот что я пробовал до сих пор:

  • difflib.SequenceMatcher из стандартной библиотеки lib.ratio() дает хорошие результаты, но занимает> 100 мс для текста размером 10 КБ.quick_ratio() занимает только половину времени, но результаты иногда далеки от реального значения.
  • python-Levenshtein: левенштейн является приемлемым показателем для моего случая использования, но Levenshtein.ratio('foo', 'bar')не быстрее, чем SequenceMatcher.

Прежде чем я начну бенчмаркинг каждой библиотеки на pypi, которая предоставляет функции для измерения сходства строк, может быть, вы можете указать мне правильное направление?Я бы хотел, если это возможно, сократить время на одно сравнение до менее 10 мс (на обычном оборудовании).

1 Ответ

0 голосов
/ 29 мая 2018

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

Это библиотека C ++ с привязками Python, которая вычисляет расстояние Левенштейна для текстов <100 КБ менее чем за 10 мс каждый (на моем компьютере).Текст размером 10 КБ выполняется за ~ 1 мс, что в 100 раз быстрее, чем <code>difflib.SequenceMatcher.

...