Ich versuche, ein einfaches Programm zu schreiben, um Preise für Produkte von verschiedenen Lieferanten zu vergleichen. Verschiedene Lieferanten können das gleiche Produkt verschiedene Dinge nennen.Vergleichen und zusammenpassen Produktnamen von verschiedenen Geschäften/Lieferanten
Zum Beispiel beziehen sich die folgenden drei Saiten auf das gleiche Produkt:
- A2 Vollmilch Flasche 2l
- A2 Milch Vollmilch 2L
- A2 Vollmilch 2L
Oder die folgenden zwei Saiten sind das gleiche Produkt:
- Ambi Pur Lufterfrischer Auto Reise 8mL. Frischer Vanille Blumenduft. - 1 jeweils
- Ambi Pur Lufterfrischer Voyage Primary 8ml
Außerdem - einige Produkte sind nicht gleich, aber ähnlich sind (zum Beispiel kann Vollmilch 2L Milch verschiedene ähnliche Produkte umfassen.)
Die einzigen Informationen, die ich über jedes Produkt habe, sind der Titel und ein Preis.
Welche Techniken werden derzeit empfohlen, um Produktstrings wie diese zusammenzuführen?
Von meinem googeln und andere SO Threads zu lesen, fand ich:
- Einige Techniken Bayes-Filter empfohlen.
- Einige empfehlen die Feature-Extraktion für alle Produkt-Strings. Sie können also Dinge wie Marken (z. B. "A2"), Produkt ("Milch") und Kapazität ("2L") aus den Produkten extrahieren, dann Abstandsvektoren zwischen Produkten erstellen und so etwas wie einen binären Klassifizierer verwenden, um Produkte abzustimmen wurde erwähnt). Ich bin mir jedoch nicht sicher, wie ich dies ohne eine ganze Reihe von Regeln oder Regex erreichen könnte. Ich gehe davon aus, dass es wahrscheinlich intelligentere unüberwachte Lernmethoden gibt, um dieses Problem anzugehen? Price könnte wahrscheinlich ein weiteres "Feature" sein, mit dem wir auch den Distanzvektor berechnen könnten.
- Einige Leute empfahlen, neuronale Netze zu verwenden, aber ich konnte hier nicht viel in Bezug auf konkreten Code oder Beispiele finden.
- Andere wurden empfohlen, Stringähnlichkeitsalgorithmen wie die Levenshtein-Distanz oder die Jaro-Winkler-Distanz zu verwenden.
Würden Sie eine der oben genannten Techniken verwenden, oder würden Sie eine andere Technik verwenden?
Weiß jemand auch irgendeinen Beispielcode oder sogar Bibliotheken für diese Art von Problem? Ich konnte keine finden.
(Zum Beispiel sah ich, dass einige Leute Leistungsprobleme mit der Berechnung der Jaro-Winkler-Distanz für große Datenmengen hatten. Ich hoffte, dass es eine verteilte Implementierung des Algorithmus geben würde (zB mit Mahout), aber wasn Ich kann nichts Konkretes finden.)
Wie viele verschiedene Produkte (Ball Park Schätzung) müssen Sie verwalten? – Blacksad
Es ist ein Supermarkt, also eine ziemlich große Anzahl von Artikeln - ich würde auf Zehntausende schätzen? – victorhooi
Nun, alle Vorschläge sind gut, aber überwacht. Und das überwachte Lernen auf Zehntausenden von Klassen wird die Hölle sein ... Ich kann mir jedoch keinen unüberwachten Ansatz vorstellen. – Blacksad