2016-09-26 2 views
0

У меня есть массивы, содержащие имена игроков премьер-лиги. Я хочу совместить их по имени, так как объекты игрока не имеют уникальных идентификаторов.Как сопоставить похожие строки в javascript

Как сделать сравнение строк, которое будет соответствовать Zlatan Ibrahimovic с помощью Zlatan Ibrahimović? (обратите внимание на последний символ обеих строк)

+3

[Регулярные выражения] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) - ваш друг. –

+0

, но поэтому я должен был бы знать каждое представление одной буквы в другом имени, верно? – ManuKaracho

+0

Вам нужно знать, что «c» с акцентом «эквивалентен» «c» без него. Но компьютер не знает, что вы не скажете об этом. –

ответ

1

Это не тривиальная проблема. Вы должны смотреть на расстояние Левенштейн проблем

https://en.wikipedia.org/wiki/Levenshtein_distance

Вы можете осуществлять поиск в Google для различных реализаций или использовать библиотеку как: https://www.npmjs.com/package/levenshtein

Пример:

l = new Levenshtein('Zlatan Ibrahimovic', 'Zlatan Ibrahimović') 
// l === 1 

я использовал уже, и мне понравилось. В моем коде я использовал это для экспериментального предложения.

Я не забочусь о результатах. Потому что в длинной строке 4 может быть очень хорошее число, а в маленьком 2 это очень плохо.

Я могу сделать что-то вроде l/Math.max (str1.length, str2.length), тогда вы можете сделать свой номер и решить, какой номер вам интересен.

+0

Расстояние Левенштейна используется для вычисления минимального количества изменений, чтобы сделать две строки эквивалентными, не так ли? Я не думаю, что это то, что пытается сделать ОП. Просто используя расстояние Левенштейна и пороговое значение 2, «Златан» и «Клатап» будут соответствовать. –

+1

На самом деле это действительно хороший подход. благодаря! – ManuKaracho

Смежные вопросы