Joerg Rossdeutscher schrieb:
Ich brauch mal ein wenig Denkhilfe zu einem Ansatz.
Ich möchte zu einem Font möglichst schnell ähnlich aussehende andere Fonts finden. Zu diesem Zweck nehme ich mir einen Buchstaben, erstelle mit ImageMagick ein Bild von diesem Buchstaben und stauche das alles ein wenig zurecht. Von diesem Bild erstelle ich mir ein "Fingerprint", welches bestimmte Eigenschaften numerisch erfasst.
So ein Fingerprint sieht ungefähr so aus:
50-50-50-50-50-50-50
Ein Font, der sehr ähnlich aussieht, und sich nur ein klein wenig unterscheidet, könnte diesen Fingerprint haben:
50-50-50-51-49-50-50
Also einmal +1 (wegen 51) und einmal -1 (wegen 49), macht zusammen eine Differenz von "2".
Zusätzlich muß ich sagen, daß der Fingerprint nicht aus 7 Zahlen besteht, wie eben behauptet, sondern aus 64, mit Werten von 00 bis 99.
So. Und jetzt möchste ich das ganze über MySQL suchen.
Gibt es eine Möglichkeit, sowas in MySQL zu realisieren, ohne - den Fingerprint in 64 Felder ... - ... oder 64 Datensätze aufzusplitten - und ohne ALLE Werte auszulesen und die Nachverarbeitung in perl zu machen?
Also, sprich:
SELECT * FROM fingerprints ORDER DESC komische_formel
....und ich muß mir nur noch die besten 10 Treffer abholen?
SELECT SIMILAR_FONT, SIMILARITY FROM SIMILAR_FONTS WHERE FONT = ? AND SIMILARITY > 0.75 ORDER BY SIMILARITY DESC, sprich, zu jedem Font eine Liste ähnlicher Fonts (so etwas wie eine Fontfamilie) zu hinterlegen, wäre vielleicht ein einfacherer Ansatz. BTW, falls Du eine sinnvolle Kodierung hast, könntest Du die (Hamming-)Abstände je zweier Fonts programmatisch berechnen und das Ergebnis zwecks späterer Verwendung in einer Tabelle speichern. Speicheraufwand: N * (N - 1) / 2, wobei N die Anzahl der Fonts ist. -- Gruß Alex