сравнение коротких фрагментов текста, анализ текста
есть один фрагмент текста(1-5 слов) назовем его "запрос"
и есть некоторое структурированное множество примерно таких же фрагментов
предложите быстрый метод чтобы найти самый "похожий" на запрос фрагмент из множества
Берешь свой запрос, и прогоняешь его на НОП (наибольшая общая подпоследовательность) со своим словарем. Определяешь порог похожести (ну к примеру 70% от исходного фрагмента, при фразе из 10 букв длина общей подпоследовательности должна быть более 6). Все фрагменты из словаря удовлетворяющие этому условию "похожи" на запрос.
Берешь свой запрос, и прогоняешь его на НОП (наибольшая общая подпоследовательность) со своим словарем. Определяешь порог похожести (ну к примеру 70% от исходного фрагмента, при фразе из 10 букв длина общей подпоследовательности должна быть более 6). Все фрагменты из словаря удовлетворяющие этому условию "похожи" на запрос.
но ведь НОП не поможет сравнить строки с точки зрения близости слов т.е. когда нет четкого совпадения последовательностей но есть похожесть
например запрос "большая жопа"
две фразы "а большая у нее была жопа, правда"
и "на меня упала большая хрень и сломала мне ногу. короче полная жопа"
будут одинаковы с точки зрения НОП
Кстати, вы сами, в приведенном вами примере, можете ответить что наиболее "похоже" на запрос?
Четкое совпадение тоже недаст "похожести".
Здесь все зависит от контекста. А вот как определять контекст на таких малых размерах текста? В мою дилетантскую голову приходит такой вариант - разбиваешь свои готовый фразы по темам (война, политика, общество и т.д.), готовишь словарь где, каждое слово принадлижит к определенной тематики - пуля = война (90%), сапоги = война (50%). Словарь можно сделать на основе анализа текста с уже предопределенной тематикой. Далее смотришь какие слова у тебя в запросе, получается к примеру - общество - 45%, война - 25% и т.д.
Ну и на основании этого уже и ставишь соответствие. Но это так, мысли вслух.
Если реально смотреть на вещи, погляди статьи конкурсантов Яндекса на данную тему, например здесь, а особенно списки литературы в каждой. Есть еще вот книженция с запросом на фундаментальность здесь [eng].
Можешь поискать еще такую тема как "когнитивный поиск", там вообщем что то похожее.
есть один фрагмент текста(1-5 слов) назовем его "запрос"
и есть некоторое структурированное множество примерно таких же фрагментов
предложите быстрый метод чтобы найти самый "похожий" на запрос фрагмент из множества
Просто определись с понятием "похожий". Ползадачи тем самым решишь.
Здесь это самое основное. Из того примера, что привел автор,понятно, что требуется не синтаксический анализ текста, а в некоторой степени семантический (в примере 2 программа должна распознать, что в предложенном фрагменте элементы запроса не являются частью одной логической конструкции предложения?). Реализовать именно такой вариант крайне сложно - учитывая, что как ты будешь определять логические единицы в произвольном тексте (полагая его осмысленным), и потом анализировать, какие из токенов запроса имеют "больший приоритет" при анализе?
В твоем случае Одиссей прав, скорей тебе подойдет технология, схожая с используемой в интернет - поисковиках.
есть один фрагмент текста(1-5 слов) назовем его "запрос"
и есть некоторое структурированное множество примерно таких же фрагментов
предложите быстрый метод чтобы найти самый "похожий" на запрос фрагмент из множества
Надо использовать функцию Левенштейна
http://ru.wikipedia.org/wiki/Расстояние_Левенштейна