Текстовый анализ больших документов - PullRequest
1 голос
/ 13 июля 2009

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

Мой первый вопрос ... что похожее? Количество совпадающих слов, количество совпадающих последовательных слов?

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

Я видел предыдущий вопрос на Алгоритмы или библиотеки для текстового анализа, в частности: доминирующие слова, фразы по всему тексту и набор текста

однако, это выглядит несколько иначе, чем то, что я пытаюсь сделать.

Любые варианты или указатели, которые могут быть у людей, были бы великолепны!

Ответы [ 5 ]

1 голос
/ 25 июля 2009

Один из подходов, который вы можете использовать, называется Shingling. Процесс включает в себя маркировку всех слов в обоих документах, например.

D1 = {"An", "Example", "Document", "To", "Show", "Shingling"}
D2 = {"Another", "Example", "Document", "To", "Show", "Shingling", "but", "longer"}

Затем возьмите множество смежных подпоследовательностей длины окна n (не забудьте, что в наборе нет дубликатов).

S(D1, 3) = {{"An", "Example", "Document"}, {"Example", "Document", "To"}, {"Document", "To", "Show"}, {"To", "Show", "Shingling"}}

S(D2, 3) = {{"Another", "Example", "Document"}, {"Example", "Document", "To"}, {"Document", "To", "Show"}, {"To", "Show", "Shingling"}, {"Show", "Shingling", "but"}, {"Shingling", "but", "longer"}}

Тогда сходство - это мощность пересечения, деленная на мощность объединения. Так что для нашего примера 3/7 = 43% похоже.

Эффективное приближение можно сделать, используя эскизы (подмножество из набора черепицы), выбранные случайным образом.

1 голос
/ 13 июля 2009

Один простой подход - объединить текст документа, а затем сжать его. Степень сжатия может сказать вам, насколько у вас сходство.

1 голос
/ 13 июля 2009

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

Может быть полезно задать вопрос «почему». Для чего будет использоваться мера сходства?

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

Если вместо этого вы пытаетесь создать каталог для некоторых документов, то, возможно, вам придется искать ключевые слова. Два документа похожи, если в них используется один и тот же словарный запас по длине слова или похожие имена.

Эти два примера предназначены для демонстрации того, что пока мы не поймем, что подразумевается под подобным, трудно дать много советов.

Однако вот возможный подход. Вы могли бы написать две основные вещи: экстрактор и компаратор.

Работа экстрактора состоит в том, чтобы разбираться в документе и создавать набор (или список, нужно ли его заказывать?) Фрагментов, составляющих сущность документа: это могут быть отдельные слова или предложения и фразы.

Работа компаратора заключается в оценке сходства двух «сущностей» документов.

Простой пример: извлечь из документа уникальный список слов из 8 или более букв. Сравнение может быть тогда для двух одинаковых документов, если в одном наборе содержится более 75% других.

0 голосов
/ 13 июля 2009

Это зависит от того, чего вы хотите достичь. Если цель состоит в том, чтобы найти документы, похожие на данный документ, в наборе документов, вы можете попробовать что-то вроде этого:

В зависимости от документа вы можете сначала извлечь наиболее значимые ключевые слова или ключевые предложения из длинных документов, чтобы извлечь суть текста (Google «извлечение ключевых слов»). Затем вы можете работать с алгоритмами подобия текста (такими как алгоритм k-ближайшего соседа), чтобы получить похожие документы. Ключ заключается в том, чтобы извлечь ключевые части текста.

0 голосов
/ 13 июля 2009

diff инструменты, используемые всеми системами контроля версий, делают это почти точно. Попробуйте воспользоваться одним из них, чтобы определить количество различий (и, следовательно, насколько они похожи).

...