22 Stimmen

Wie findet man die Ähnlichkeit zwischen mySQL-Zeilen?

Ich versuche, ein Skript zu erstellen, das einen passenden Prozentsatz zwischen meinen Tabellenzeilen findet. Zum Beispiel meine mySQL-Datenbank in der Tabelle Produkte enthält das Feld Name (indiziert, FULLTEXT) mit Werten wie

LG 50PK350 PLASMA TV 50" Plasma TV Full HD 600Hz 
LG TV 50PK350 PLASMA 50"
LG S24AW 24000 BTU
Aircondition LG S24AW 24000 BTU Inverter

Wie Sie sehen können, haben sie alle dasselbe Schlüsselwort. Aber der 1. Name und der 2. Name sind sich ähnlicher. Außerdem haben der 3. und 4. Name mehr ähnliche Schlüsselwörter als der 1. und 2.

Meine mySQL-DB enthält Tausende von Produktnamen. Ich möchte die Namen finden, die mehr als einen bestimmten Prozentsatz (sagen wir 60 %) an Ähnlichkeit aufweisen.

Zum Beispiel werden, wie gesagt, 1. und 2. (und jeder andere Name), die zu mehr als 60 % übereinstimmen, in einem gruppenähnlichen Format angezeigt, damit ich weiß, dass diese Produkte ähnlich sind. 3. und 4. und alle anderen, die zu mehr als 60 % übereinstimmen, werden in einer anderen Gruppe wiedergegeben, um mir mitzuteilen, dass diese Produkte übereinstimmen.

Wenn es möglich ist, wäre es toll, die Schlüsselwörter, die alle gruppierten übereinstimmenden Namen erfüllen, auszugeben. Zum Beispiel LG S24AW 24000 BTU ist das Schlüsselwort, das im 3. und 4. Namen enthalten ist.

Am Ende werde ich eine Liste mit all diesen Stichwörtern erstellen.

Was ich jetzt habe, ist die folgende Abfrage (wie Jitamaro vorgeschlagen)

Select t1.name, t2.name From products t1, products t2

die ein neues Namensfeld neben allen anderen Namen erzeugt. Entschuldigen Sie, dass ich nicht weiß, wie ich es richtig erklären soll, aber das ist, was es tut: (Die echten Werte sind Produktnamen wie oben)

Vor der Abfrage

-name-
A
B
C
D
E

Nach der Abfrage

-name- -name-
A        A
B        A
C        A
D        A
E        A
A        B
B        B
C        B
D        B
E        B
.
.
.

Gibt es eine Möglichkeit, entweder mit mySQL oder PHP, die mir die passenden Namen findet und die Schlüsselwörter extrahiert, wie ich es oben beschrieben habe? Bitte teilen Sie Code-Beispiele.

Vielen Dank an die Gemeinschaft.

-1voto

Chris Hasiński Punkte 2766

Hier eine weitere Idee (aber ich stimme für levenshtein() ) :

Erstellen Sie eine temporäre Tabelle mit allen in Namen verwendeten Wörtern und deren Häufigkeit.

Wählen Sie eine Reihe von Ergebnissen aus (die populärsten Wörter sind wahrscheinlich Wörter wie LCD oder LED, die eindeutigsten Wörter könnten gut sein, sie könnten tatsächliche Produktnamen sein).

Schlagen Sie für jedes der Ergebniswörter entweder:

-1voto

Justin Ethier Punkte 126797

Sie können verwenden LIKE um ähnliche Produktnamen in der Tabelle zu finden. Zum Beispiel:

SELECT * FROM product WHERE product_name LIKE 'LG%';

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X