Как лучше всего сочетать две строки? - PullRequest
3 голосов
/ 09 декабря 2008

знаете ли вы какие-нибудь хорошие алгоритмы, которые соответствуют двум строкам, а затем возвращают процент от того, сколько процентов соответствуют этим двум строкам?

А есть ли такие, которые тоже работают с базами данных?

Ответы [ 5 ]

8 голосов
/ 09 декабря 2008

Расстояние Левенштейна является такой мерой. Он в основном говорит вам, сколько символов нужно отредактировать, удалить или добавить, чтобы перейти от первой ко второй строке. Я не уверен, что некоторые системы баз данных поддерживают это.

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

2 голосов
/ 09 декабря 2008

Это зависит от ваших критериев сходства. Другие люди уже направили вас на расстояние Левенштейна (редактировать расстояние - то же самое). Это обычно довольно хорошо, и определенно более независимо от языка, чем что-то вроде soundex. Однако следует помнить, что различие Левенштейна не очень хорошо справляется с транспозицией. Таким образом:

Levenstein("copy", "cpoy") == 2

Если вы пытаетесь справиться с человеческим вкладом, транспонирование довольно распространено. Является ли это проблемой или нет, зависит от ваших показателей сходства.

Это было давно, но я считаю, что Postgresql имеет levenstein() либо встроенный, либо доступный как contrib C модуль.

1 голос
/ 17 июня 2010

Как лучше всего сопоставить две строки? Попросите их пойти выпить кофе и, если они получат удовольствие, ужин и кино. Или, может быть, они могли бы заняться программированием? Это зависит от строк, на самом деле. Даже кофе часто бывает хитрым.

1 голос
/ 09 декабря 2008

Я думаю, что проблема, которую вы ищете, называется Изменить расстояние . В общем, это дорого для вычисления, но если вы ищете строки на небольшом расстоянии редактирования от других строк, это не так уж плохо. Больше информации в статье в Википедии.

0 голосов
/ 09 декабря 2008

Это поможет? Я просто столкнулся с этим. Сравнение двух строк для получения числовой дельты

...