2013-11-04 2 views
13

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.)

+0

Wie viele verschiedene Produkte (Ball Park Schätzung) müssen Sie verwalten? – Blacksad

+0

Es ist ein Supermarkt, also eine ziemlich große Anzahl von Artikeln - ich würde auf Zehntausende schätzen? – victorhooi

+0

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

Antwort

5

Würden Sie eine der oben genannten Techniken verwenden, oder würden Sie eine andere Technik verwenden?

Wenn ich das wirklich machen würde, würde ich nicht viel maschinelles lernen. Ich bin mir sicher, dass die meisten großen Unternehmen eine Datenbank mit Marken- und Produktnamen haben, um die Dinge relativ einfach abzugleichen. Einige Datenhygiene könnte erforderlich sein - aber es ist nicht viel von einem ML-Problem.

Wenn Sie diese Datenbank nicht haben, würde ich sagen, gehen Sie einfach. Wandle alles in einen Feature-Vektor um und suche den nächsten Nachbarn. Verwenden Sie diese Option, um ein Tool zu erstellen, mit dem Sie eine Datenbank erstellen können. IE: Sie markieren die erste "A2 Vollmilch 2L" selbst als "Milch" und sehen dann, ob ihre nächsten Nachbarn Milch sind. Geben Sie sich einen Weg, um schnell "Ja" zu markieren und "Bedarf zu überprüfen", oder eine ähnliche Option.

Für einfache Daten wie Sie vorgeschlagen, wo es 90% der Zeit funktioniert - Sie sollten in der Lage sein, durch die Daten mit Leichtigkeit zu bekommen. Ich habe es ähnlich gemacht, mehrere tausend Dokumente an einem Tag zu beschriften.

Sobald Sie Ihre eigene Datenbank haben, sollte die Lösung dieser Probleme ziemlich einfach sein. Sie können den Code wiederverwenden, um Ihre Datenbank für die Verarbeitung "ungesehener" Daten zu erstellen.