2009-07-12 7 views
1

Ich habe ein Projekt, in dem ich Dokumente mit mehreren Kapiteln mit einem zweiten Dokument vergleichen muss, um deren Ähnlichkeit festzustellen. Das Problem ist, dass ich keine Ahnung habe, wie ich das machen soll, welche Ansätze existieren oder ob es Bibliotheken gibt.Textanalyse von großen Dokumenten

Meine erste Frage ist ... was ist ähnlich? Die Anzahl der Wörter, die übereinstimmen, die Anzahl der aufeinander folgenden Wörter, die übereinstimmen?

Ich konnte sehen, einen Parser schreiben, der jedes Dokument in ein Array mit dem Wort und der Position und vergleicht sie dann.

sah ich die frühere Frage an Algorithms or libraries for textual analysis, specifically: dominant words, phrases across text, and collection of text

es jedoch etwas anders scheint als das, was ich zu tun versucht.

Alle Optionen oder Hinweise, die Leute haben könnten, wären toll!

+0

Ich würde sagen, der Ansatz ist stark abhängig von der Art des Dokuments (Handbuch, Doktorarbeit, Roman?) – Treb

+0

"Was ist ähnlich" ist die Schlüsselfrage und wird von wer wird Ihre Ergebnisse und zu welchem ​​Zweck verwendet werden . Sie sollten diesen Aspekt näher ausführen. – RBarryYoung

+0

Ein wenig mehr Hintergrund, sorry für die Verwirrung. Wir möchten Dokumente vergleichen, die wir von Leuten erhalten haben, mit einer Bibliothek urheberrechtlich geschützter Dokumente, die aus 100 Seiten bestehen kann. Manchmal wird jedoch Müll eingereicht, und manchmal ist dies gültig. Wir möchten identifizieren können, wo es signifikante Übereinstimmungen gibt. –

Antwort

1

"Was ist ähnlich" können wir Ihnen nicht sagen, dass dies eine Aussage über eine grundlegende Anforderung Ihres Projekts ist. Wenn Sie das nicht wissen, ist es ein bisschen Zeit darüber nachzudenken, wie es geht.

Es kann hilfreich sein, die Frage "warum" zu stellen. Wofür wird das Ähnlichkeitsmaß verwendet?

Wenn es zum Beispiel darum geht, Plagiate zu erkennen, dann ist es wahrscheinlich nicht hilfreich zu erkennen, dass zwei Aufsätze ähnlich sind, weil sie über dieselben Themen sprechen und ähnliche Verweise geben - die gesamte Klasse würde ähnliche Aufsätze einreichen! Also suchen Sie vielleicht nach genau passenden Sätzen und Phrasen.

Wenn Sie stattdessen versuchen, einen Katalog für einige Dokumente zu erstellen, suchen Sie vielleicht nach Schlüsselwörtern. Zwei Dokumente sind ähnlich, wenn sie das gleiche Vokabular von Wörtern über eine bestimmte Länge oder ähnliche Eigennamen verwenden.

Diese beiden Beispiele sollen zeigen, dass es schwierig ist, viel zu geben, bis wir verstehen, was mit ähnlich gemeint ist.

Aber hier ist ein möglicher Ansatz. Sie könnten zwei wichtige Dinge schreiben: einen Extraktor und einen Komparator.

Die Aufgabe des Extraktors ist es, durch das Dokument zu gehen und die Menge (oder Liste, muss es bestellt werden?) Von Stücken, die die Essenz des Dokuments sind, zu erzeugen: das können einzelne Wörter oder Sätze und Sätze sein.

Die Aufgabe des Komparators ist es, die Ähnlichkeit von zwei Dokumenten "Essenz" zu bewerten.

Einfaches Beispiel: extrahieren Sie die eindeutige Liste von Wörtern mit 8 Buchstaben oder mehr aus dem Dokument. Vergleich könnte dann zwei Dokumente sind ähnlich, wenn der Satz mehr als 75% der anderen enthält.

0

Diff-Tools, die von allen Quellcodeverwaltungssystemen verwendet werden, tun dies fast genau. Probieren Sie eine dieser Methoden aus, um die Anzahl der Unterschiede zu messen (und damit, wie ähnlich sie sind).

0

Es hängt davon ab, was Sie erreichen möchten. Wenn das Ziel darin besteht, Dokumente zu finden, die einem bestimmten Dokument in einer Reihe von Dokumenten ähneln, könnten Sie Folgendes versuchen:

Je nach Dokument können Sie zuerst die aussagekräftigsten Schlüsselwörter oder Schlüsselsätze aus den langen Dokumenten extrahieren um die Essenz des Textes zu extrahieren (Google "Keyword Extraction").Dann können Sie mit Textähnlichkeitsalgorithmen (wie k-nearest neighbour algorithm) arbeiten, um ähnliche Dokumente herauszufischen. Der Schlüssel besteht darin, die wichtigsten Teile des Textes zu extrahieren.

1

Ein einfacher Ansatz besteht darin, den Dokumenttext miteinander zu verketten und dann zu komprimieren. Das Komprimierungsverhältnis kann Ihnen sagen, wie viel Ähnlichkeit Sie haben.

1

Ein Ansatz, den Sie verwenden können, heißt Shingling. Der Prozess umfasst die Tokenisierung aller Wörter in beiden Dokumenten, z.

Dann nehmen Sie den Satz von zusammenhängenden Untersequenzen der Fensterlänge n (erinnern Sie sich an keine Duplikate in einem Satz).

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"}} 

Dann ist die Ähnlichkeit die Kardinalität der Kreuzung geteilt durch die Kardinalität der Union. Also für unser Beispiel 3/7 = 43% ähnlich.

Eine effiziente Approximation kann durch zufällige Auswahl von Skizzen (eine Teilmenge aus dem Satz von Schindeln) erfolgen.