Алгоритм поиска совпадений фраз по словарям. Как эффективно найти то, что имел ввиду пользователь?
Исходные данные:
Словарь A - фразы согласия (да / конечно / пожалуйста и т.д.)
Словарь B - фразы несогласия (нет / не нужно т.д.)
Словарь C - фразы занятости (нет времени, я занят, пожалуйста позже и т.д.)
Словарь D - фразы повтора (повторите, не расслышал и т.д.)
Словарь хранится в XML в соответствующих тегах. Сейчас алгоритм загружает XML и когда на вход подаётся фраза например "Пожалуйста позже" он вернёт совпадение из словаря А, потому что там есть фраза "пожалуйста", а должен был из словаря C. Иными словами возвращает первое попашееся совпадение слова из фразы. Вижу выход из ситуации с помощью подсчёта количества символов во фразе пришедшей на вход и в обнаруженных совпадениях и возвращать то, в чём больше символов, но словари тогда надо растить бесконечно. В них буквально должно быть максимум фраз.
Ищите все подходящие варианты, назначайте им вес в зависимости от того, насколько полное совпадение с фразой. Затем по весу выбирайте один вариант. В идеале на вес еще и предыдущие сообщения могут влиять.
Ищите все подходящие варианты, назначайте им вес в зависимости от того, насколько полное совпадение с фразой. Затем по весу выбирайте один вариант
Тогда словарь надо бесконечно наполнять фразами. Вес можно назначать по совпадающим символам во фразе, где больше совпало в нужном порядке, то и брать, но это надо добавлять все возможные фразы.
В идеале на вес еще и предыдущие сообщения могут влиять.
Stalker_RED, т.о. из вашего ответа я понял, что вы предлагаете каждому слову назначать определенный вес, не фразе в целом, а слову. Ок, приходит фраза "Повторите, пожалуйста", у "Повторите" вес будет больше, чем у одинокого пожалуйста и логика поменяется в нужную сторону. Т.е. нужны получается не словари готовых фраз, а хэш таблица слов с ключами в виде веса и анализировать надо не фразу, а каждое слово в отдельности ?
frzq, я не навязываю вам конкретное техническое решение, т.к. слабо понимаю что вы делаете и зачем.
Вес можно давать не только словам, но и фразам, и даже кускам слов.
Вообще тема очень большая и сложная. Вот яндекс некоторые свои приемы описывал