Как найти общие фразы в большом тексте - PullRequest
16 голосов
/ 18 декабря 2009

Сейчас я работаю над проектом, в котором мне нужно выбрать наиболее распространенные фразы в огромном тексте. Например, скажем, у нас есть три предложения вроде следующего:

  • Собака прыгнула над женщиной.
  • Собака прыгнула в машину.
  • Собака прыгнула по лестнице.

Из приведенного выше примера я бы хотел извлечь " собака прыгнула ", так как это самая распространенная фраза в тексте. Сначала я подумал: «О, давайте использовать ориентированный граф [с повторяющимися узлами]»:

направленный граф http://img.skitch.com/20091218-81ii2femnfgfipd9jtdg32m74f.png

РЕДАКТИРОВАТЬ : Извините, я допустил ошибку, когда сделал эту диаграмму "за", "в" и "вверх", все должны вернуться к "the".

Я собирался вести подсчет того, сколько раз слово встречалось в каждом объекте узла («the» будет 6; «dog» и «jumped», 3 и т. Д.), Но, несмотря на многие другие проблемы, главная из них появилось, когда мы добавили еще несколько примеров вроде (пожалуйста, игнорируйте плохую грамматику :-)):

  • Собака прыгнула вверх и вниз.
  • Собака прыгнула, как ни одна собака раньше не прыгала.
  • Собака прыгнула счастливо.

У нас теперь есть проблема, поскольку " dog " запустит новый корневой узел (на том же уровне, что и "the"), и мы не будем идентифицировать " dog jumped " как сейчас это самая распространенная фраза. Так что теперь я думаю, что, возможно, я мог бы использовать неориентированный график, чтобы отобразить отношения между всеми словами и в конечном итоге выбрать общие фразы, но я не уверен, как это будет работать, так как вы потеряете важные отношения порядка слова.

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

Спасибо, Ben

1 Ответ

9 голосов
/ 18 декабря 2009

Проверьте этот связанный вопрос: Какие существуют методы / инструменты для обнаружения общих фраз в кусках текста? Также относится к самой длинной общей проблеме подстрок .

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

В целом в представлении Обработка естественного языка в CRAN имеется большое количество пакетов для интеллектуального анализа текста .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...