Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.12.2018, 14:27
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

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

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

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

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


Можно как-нибудь решить эту проблему без машинного обучения?
Ответить с цитированием
  #2 (permalink)  
Старый 07.12.2018, 08:42
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

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

var re=/Ес\S\S ли в наличии ([\s\S]+)\?/;
var str='Есть ли в наличии булки?';
alert(str+' - '+re.test(str));
str='Если ли в наличии цветы?';
alert(str+' - '+re.test(str));
Ответить с цитированием
  #3 (permalink)  
Старый 07.12.2018, 09:33
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

ksa, чтобы применить это на практике, нужно точно знать какие символы пользователь "перепутал". В противном случае от статичного текста придется полностью отказаться в угоду выражений, что позволит ввести любое предложение, главное, чтобы введенные символы стояли на своих местах.
Нужно будет проверить кол-во ложных срабатываний этого подхода.
Ответить с цитированием
  #4 (permalink)  
Старый 07.12.2018, 09:55
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,121

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

Я лишь ответил на твой...
Ответить с цитированием
  #5 (permalink)  
Старый 04.02.2019, 13:26
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

condator, случай реальный.
Ответить с цитированием
  #6 (permalink)  
Старый 13.03.2019, 22:13
Аватар для ДЖАВАСКРИПТИЗЕР
Интересующийся
Отправить личное сообщение для ДЖАВАСКРИПТИЗЕР Посмотреть профиль Найти все сообщения от ДЖАВАСКРИПТИЗЕР
 
Регистрация: 10.02.2019
Сообщений: 12

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

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

https://www.npmjs.com/package/fast-levenshtein
Ответить с цитированием
  #7 (permalink)  
Старый 13.03.2019, 22:24
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

ДЖАВАСКРИПТИЗЕР, пост ради поста?
Сообщение от Nexus
Хотел воспользоваться расстоянием Левенштейна, однако не выходит, т.к. строка сравнивается с паттерном.
Ответить с цитированием
  #8 (permalink)  
Старый 13.03.2019, 23:36
Аватар для ДЖАВАСКРИПТИЗЕР
Интересующийся
Отправить личное сообщение для ДЖАВАСКРИПТИЗЕР Посмотреть профиль Найти все сообщения от ДЖАВАСКРИПТИЗЕР
 
Регистрация: 10.02.2019
Сообщений: 12

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

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

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

В машинное обучение можно смотреть если уже есть опыт иначе это грозит потерей уймы времени с нулевым результатом в итоге
Ответить с цитированием
  #9 (permalink)  
Старый 14.03.2019, 09:27
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,723

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

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

Последний раз редактировалось Nexus, 14.03.2019 в 11:33.
Ответить с цитированием
  #10 (permalink)  
Старый 14.03.2019, 22:42
Аватар для ДЖАВАСКРИПТИЗЕР
Интересующийся
Отправить личное сообщение для ДЖАВАСКРИПТИЗЕР Посмотреть профиль Найти все сообщения от ДЖАВАСКРИПТИЗЕР
 
Регистрация: 10.02.2019
Сообщений: 12

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

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

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

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


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск по таблице и перестановка строк KemPavel jQuery 2 19.10.2015 12:28
Сравнение двух одинаковых строк - false kweb Общие вопросы Javascript 10 02.02.2015 18:29
Выделение двух строк в таблице при hover Kikoma (X)HTML/CSS 1 28.05.2014 05:49
Сравнение двух строк drac0Sha Общие вопросы Javascript 17 20.08.2012 19:45
аналог двух строк кода создания Range-объкта для ie syegorius Events/DOM/Window 2 13.01.2012 15:14