|
06.12.2018, 14:27
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,791
|
|
Похожесть двух строк
Здравствуйте.
Есть паттерны:
1. Есть ли в наличии ([\s\S]+)?
2. Есть ли ([\s\S]+) в наличии?
Есть строка:
Если ли в наличии лопата?
В строке допущена опечатка, вместо "есть" написано "если".
Нужно как-то определить, что полученная строка удовлетворяет шаблону 1 с небольшими корректировками.
Хотел воспользоваться расстоянием Левенштейна, однако не выходит, т.к. строка сравнивается с паттерном.
Можно как-нибудь решить эту проблему без машинного обучения?
|
|
07.12.2018, 08:42
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,206
|
|
Сообщение от Nexus
|
Нужно как-то определить, что полученная строка удовлетворяет шаблону 1 с небольшими корректировками.
|
Как вариант...
var re=/Ес\S\S ли в наличии ([\s\S]+)\?/;
var str='Есть ли в наличии булки?';
alert(str+' - '+re.test(str));
str='Если ли в наличии цветы?';
alert(str+' - '+re.test(str));
|
|
07.12.2018, 09:33
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,791
|
|
ksa, чтобы применить это на практике, нужно точно знать какие символы пользователь "перепутал". В противном случае от статичного текста придется полностью отказаться в угоду выражений, что позволит ввести любое предложение, главное, чтобы введенные символы стояли на своих местах.
Нужно будет проверить кол-во ложных срабатываний этого подхода.
|
|
07.12.2018, 09:55
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,206
|
|
Сообщение от Nexus
|
чтобы применить это на практике, нужно точно знать какие символы пользователь "перепутал"
|
Ты сам ответил на свой вопрос, Карло... (с)
Я лишь ответил на твой...
|
|
04.02.2019, 13:26
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,791
|
|
condator, случай реальный.
|
|
13.03.2019, 22:13
|
|
Интересующийся
|
|
Регистрация: 10.02.2019
Сообщений: 12
|
|
|
|
13.03.2019, 22:24
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,791
|
|
ДЖАВАСКРИПТИЗЕР, пост ради поста?
Сообщение от Nexus
|
Хотел воспользоваться расстоянием Левенштейна, однако не выходит, т.к. строка сравнивается с паттерном.
|
|
|
13.03.2019, 23:36
|
|
Интересующийся
|
|
Регистрация: 10.02.2019
Сообщений: 12
|
|
нет, просто я немного ленив
Почему не выходит леванштейн. Вот у тебя есть запрос: "есть ли в наличии глюкало?"
1) Матчем выдираешь слово глюкало
2) Бежишь по списку товаров (ты ведь знаешь названия товаров которые у тебя есть) и считаешь леванштейны
3) дальше все и так понятно
В машинное обучение можно смотреть если уже есть опыт иначе это грозит потерей уймы времени с нулевым результатом в итоге
|
|
14.03.2019, 09:27
|
Профессор
|
|
Регистрация: 04.12.2012
Сообщений: 3,791
|
|
Сообщение от ДЖАВАСКРИПТИЗЕР
|
Бежишь по списку товаров (ты ведь знаешь названия товаров которые у тебя есть) и считаешь леванштейны
|
Сообщение от ДЖАВАСКРИПТИЗЕР
|
нет, просто я немного ленив
|
Перечитайте текст в шапке, пожалуйста.
Сообщение от ДЖАВАСКРИПТИЗЕР
|
В машинное обучение можно смотреть если уже есть опыт иначе это грозит потерей уймы времени
|
Ну так я и не хотел туда лезть, ибо не обладаю достаточной компетенцией.
Последний раз редактировалось Nexus, 14.03.2019 в 11:33.
|
|
14.03.2019, 22:42
|
|
Интересующийся
|
|
Регистрация: 10.02.2019
Сообщений: 12
|
|
Можно попробовать логировать запросы. Через некоторе время соберется статистика по наиболее частым и типичным опечаткам. Дальше можно составить набор правил по которым попытаться исправить ошибки. И матчить уже исправленную строку.
Например у нас есть куча таких запросов:
Как снять двушку?
1) Для начала нормализуем строку удалив все двойные пробелы
2) Слово "двушку" смело меняем на "девушку" ибо ни кто в здравом уме двушки в 11 вечера не снимает
3) Пытаемся подобрать паттерн
Пример шуточный. Наиболее частые ошибки можно пытаться исправлять, на остальные забить метиз с метрической резьбой.
|
|
|
|