Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Похожесть двух строк (https://javascript.ru/forum/offtopic/76115-pokhozhest-dvukh-strok.html)

Nexus 06.12.2018 14:27

Похожесть двух строк
 
Здравствуйте.

Есть паттерны:
1. Есть ли в наличии ([\s\S]+)?
2. Есть ли ([\s\S]+) в наличии?

Есть строка:
Если ли в наличии лопата?

В строке допущена опечатка, вместо "есть" написано "если".
Нужно как-то определить, что полученная строка удовлетворяет шаблону 1 с небольшими корректировками.
Хотел воспользоваться расстоянием Левенштейна, однако не выходит, т.к. строка сравнивается с паттерном.


Можно как-нибудь решить эту проблему без машинного обучения?

ksa 07.12.2018 08:42

Цитата:

Сообщение от Nexus
Нужно как-то определить, что полученная строка удовлетворяет шаблону 1 с небольшими корректировками.

Как вариант...

var re=/Ес\S\S ли в наличии ([\s\S]+)\?/;
var str='Есть ли в наличии булки?';
alert(str+' - '+re.test(str));
str='Если ли в наличии цветы?';
alert(str+' - '+re.test(str));

Nexus 07.12.2018 09:33

ksa, чтобы применить это на практике, нужно точно знать какие символы пользователь "перепутал". В противном случае от статичного текста придется полностью отказаться в угоду выражений, что позволит ввести любое предложение, главное, чтобы введенные символы стояли на своих местах.
Нужно будет проверить кол-во ложных срабатываний этого подхода.

ksa 07.12.2018 09:55

Цитата:

Сообщение от Nexus
чтобы применить это на практике, нужно точно знать какие символы пользователь "перепутал"

Ты сам ответил на свой вопрос, Карло... (с)

Я лишь ответил на твой... :)

Nexus 04.02.2019 13:26

condator, случай реальный.

ДЖАВАСКРИПТИЗЕР 13.03.2019 22:13

Трэд ниасилил, только название, но посоветую

https://ru.wikipedia.org/wiki/Расстояние_Левенштейна

https://www.npmjs.com/package/fast-levenshtein

Nexus 13.03.2019 22:24

ДЖАВАСКРИПТИЗЕР, пост ради поста?
Цитата:

Сообщение от Nexus
Хотел воспользоваться расстоянием Левенштейна, однако не выходит, т.к. строка сравнивается с паттерном.


ДЖАВАСКРИПТИЗЕР 13.03.2019 23:36

нет, просто я немного ленив

Почему не выходит леванштейн. Вот у тебя есть запрос: "есть ли в наличии глюкало?"

1) Матчем выдираешь слово глюкало
2) Бежишь по списку товаров (ты ведь знаешь названия товаров которые у тебя есть) и считаешь леванштейны
3) дальше все и так понятно

В машинное обучение можно смотреть если уже есть опыт иначе это грозит потерей уймы времени с нулевым результатом в итоге

Nexus 14.03.2019 09:27

Цитата:

Сообщение от ДЖАВАСКРИПТИЗЕР
Бежишь по списку товаров (ты ведь знаешь названия товаров которые у тебя есть) и считаешь леванштейны

Цитата:

Сообщение от ДЖАВАСКРИПТИЗЕР
нет, просто я немного ленив

Перечитайте текст в шапке, пожалуйста.

Цитата:

Сообщение от ДЖАВАСКРИПТИЗЕР
В машинное обучение можно смотреть если уже есть опыт иначе это грозит потерей уймы времени

Ну так я и не хотел туда лезть, ибо не обладаю достаточной компетенцией.

ДЖАВАСКРИПТИЗЕР 14.03.2019 22:42

Можно попробовать логировать запросы. Через некоторе время соберется статистика по наиболее частым и типичным опечаткам. Дальше можно составить набор правил по которым попытаться исправить ошибки. И матчить уже исправленную строку.

Например у нас есть куча таких запросов:
Как снять двушку?

1) Для начала нормализуем строку удалив все двойные пробелы
2) Слово "двушку" смело меняем на "девушку" ибо ни кто в здравом уме двушки в 11 вечера не снимает
3) Пытаемся подобрать паттерн

Пример шуточный. Наиболее частые ошибки можно пытаться исправлять, на остальные забить метиз с метрической резьбой.


Часовой пояс GMT +3, время: 22:28.