2009-07-12 3 views
1

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

Мой первый вопрос: что такое? Число слов, которые соответствуют, количество последовательных слов, которые соответствуют?

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

я видел ранее вопрос на Algorithms or libraries for textual analysis, specifically: dominant words, phrases across text, and collection of text

однако, кажется, несколько иной, чем то, что я пытаюсь сделать.

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

+0

Я бы сказал, что подход сильно зависит от типа документа (руководство, кандидатская диссертация, роман?) – Treb

+0

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

+0

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

ответ

1

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

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

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

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

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

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

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

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

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

0

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

0

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

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

1

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

1

Один из подходов, который вы можете использовать, называется 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%.

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

Смежные вопросы