Как я сравниваю фразы для подобия?

12
задан Hanno Fietz 16 September 2008 в 09:04
поделиться

4 ответа

Один подход является так называемой моделью "мешок слов".

Как Вы предположили, сначала Вы рассчитываете, сколько раз слов появляется в тексте (обычно называемый документ в малопонятном жаргоне обработки естественного языка). Затем Вы выводите так называемые стоп-слова, такой как, "a", "или" и так далее.

Вас оставляют со словами и подсчетами слов. Сделайте это некоторое время, и Вы получаете исчерпывающий набор слов, которые появляются в Ваших документах. Можно затем создать индекс для этих слов: "муравьед" - 1, "яблоко" равняется 2..., "z-индекс" 70092.

Теперь можно взять мешки слова и превратить их в векторы. Например, если бы Ваш документ содержит две ссылки для муравьедов и ничего иного, он был бы похож на это:

[2 0 0 ... 70k zeroes ... 0].

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

Это - простая версия и там другие более усовершенствованные методы. Пусть Википедия будет с Вами.

12
ответ дан 2 December 2019 в 18:23
поделиться

@Hanno необходимо попробовать алгоритм расстояния Левенштейна. Учитывая входную строку s и список строк t выполняют итерации для каждой строки u в t и возвращают тот с минимальным расстоянием Левенштейна.

http://en.wikipedia.org/wiki/Levenshtein_distance

Посмотрите пример реализации Java в http://www.javalobby.org/java/forums/t15908.html

3
ответ дан 2 December 2019 в 18:23
поделиться

Увеличивать идею сумки слов:

Существует несколько способов, которыми можно также обратить некоторое внимание на n-граммы, строки двух или больше поддерживаемых в порядке слов. Вы могли бы хотеть сделать это, потому что поиск "сложности пространства" намного больше, чем поиск вещей с "пространством" И "сложностью" в них, так как значение этой фразы является больше, чем сумма ее частей; то есть, если Вы получаете результат, который говорит о сложности космоса и вселенной, это, вероятно, не что поиск "сложности пространства", действительно предназначенной.

Ключевая идея от обработки естественного языка здесь является идеей взаимной информации, которая позволяет Вам (алгоритмически) судить, является ли фраза действительно определенной фразой (такой как "сложность пространства") или просто слова, которые по совпадению смежны. Математически, основная идея состоит в том, чтобы спросить, вероятностно, если бы эти слова появляются друг рядом с другом чаще, чем Вы предположили бы одними только их частотами. Если Вы видите фразу с высоким счетом взаимной информации в Вашем поисковом запросе (или при индексации), можно получить лучшие результаты путем попытки сохранить эти слова в последовательности.

3
ответ дан 2 December 2019 в 18:23
поделиться

На основе моего (довольно маленького) опыта, разрабатывающего механизмы полнотекстового поиска: Я искал бы вопросы, которые содержат некоторые слова от запроса (в Вашем случае, запрос является Вашим вопросом). Несомненно, шумовые слова должны быть проигнорированы, и мы могли бы хотеть проверить запрос на 'сильные' слова как 'ASP.NET' для сужения поискового объема. http://en.wikipedia.org/wiki/Index_ (search_engine) #Inverted_indices'> Инвертированные индексы являются наиболее часто используемыми для нахождения вопросов со словами, которыми мы интересуемся.

После нахождения вопросов со словами от запроса мы могли бы хотеть вычислить расстояние между словами, которыми мы интересуемся в вопросах, таким образом, вопрос с 'текстом' подобия фраз занимает место выше, чем вопрос с 'обсуждением подобия, Вы слышите следующие фразы...' текст.

2
ответ дан 2 December 2019 в 18:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: