Как исправить все опечатки ⚡️
〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️〰️
Самое важное тут - понять, насколько введенное слово похоже на какое-то другое существующее. Например, интуитивно понятно, что слово пупа больше похоже на лупа, чем на луна. Эту похожесть можно формализовать через расстояние Левенштейна.
📌Расстояние Левенштейна - это минимальное количество вставок, удаления или замены одного символа, которое нужно, чтобы из строки1 получить строку2
📌 Еще есть расстояние Дамерау-Левенштейна. Здесь к односимвольным операциям добавляется транспозиция - когда два соседних символа меняются местами.
Чтобы получить из слова пупа слово лупа, нам потребуется одна замена, а чтобы получить слово луна - две, поэтому расстояния равны 1 и 2 соответственно.
Что делать, если для введенной строки с опечаткой есть несколько слов, которые находятся на одинаковом расстоянии?
🟢 Выбрать самое частотное слово. Например лупа, папа и попа требуют всего 1 замену от слова пупа. Из всех трех кандидатов наиболее частотное слово - это папа
🟢 Добавить цену операциям. Например, ошибки транспозиции более частотны, поэтому можно снизить для этой операции цену
🟢 При замене учитывать сами символы, которые заменяются. Например, в раскладке QWERTY ошибка c Q на W более вероятна, чем Q и Y , а неграмотные люди чаще путают А и О, чем А и Б
Этим алгоритмом считают разницу строк все спеллчекеры, git diff и даже гугол
Post #137
950
- 🔥 16
- ❤ 4
- 😁 1
- 👾 1