Я работаю над проектом в тот момент, когда мне нужно выбрать самые распространенные фразы в огромном тексте. Например, у нас есть три предложения, например:
- Собака прыгнула над женщиной.
- Собака прыгнула в машину.
- Собака прыгнула вверх по лестнице.
Из приведенного выше примера я хотел бы извлечь "собаку вскочил", поскольку это самая распространенная фраза в тексте. Сначала я подумал: "Ох позволяет использовать ориентированный граф [с повторяющимися узлами]":
ориентированный граф http://img.skitch.com/20091218-81ii2femnfgfipd9jtdg32m74f.png
РЕДАКТИРОВАТЬ. Извиняюсь, я допустил ошибку, сделав эту диаграмму "сверху", "в" и "вверх", чтобы все связывались с "the" .
Я собирался подсчитать, сколько раз было слово в каждом объекте node ( "the" было бы "6", "собака" и "подпрыгнувшая", 3 и т.д.), но, несмотря на многие другие проблемы, главный из них появился, когда мы добавили еще несколько примеров (пожалуйста, игнорируйте плохую грамматику:-)):
- Собака прыгнула вверх и вниз.
- Собака прыгнула, как ни одна собака никогда не прыгала раньше.
- Собака прыгнула счастливо.
Теперь у нас есть проблема, так как "собака" запускает новый корень node (на том же уровне, что и "the" ), и мы не будем идентифицировать "собаку в прыжке", как теперь наиболее распространенную фразу. Итак, теперь я думаю, что, возможно, я мог бы использовать неориентированный граф для сопоставления отношений между всеми словами и в конечном итоге выбрать общие фразы, но я не уверен, как это будет работать, поскольку вы теряете важную взаимосвязь между слова.
У кого-нибудь есть общие идеи о том, как определить общие фразы в большом тексте и какую структуру данных я буду использовать.
Спасибо, Бен