Algorithmus zum erkennen von ähnlichen Dokumenten in einem python-Skript
Schreiben brauche ich ein Modul zum erkennen von ähnlichen Dokumenten. Ich habe gelesen, dass viele Papiere von Fingerabdrücken von Dokumenten-Techniken und andere, aber ich weiß nicht, wie code zu schreiben, oder die Implementierung einer solchen Lösung. Der Algorithmus arbeiten soll für die chinesischen, japanischen, englischen und deutschen Sprache oder sprachunabhängig. Wie kann ich dies erreichen?
- ähnliche Fragen mit anderen Antworten: stackoverflow.com/questions/8897593/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bayes-Filter haben genau diesen Zweck. Das ist die techno-finden Sie in den meisten tools, die spam zu identifizieren.
Beispiel, zu erkennen, dass eine Sprache (aus http://sebsauvage.net/python/snyppets/#bayesian) :
Aber es funktioniert, um zu erkennen, was Sie trainieren es für : technische Texte, Lieder, Witze, etc. So lange, wie Sie genügend material zu lassen, die Werkzeug lernen, was tut Ihr Dokument aussieht.
Wenn es sich um Reine text-Dokumente, oder Sie haben eine Methode zum extrahieren von text aus Dokumenten verwenden, können Sie eine Technik namens bundverdrängung.
Sie erste Berechnung eines eindeutigen hash für jedes Dokument. Wenn diese gleich sind, sind Sie fertig.
Wenn nicht, brechen Sie jedes Dokument in kleinere Abschnitte zu unterteilen. Das sind Ihre " Gürtelrose.'
Sobald Sie die Schindeln, dann können Sie berechnen Identität hashes für die einzelnen Schindel und vergleichen Sie die hashes der Gürtelrose um festzustellen, ob die Dokumente sind eigentlich die gleichen.
Anderen Technik, die Sie verwenden können, ist das erzeugen einer n-Gramm die gesamten Unterlagen und berechnen Sie die Anzahl der ähnlichen n-Gramm in jedes Dokument und erzeugen einer gewichteten Punktzahl für jedes Dokument. Im Grunde ein n-Gramm ist die Aufteilung eines Wortes in kleinere Stücke. 'apple' würde 'a', 'ap', 'app', 'ppl', 'ple', 'le '. (Dies ist technisch eine 3-Gramm) Dieser Ansatz kann sehr rechenintensiv über eine große Anzahl von Dokumenten oder über zwei sehr große Dokumente. Natürlich gemeinsames n-Gramm 'die', ' th 'th' usw. müssen gewichtet werden, um die Punktzahl niedriger.
Ich gebucht habe, über diese auf meinem blog und es gibt einige links in den post zu ein paar anderen Artikeln zum Thema Bundverdrängung - es ist nicht nur für Dachdecker.
Viel Glück!
Können Sie der Nutzung oder nach der letzten Studie difflib aus Python stdlib, um Ihren code schreiben.
Es ist sehr flexibel und hat-algorithmen, um Unterschiede zwischen Listen von strings, und diese Unterschiede. Dann können Sie die
get_close_matches()
zu finden ähnliche Wörter:Es ist nicht die Lösung, aber vielleicht ist es ein Anfang.
Ähnlichkeit kann leicht gefunden werden, ohne Klassifizierung. Versuchen Sie diese O(n2), aber funktioniert gut.
Machen Sie Ihre Frage konkreter. Wenn Sie schon gelesen haben, den Fingerabdruck-Papieren, die Sie bereits wissen, die Prinzipien bei der Arbeit, so beschreibt gängige Ansätze hier wäre nicht von Vorteil. Wenn Sie dies nicht getan haben, sollten Sie auch check-out-Papiere auf "duplicate detection" und verschiedene web-spam-Erkennung Verwandte arbeiten, die kommen an der Stanford University, haben Google, Yahoo und MS in den letzten Jahren.
Haben Sie spezifische Probleme mit der Kodierung der beschriebenen algorithmen?
Schwierigkeiten begonnen?
Das erste, was ich vermutlich tun ist, trennen Sie die tokenisierung (der Prozess der Gewinnung "die Wörter" oder andere sinnvolle Sequenzen) aus dem Duplikat-Erkennungs-Logik, so dass es einfach zu plug-in-verschiedenen-Parser für verschiedene Sprachen und halten Sie die duplicate detection-Stück das gleiche.
Es ist eine ziemlich gute Vortrag über neuronale Netze auf Google Techtalks, dass die Gespräche über die Verwendung von geschichteten Boltzmann-Maschinen zu generieren, die feature-Vektoren für die Dokumente, die dann verwendet werden können, zu Messen-Dokument erreichbar. Das Hauptproblem ist die Voraussetzung, um eine große Probe Dokumentenmappe, die zum trainieren des Netzes zu entdecken, relevante Merkmale.
Wenn Sie bereit sind, um den index der Dateien, die Sie wollen, zu suchen, unter, Xapian ist ein ausgezeichneter Motor und stellt Python-Bindungen:
http://xapian.org/
http://xapian.org/docs/bindings/python/
Wenn Sie versuchen zu erkennen, die Dokumente, reden über das gleiche Thema, könnten Sie versuchen, das sammeln der meisten Häufig verwendeten Wörtern, wegwerfen, die stop-Wörter . Dokumente, die eine ähnliche Verteilung der am häufigsten verwendeten Wörter sind wahrscheinlich reden, die ähnliche Dinge. Sie müssen möglicherweise einige Wortstamm und erweitern das Konzept zu n-Gramm wenn Sie möchten, eine höhere Genauigkeit. Für fortgeschrittene Technik, Blick in machine learning.
Ich denke Jeremy hat trifft den Nagel auf den Kopf - wenn Sie nur wollen, um zu erkennen, wenn Dateien unterschiedlich sind, wird ein hash-Algorithmus wie MD5 oder SHA1 ist ein guter Weg zu gehen.
Linus Torvalds Git source control software verwendet SHA1-hashing gerade auf diese Weise - zu überprüfen, wenn die Dateien verändert wurden.
Vielleicht möchten Sie sich in der DustBuster-Algorithmus, wie beschrieben in dieses Papier.
Aus dem Papier, Sie sind in der Lage zu erkennen, doppelte Seiten sogar ohne Prüfung der Seite Inhalt. Natürlich ist die Prüfung der Inhalte erhöht die Wirksamkeit, aber mit raw-server-logs ist ausreichend für die Methode zu finden, um doppelte Seiten.
Ähnlich wie die Empfehlung der Verwendung von MD5-oder SHA1-hashes, die DustBuster-Methode stützt sich weitgehend auf den Vergleich der Dateigröße, wie es primäre signal. So einfach wie es klingt, ist es eher effektiv für einen ersten pass.