Ich habe eine SQL Server-Tabelle von Produkten, und jedes Produkt hat eine Beschreibung, die öffentlich auf unserer Website verfügbar ist. Ich möchte verhindern oder zumindest unsere Benutzer warnen, wenn eine Beschreibung der Beschreibung eines anderen Produkts zu ähnlich ist. Die Länge der einzelnen Produktbeschreibungen kann stark variieren.SQL - Ähnlichkeit zwischen zwei Strings unterschiedlicher Länge
würde ich Abfrage für Produkte mit Beschreibungen wie die doppelte/ähnliche Absätze/Textblöcke untereinander umfassen. dh String A hat eine Reihe von einzigartigen Inhalten, sondern teilt mir einen ähnlichen/identischen Absatz w/string B. Allerdings bin ich mir nicht sicher, welche Ähnlichkeit Algorithmus am besten zu verwenden:
Die Levenshtein distance und Jaro-Winler distance Algorithmen erscheinen nur mit kurzen Saiten gut funktionieren.
Ich bin mir nicht sicher, dass die longest common subsequence algorithm große Unterschiede sehr gut berücksichtigt. d. h. es scheint einen möglichen Abstand zwischen zwei Zeichen zu ignorieren, wobei eine ähnliche Kombinationssequenz gefunden wird.
Fuzzy hashing Art klingt, was ich suche, aber ich bin nicht nur w/feinen Unterschiede für Duplicate Content suchen. Ich bin auch für Duplicate Content suchen w/feinen Unterschiede in einem einzigartigen Textblock injiziert. Und ich hätte keine Ahnung, wie man Fuzzy-Hashes in SQL implementiert. SOUNDEX() und DIFFERENCE() scheinen Fuzzy-Hashing zu verwenden, sind aber für meinen Anwendungsfall ziemlich ungenau.
Im Idealfall würde die Ähnlichkeit SQL-Funktion schnell sein, aber ich konnte in einer anderen Tabelle gecached Ähnlichkeitswerte speichern und einen Job einplanen gelegentlich zu aktualisieren.
Was ist die beste Algorithmus/SQL (oder CLR-Integration) Implementierung dies zu erreichen?
Warum beschränken Sie sich auf die Implementierung in SQL? –
Nun, ich nehme an, dass es nicht in SQL sein muss. Ich gehe jedoch davon aus, dass eine reine SQL-Implementierung leistungsfähiger sein wird. Ich könnte möglicherweise eine .NET CLR-Integration wie [diese Ähnlichkeitsbibliothek] (http://blog.hoegaerden.be/2011/02/05/finding-similar-strings-with-fuzzy-logic-functions-built-into- mds /) ... aber ich habe keine Erfahrung mit SQL Server CLR-Integration und ich würde immer noch nicht wissen, welchen Algorithmus zu verwenden. –
Eine Sache, die Sie versuchen könnten, ist, die Zeichenfolge zu nehmen und nur bestimmte Buchstaben zu berücksichtigen, dann Levenshtein diese Zeichenfolgen.Nehmen Sie zum Beispiel einen Text wie "Lorem ipsum dolor sit amet" und betrachten Sie nur Beispiele für e und t. Die resultierende Zeichenfolge würde etet, die Sie Levenshtein gegen eine andere gefilterte Zeichenfolge könnte. Natürlich braucht man etwas Tuning, aber hoffentlich kommt man auf die Idee. – kevmo314