2009-07-10 8 views
0

So habe ich eine Spalte in einer Tabelle, die eine Zeichenfolge Werte enthält (Schlüsselwörter aus einem Tool von Drittanbietern befüllt). Ich arbeite an einem automatisierten Tool, um Cluster ähnlicher Werte zu identifizieren, die wahrscheinlich auf einen einzelnen Wert normalisiert werden könnten. Zum Beispiel "Feuerwehrmänner"/"Feuerwehrmann", "Isotop"/"Asotope" oder "Hunde"/"Eckzähne".Performante Techniken zum Finden ähnlicher Werte in SQL?

Ein Ansatz, der den Levenshtein-Abstand berechnet, scheint ideal zu sein, abgesehen von der Tatsache, dass er zu viele String-Manipulationen/Vergleiche beinhaltet und SQL-Indizes wahrscheinlich schlecht nutzen würde.

Ich habe inkrementelle Gruppierung von den linken (X) Zeichen der Spalte berücksichtigt, was eine nicht so schlechte Möglichkeit ist, den Index zu maximieren, aber dieser Ansatz ist wirklich nur wirksam beim Finden von Wörtern mit Unterschieden Ende des Wortes.

Hat jemand gute Ideen, um dieses Problem in SQL effizient zu lösen?

Hinweis: Ich weiß, diese Frage ist sehr ähnlich (Finding how similar two strings are), aber die Unterscheidung hier ist die Notwendigkeit, dies effizient in SQL zu tun.

Antwort

1

Wenn Sie SQL Server verwenden, können Sie die SOUNDEX() -Funktion, wie in Blick in Verwendung:

... 
where 
    SOUNDEX("searchterm") = SOUNDEX(searchvaluefield) 

es soll Phonetic Matching auf den Saiten ...

einige ungerade tun Beispiele ... so scheint es Ihnen Plurale von immer anhängen den Plural Text auf beiden Seiten fangen konnten, da das gleiche mehr ‚s die klingen ... :-)

select soundex('Canine'), soundex('Canines') 
go 

----- ----- 
C550 C552 

1 Row(s) affected 


select soundex('Canine'), soundex('Caynyn') 
go 

----- ----- 
C550 C550 

1 Row(s) affected 


select soundex('Canines'), soundex('Caniness') 
go 

----- ----- 
C552 C552 

1 Row(s) affected 
+0

Irgendwelche Erfahrungen darüber, wie gut Soundex mehrere Versionen von Wörtern löst? Klingt nach "Feuerwehrmännern"/"Feuerwehrmann", aber vielleicht nicht nach "Hunde". – JohnFx

2

Sie erwähnen nicht, welche Datenbank Sie verwenden, aber wenn es T-SQL ist, könnten Sie den SOUNDEX Wert und difference verwenden.

+0

Derzeit verwende ich T-SQL, aber ich habe es nicht in der Hoffnung erwähnt, eine allgemeinere Antworten zu bekommen, die in mehreren Datenbankplattformen funktionieren könnten. Der Soundex/Differenz-Ansatz sieht jedoch vielversprechend aus. Ich werde es drehen. – JohnFx

Verwandte Themen