2012-03-26 10 views
2

Ich versuche, eine lokale Version der Freebase Search API mit ihren Quad-Dumps zu erstellen. Ich frage mich, welchen Algorithmus sie verwenden, um Namen zu finden? Als Beispiel, wenn Sie freebase.com gehen und geben Sie „Wandern“ SieWelchen Algorithmus verwendet Freebase, um nach Namen zu suchen?

  • „Apo Wandern Society“
  • „Wandern“
  • „Wandern Georgia“
  • „Wandern Virginias bekommen nationale Wald“
  • ‚Wanderweg‘

Antwort

7

Wow, viele Vermutungen! Ich hoffe, ich trinke das Wasser nicht zu sehr, indem ich nicht auch rate.

Die Auto-Complete-Box wird im Wesentlichen von Freebase Suggest gespeist, die ihrerseits vom Freebase Search-Dienst versorgt wird. Zeichenfolgen, die durch den Suchdienst zum Vergleichen indiziert werden, umfassen: 1) den Namen, 2) alle Aliase in der gegebenen Sprache, 3) Verknüpfungstext aus den zugehörigen Wikipedia-Artikeln und 4) Kennungen (von Freebase als Schlüssel bezeichnet), die Dinge enthalten wie Wikipedia Artikel Titel (und Weiterleitungen).

Wie die verschiedenen Dinge gewichtet/verstärkt werden, wurde nicht bekannt gegeben, aber Sie können ein Gefühl dafür bekommen, indem Sie damit spielen. Wie Sie anhand der API sehen können, gibt es auch die Möglichkeit, Filterung/Gewichtung nach Typen und anderen Kriterien vorzunehmen, was je nach Kontext zum Tragen kommen kann. Wenn Sie beispielsweise einem Album ein Plattenlabel hinzufügen, erhalten Themen, die als Datensatzlabels eingegeben wurden, eine Anhebung im Vergleich zu Dingen, die dies nicht tun (Sie können jedoch auch andere Arten von Objekten für den Anwendungsfall verwenden) wo für Ihr Zielthema nicht der passende Typ angewendet wurde.

Das gibt Ihnen einen kleinen Einblick, wie ihr Dienst funktioniert, aber warum nicht einen Suchdienst erstellen, der was Sie braucht brauchen, da Sie sowieso von Grund auf neu starten?

BTW, Pre-Google die Metaweb-Suche Implementierung wurde auf Lucene, so dass Sie definitiv schlechter als die Verwendung als Ausgangspunkt verwendet werden könnte. Sie können einige der Details in der mailing list archive

1

wahrscheinlich ist es ein Trie mit lexikographischer Ordnung.

+0

lesen Wird dies effizient sein für Fälle, in denen das Ziel nicht das erste Wort ist? zB: "Apo Hiking Society" wo "Hiking" das 2. Wort ist – stackOverlord

+0

Naja, ich denke, es ist etwas anderes als Lexikographie.Genau wie Google seine eigenen Kriterien für die Bestellung von Ergebnissen hat. Dies scheint eher eine semantische Suche zu sein. –

1

Es gibt eine Reihe von Algorithmen zur Verfügung: Boyer-Moore, Smith-Waterman-Gotoh, Knuth Morriss-Pratt etc. Sie möchten vielleicht auch wie Levenshtein auf Edit Abstand Algorithmen prüfen. Sie müssen herumspielen, um zu sehen, welches Ihrem Zweck am besten entspricht.

Eine Implementierung solcher Algorithmen ist die Simmetrics Bibliothek von der University of Sheffield.

2

Wahrscheinlich verwenden sie einen invertierten Index über ausgewählte Felder, wie den englischen Namen, Aliase und das Wikipedia-Snippet. In Ihrer Anwendung können Sie das mit etwas wie Lucene erreichen.

Für den Algorithmus Seite finde ich folgendes Papier einen guten Überblick

Zobel and Moffat (2006): "Inverted Files for Text Search Engines".