2009-12-15 6 views
13

Quelqu'un at-il rencontré une fonction simhash implémentée en Java?Implémentation SimHash en Java?

Je l'ai déjà recherché, mais je n'ai rien trouvé.

+2

+1. Je n'avais pas entendu parler de ça avant. Fil intéressant. – z5h

+0

Oui, ils peuvent être très utiles - contrairement à un hachage normal qui tente de générer un espace de hachage peu peuplé avec un ensemble de chaînes similaires (c.-à-d. Générer des hachages dissemblables) simhash tente de générer des hachages similaires pour des chaînes similaires. . – Joel

+0

Ce lien indique "hacher chaque fonctionnalité en utilisant un algorithme de hachage 32 bits normal"; Je soupçonne que dans Java, l'utilisation de [String hashCode] (http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#hashCode%28%29) ne serait pas un bon coup pour cela, puisque pour les chaînes à deux caractères, cela revient à 's [0] * 31 + s [1]', qui est seulement un nombre de 20 bits, et aura beaucoup de zéros dans la partie supérieure de ces 20 bits si les deux caractères sont ASCII. Une meilleure option pourrait être quelque chose comme '(((long) s [0]) + 1) * (((long) ((~ s [0]) & 0xffff)) + 1) -1'. –

Répondre

-2

Selon this page, vous devriez demander aux développeurs de BibSonomy.

+0

Est-il juste qu'il y ait une mention d'une classe sur cette page appelée SimHash.java, ou est-ce que cette classe implémente réellement l'algorithme de simhash tel que défini dans le lien dans la question? – Joel

3

btw. Il semble que Google a patented l'algorithme. Si vous êtes aux États-Unis, que vous êtes en concurrence avec Google et que vous n'avez pas de portefeuille parent, ne leur dites pas que vous l'utilisez.

Une implémentation en C

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


[removed plus du texte bibsonomy pertinent]

+0

Ouais, il est breveté par G. – Joel

+1

basé sur la recherche de quand j'ai écrit que post il ya beaucoup de variantes sur croquis/simhash qui ne sont pas spécifiquement la mise en œuvre de charikar. Si vous regardez les références dans le papier, vous pouvez les traquer. –

1

vous pouvez trouver le code source complet de java. C'est très simple. Une démo est également fournie. http://aneurone.blogspot.com/2012/09/simhash.html

+2

Lone link est [considéré comme une mauvaise réponse] (http://stackoverflow.com/faq#deletion) car il n'a aucune signification en lui-même et la ressource cible n'est pas garantie d'être en vie dans le futur. S'il vous plaît essayer d'inclure au moins un résumé de l'information que vous liez (comme je l'ai fait). – j0k

Questions connexes