similarity

___ answer1958026 ___

Ich denke, Sie können nicht vermeiden, das Array durchzulaufen, da die Funktion levenstein () nur Strings und kein Array als Eingabe akzeptiert.

Sie können etwas tun wie:

%Vor%     
___ qstntxt ___

Ich habe 5000, manchmal mehr, Straßenadressstrings in einem Array. Ich möchte sie alle mit Levenshtein vergleichen, um ähnliche Übereinstimmungen zu finden. Wie kann ich dies tun, ohne alle 5000 zu durchlaufen und sie direkt mit jedem anderen 4999 zu vergleichen?

Bearbeiten: Ich bin auch an alternativen Methoden interessiert, wenn jemand Vorschläge hat. Das übergeordnete Ziel besteht darin, ähnliche Einträge zu finden (und Dubletten zu eliminieren), basierend auf von Benutzern eingegebenen Straßenadressen.

    
___ qstnhdr ___ Vergleiche 5000 Strings mit PHP Levenshtein ___ answer1958099 ___

Ich denke, eine bessere Möglichkeit, ähnliche Adressen zu gruppieren, wäre:

  1. Erstellen Sie eine Datenbank mit zwei Tabellen - eine für die Adresse (und eine ID), eine für die Soundexte von Wörtern oder Literalzahlen in der Adresse (mit dem Fremdschlüssel der Adressentabelle)

  2. Geben Sie in Großbuchstaben die Adresse ein, ersetzen Sie alles andere als [A-Z] oder [0-9] durch ein Leerzeichen

  3. Teilen Sie die Adresse nach dem Leerzeichen, berechnen Sie den soundex jedes 'Wortes', lassen Sie alles mit nur Ziffern unverändert und speichern Sie es in der Soundexes-Tabelle mit dem Fremdschlüssel der Adresse, mit der Sie begonnen haben

  4. finde für jede Adresse (mit id $ target) die ähnlichsten Adressen:

    %Vor%
  5. Berechnen Sie den Unterschied zwischen Ihrer Quelladresse und den letzten wenigen Werten, die von der Abfrage zurückgegeben werden.

(das Ausführen von Operationen auf großen Arrays ist in Datenbanken oft schneller)

    
___ answer1958029 ___

Sie könnten sie basierend auf Soundexten gruppieren und dann die Vergleiche auf die nächsten N Fälle beschränken ...

%Vor%

Dann iteriere durch die Schlüssel von $ pashed.

C.

    
___ answer1958028 ___

Aufgrund der Natur des Levenshtein-Algorithmus (insbesondere die Tatsache, dass es ein Vergleich zwischen zwei Strings ist), kann ich nicht sehen, wie das möglich ist.

Sie könnten natürlich die Anzahl der Vergleiche reduzieren, indem Sie zuerst einige grundlegende Anforderungen erfüllen, aber dies gehört nicht zu dem, was Sie fragen.

Als (möglicherweise irrelevante) Option könnten Sie immer etwas wie %code% verwenden, mit dem Sie die Zeichenfolgenwerte vorberechnen könnten. (Sie können es auch direkt in MySQL verwenden, glaube ich.)

    
___ tag123php ___ PHP ist eine weit verbreitete, dynamische, objektorientierte und interpretierte Skriptsprache, die primär für die serverseitige Webentwicklung entwickelt wurde. ___ answer1958047 ___

Wenn Sie alle ähnlichen Werte finden möchten, müssen Sie alle Elemente mit allen anderen vergleichen. Aber die Auswahl der richtigen Array-Funktionen wird die Dinge erheblich beschleunigen. Hier ist ein kurzes Beispiel (das Ergebnis-Array könnte besser gewesen sein):

%Vor%     
___ tag123database ___ Eine Datenbank ist eine organisierte Sammlung von Daten. Es ist die Sammlung von Schemas, Tabellen, Abfragen, Berichten, Ansichten und anderen Objekten. Die Daten sind typischerweise so organisiert, dass sie Aspekte der Realität so modellieren, dass sie Prozesse unterstützen, die Informationen benötigen. Verwenden Sie dieses Tag, wenn Sie Fragen zum Entwerfen einer Datenbank haben. Wenn es sich um ein bestimmtes Datenbankverwaltungssystem (z. B. MySQL) handelt, verwenden Sie stattdessen dieses Tag. ___ answer1958032 ___

Wenn Sie ein Problem haben, sehe ich keinen anderen Weg, als jede Adresse mit jeder anderen Adresse zu vergleichen, wenn Sie Lehvenstein distance .

Zuallererst sollten Sie die Adressaten normalisieren, Abkürzungen loswerden.

  • Ave - & gt; Allee
  • Rd. - & gt; Straße

Sie könnten eine feste maximale Lehvenstein-Distanz ( N ) für ähnliche Adressen haben.

Wenn ja, könnten Sie den Lehvenstein-Algorithmus abbrechen, wenn Sie sicher sind, dass die Bearbeitungsentfernung für das aktuelle Adresspaar größer als N ist. Dazu müssen Sie eine benutzerdefinierte Version des Lehvenstein-Algorithmus schreiben. Dies wird den Algorithmus ein wenig schneller machen.

Es gibt auch einige verwandte triviale Optimierungen. Zum Beispiel: wenn Adresse A 10 Zeichen lang ist und Adresse B 20 Zeichen lang ist und Sie Adressen mit Lehvenstein Abstand von weniger als 8 als ähnlich betrachten. Sie können Längen von Adressen sehen und sofort entscheiden, dass sie nicht ähnlich sind.

    
___ answer6394540 ___
%Vor%     
___ answer1958055 ___

Sie können einen bk-tree verwenden, um die Suche / den Vergleich zu beschleunigen.

Ссылка sagt:

Nun können wir eine besonders nützliche Beobachtung über die Levenshtein-Distanz machen: Sie bildet einen metrischen Raum.
[...]
Nehmen wir für einen Moment, wo wir zwei Parameter, Abfrage der Zeichenfolge wir bei unserer Suche verwenden, und n der maximale Abstand kann eine Zeichenfolge aus Abfrage und noch zurückgegeben werden. Nehmen wir an, wir nehmen eine willkürliche Zeichenkette, testen und vergleichen sie mit der Abfrage. Nennen Sie die resultierende Entfernung d. Weil wir die Dreiecksungleichung hält wissen, sind alle unsere Ergebnisse müssen höchstens Abstand d haben + n und mindestens Abstand d-n-Test.
[...]
Tests zeigen, dass die Suche mit einem Abstand von 1 Abfragen nicht mehr als 5-8% des Baums und die Suche mit zwei Fehler Abfragen nicht mehr als 17-25% des Baumes - eine erhebliche Verbesserung gegenüber der Überprüfung jedes Knotens!

edit: Aber das hilft dir nicht mit deinem ("12 Bird Road, Apt 6" und "12 Bird Rd. # 6") Problem. Nur mit deinem Brute-Force-m * n-Vergleich.

    
___ tag123ähnlichkeit ___ Ähnlichkeitsmaße quantifizieren, wie viel gleichartige Objekte (z. B. Dokumente, Merkmalsvektoren) sind. ___ tag123streetaddress ___ Die Adresse bezieht sich auf Postanschriften oder Lieferorte, die für die physische Zustellung von Post oder Waren verwendet werden können. ___ tag123levenshteindistance ___ Eine Metrik zur Messung der Differenz zwischen zwei Sequenzen. ___
1
Antwort

Überprüfen Sie schnell die große Datenbank auf Editierentfernungsähnlichkeit

Ich habe eine Datenbank von 350,000 Strings mit einer durchschnittlichen Länge von etwa 500 . Die Zeichenfolgen bestehen nicht aus Wörtern, sie sind eine im Wesentlichen zufällige Zusammenstellung von Zeichen. Ich muss sicherstellen, das...
16.02.2018, 02:55
3
Antworten

Bildvergleich mit php + gd

Was ist der beste Ansatz, um zwei Bilder mit PHP und der Graphic Draw (GD) Bibliothek zu vergleichen? >? Dies ist das Szenario: Alternativtext http://img262.imageshack.us/img262/4849/imagecomparison.jpg Ich habe ein Bild, und ich mö...
10.01.2010, 14:03
0
Antworten

Verschiedene Ähnlichkeiten für ein Feld in solr

Ich habe eine Ähnlichkeit implementiert, die auf der DefaultSimilarity basiert und die Berechnung für das IDF ändert. Um mit dieser CustomSimilarity und der DefaultSimilarity aus unserer Anwendung zu arbeiten, habe ich ein Feld mit dem Standard...
24.11.2015, 15:40
2
Antworten

Gibt es eine Implementierung der Idee, die in "Detecting NearDuplicates for Web Crawling" beschrieben wird?

Das Papier: Ссылка Ich frage mich nur, ob es irgendwelche Implementierungen von Kapitel 3 dieses Artikels gibt. Ich meine Abfrage zwischen großen Datasets, nicht nur die Simhash (es ist einfach Simhash-Implementierungen zu finden). Danke...
01.11.2010, 15:06
7
Antworten

Wie ermittle ich den längsten ähnlichen Teil mehrerer Strings?

Wie im Titel beschrieben, versuche ich einen Weg zu finden, um den längsten Teil der Ähnlichkeit zwischen mehreren Strings programmatisch zu bestimmen. Beispiel: file:///home/gms8994/Music/t.A.T.u./ file:///home/gms8994/Music/nina%2...
01.02.2009, 01:12
1
Antwort

Welche FFT-Deskriptoren sollten als Feature zur Implementierung eines Klassifikations- oder Clustering-Algorithmus verwendet werden?

Ich habe einige geografische Trajektorien gesammelt, um sie zu analysieren, und ich habe das Histogramm von Daten in räumlicher und zeitlicher Dimension berechnet, was ein zeitdomänenbasiertes Merkmal für jedes räumliche Element ergab. Ich möchte...
18.12.2014, 12:19
3
Antworten

vergleichen kurze Strings in verschiedenen Sprachen für ähnlichen Sound - ist Soundex die Antwort?

Wie könnte ich eine Klangähnlichkeit "Bewertung" für eine in einer Sprache geschriebene Zeichenfolge mit einer anderen Zeichenfolge in einer anderen Sprache erhalten: d. h. einen Algorithmus, der das identifiziert " David Letterman " und " דד...
26.05.2011, 15:18
3
Antworten

Tipps zum Anzeigen von Ähnlichkeiten in Dateien

In einem Projekt habe ich einige CSS-Dateien gefunden, die "riechen", als wären darin kopierte Regeln eingefügt. Ich frage mich, mit welchen Strategien Sie Copy-Paste-Dateien in Dateien erkennen. Aus reiner Neugier möchte ich Ihre Tipps un...
08.10.2009, 09:22
2
Antworten

Interpretieren negativer Word2Vec-Ähnlichkeit von Gensim

z. Wir trainieren ein Word2vec-Modell mit gensim : %Vor% Und wenn wir die Ähnlichkeit zwischen Wörtern abfragen, finden wir negative Ähnlichkeitswerte: %Vor% Wie interpretieren wir die negativen Bewertungen? Wenn es eine Kosinusäh...
22.02.2017, 03:00
1
Antwort

Algorithmus zum Finden ähnlicher Bilder mit einem Index

Es gibt einige überraschend gute Bildvergleichswerkzeuge, die ein ähnliches Bild finden, auch wenn es nicht genau das gleiche ist (z. B. Änderung der Größe, Hintergrundbild, Helligkeit / Kontrast). Ich habe hier einige Beispielanwendungen: U...
03.08.2014, 14:22