НЛП, алгоритмы определения того, является ли блок текста «похожим» на другой (после того, как уже найдено ключевое слово) - PullRequest
2 голосов
/ 12 ноября 2011

Я читал о НЛП столько, сколько мог, и искал здесь, но не нашел ничего, что, по-видимому, отвечало бы именно тому, что я пытаюсь сделать. Я довольно новичок в NLP, но раньше у меня была небольшая экспозиция, так что я получил процессор NLP, который я использую, работая там, где я могу извлечь POS из текста.

Я просто работаю с небольшим образцом документа, а затем с одной «входной фразой», для которой я в основном пытаюсь найти соответствие. Код, который я написал до сих пор, в основном делает это:

  • берет входную фразу и «Searchee (документ, в котором выполняется поиск)» и разбивает их на списки отдельных слов, а затем получает POS для каждого слова. Пользователь также вводит один kewyord, который находится во входной фразе (и должен быть в поиске документа)
  • в обоих списках выполняется поиск ключевого слова, введенного пользователем, а затем, для первого места, где это ключевое слово находится в каждом документе, берется заданное количество слов до и после (например, 5). Они помещаются в набор данных для обработки, поэтому, если одна статья имела:

ключевое слово: футбол

«Многие виды спорта - это весело, футбол - отличный, но очень физический вид спорта». - Тогда мой процесс усек бы это до «весело, футбол это»

Моя цель состоит в том, чтобы сравнить фрагменты, такие как «это весело, футбол - это», по сходству, насколько они могут быть использованы в аналогичном контексте и т. Д.

Мне интересно, может ли кто-нибудь указать мне правильное направление в отношении шаблонов, которые могут быть использованы для этого, алгоритмов и т. Д. Приведенный выше пример является упрощенным, просто чтобы дать представление, но я планирую сделать это сложнее, если я найду подходящее место, чтобы узнать больше об этом. Спасибо за любую информацию

Ответы [ 3 ]

4 голосов
/ 12 ноября 2011

Кажется, вы решаете старую добрую проблему KWIC .Это можно сделать с помощью индексации или просто for цикла по словам в тексте:

for i = 0 to length(text):
    if text[i] == word:
        emit(text[i-2], text[i-1], text[i], text[i+1], text[i+2])

Где emit может означать печать их, сохранение их в хеш-таблице, что угодно.*

2 голосов
/ 12 ноября 2011

То, что вы пытаетесь сделать, - это больше классическая поиск информации , чем проблема НЛП, хотя они очень похожи. Вы создаете словарь терминов частоты .

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

Это может помочь в рассмотрении некоторых вводных ИК слайдов, чтобы прояснить эти понятия. Dr. Рао Камбхампати щедро публикует слайды и аудио лекции на своем сайте.

1 голос
/ 12 ноября 2011

Если вы просто хотите сгенерировать текст, вы можете посмотреть здесь http://phpir.com/text-generation. Если вы хотите найти сходства, вы можете найти поиск по триграммам или более простой поиск по шаблону с помощью дерева: http://phpir.com/tries-and-wildcards. Вот хорошая статья о шипении: http://phpir.com/shingling-near-duplicate-detection

...