Оценка сходства строк / хэш - PullRequest
45 голосов
/ 01 декабря 2010

Есть ли метод для расчета чего-то вроде общего «показателя сходства» строки? Таким образом, я не сравниваю две строки вместе, а получаю некоторое число (хэш) для каждой строки, которое позже может сказать мне, что две строки похожи или не похожи. Две одинаковые строки должны иметь одинаковые (закрытые) хэши.

Давайте рассмотрим эти строки и оценки в качестве примера:

Hello world                1000
Hello world!               1010
Hello earth                1125
Foo bar                    3250
FooBarbar                  3750
Foo Bar!                   3300
Foo world!                 2350

Вы можете видеть, что Hello world! и Hello world похожи и их оценки близки друг к другу.

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

Ответы [ 12 ]

0 голосов
/ 01 декабря 2010

Я думаю о чем-то вроде этого:

  1. удалить все несловарные символы
  2. применить Soundex
0 голосов
/ 01 декабря 2010

Ну, вы можете сложить значение ascii каждого персонажа, а затем сравнить баллы, имея максимальное значение, от которого они могут отличаться. Однако это не гарантирует, что они будут похожи, по той же причине две разные строки могут иметь одинаковое значение хеш-функции.

Конечно, вы могли бы сделать более сложную функцию, начиная с проверки размера строк, а затем сравнивая каждый символ по одному, опять же, с установкой максимальной разницы.

...