2009-12-15 11 views
13

Hat jemand eine simhash Funktion in Java implementiert?SimHash-Implementierung in Java?

Ich habe schon danach gesucht, konnte aber nichts finden.

+2

+1. Hatte vorher noch nichts davon gehört. Interessanter Thread. – z5h

+0

Ja, sie können sehr nützlich sein - im Gegensatz zu einem normalen Hash, der versucht, einen dünn besetzten Hash-Raum mit einer Reihe ähnlicher Strings zu generieren (dh ungleiche Hashes generiert), versucht ein Simhash ähnliche lokale Hash-Werte für ähnliche Strings zu erzeugen . – Joel

+0

Dieser Link sagt "Hash jedes Feature mit einem normalen 32-Bit-Hash-Algorithmus"; Ich vermute, dass in Java die Benutzung von [String's hashCode] (http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#hashCode%28%29) kein guter Schachzug wäre dafür, da für zwei-Zeichen-Zeichenfolgen, es kocht hinunter zu 's [0] * 31 + s [1]', die nur eine 20-Bit-Zahl ist, und viele Nullen im oberen dieser 20 Bits haben wird wenn die zwei Zeichen ASCII sind. Eine bessere Option könnte etwas sein wie '((lang) s [0]) + 1) * ((lang) ((~ s [0]) & 0xffff)) + 1) -1'. –

Antwort

-2

Nach this page sollten Sie die Entwickler von fragen.

+0

Es ist nur, dass eine Klasse auf dieser Seite namens SimHash.java erwähnt wird, oder implementiert diese Klasse tatsächlich den Simhash-Algorithmus, wie in dem Link in der Frage definiert? – Joel

3

btw. Es sieht so aus, als hätte Google patented den Algorithmus. Wenn Sie in den USA sind, erfolgreich mit Google konkurrieren und kein eigenes Eltern-Portfolio haben, sagen Sie ihnen nicht, dass Sie es verwenden.

Eine Implementierung in C

http://dsrg.mff.cuni.cz/~holub/sw/shash/


[Entfernt nicht mehr relevant BibSonomy text]

+0

Ja, es ist patentiert von G. – Joel

+1

basierend auf der Forschung aus, als ich diesen Beitrag geschrieben habe, gibt es viele Varianten zum Skizzieren/Simhash, die nicht speziell die Charikar-Implementierung sind. Wenn Sie sich die Referenzen im Papier ansehen, können Sie sie jagen. –

1

Hier können Sie den vollständigen Java-Quellcode finden. Es ist sehr einfach. Eine Demo wird ebenfalls zur Verfügung gestellt. http://aneurone.blogspot.com/2012/09/simhash.html

+2

Lone Link ist eine [schlechte Antwort] (http://StackOverflow.com/faq#Deletion), da sie von sich aus bedeutungslos ist und Zielressourcen nicht garantiert werden, in der Zukunft am Leben zu sein. Bitte versuchen Sie mindestens eine Zusammenfassung der Informationen, mit denen Sie verlinken (wie ich es getan habe), einzubeziehen. – j0k