@jarderRek

Как в javascript сделать игнорирование опечаток?

Здравствуйте, появилась вот такая проблема:
https://codepen.io/fazras12/pen/JjMQEmq

Если вводить 'Я купил молоко' то все будет выполнятся правильно. Ну я хочу чтобы можно было опечататься, например вводить: 'Я купиил моллокко!!!####' , ' я КупИилЛ МоллОкКкОО' и так далее. Можно как то такое сделать на javascript?
  • Вопрос задан
  • 150 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Akela_wolf
Extreme Programmer
Делайте сравнение не на равенство строк, а на "примерное" соответствие с учетом возможных опечаток. Это только вы можете решить - что считать опечаткой, а что нет. Javascript не настолько умный.

Можете попробовать использовать расстояние Левенштейна (или Дамерау-Левенштейна)
Ответ написан
@rPman
У опечаток есть определенный профиль ошибок, т.е. не случайные кнопки
Правильно - написать свою реализацию функции левенштейна, которая определяет свою стоимость ошибки (меньшую) для таких событий как:
* знаки препинания и пробелы должны иметь малую стоимость или даже нулевую (к пробелам особое отношение но в твоей задаче лучше удалить)
* повторяющиеся символы должны иметь наименьшую стоимость (удаление символа)
* символы, находящиеся рядом на клавиатуре при подмене имеют маленькую стоимость, их лучше забить в код вручную (мне не требовалось работать с мультиязычными данными, максимум англ и рус), если найдете готовую базу для всех языковых раскладок клавиатур включая мобильные, был бы рад

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

Так же, после определенной накопленной суммы разницы между строками, дальше тратить время не актуально, советую в своей реализации добавить этот параметр (особенно это актуально когда надо огромные объемы данных обработать)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы