2016-05-16 23 views
0

Ich schreibe einen Textparser, der Features aus Produktbeschreibungen extrahieren soll.So extrahieren Sie Features aus reinem Text?

ZB:

text = "Canon EOS 7D Mark II Digital SLR Camera with 18-135mm IS STM Lens" 
features = extract(text) 
print features 

Brand: Canon 
Model: EOS 7D 
.... 

So wie ich tun dies durch Trainieren des Systems mit strukturierten Daten und mit einem invertierten Index kommen, die einen Begriff zu einem Merkmal zuordnen. Das funktioniert meistens gut.

Wenn der Text Messungen wie 50ml enthält, oder 2kg, wird der invertierte Index sagt 2kg -> Size und 50ml -> Size für zB.

Das Problem hier ist, dass, wenn ich einen Wert, den ich nicht zuvor gesehen habe, wie 13ml, wird es nicht verarbeitet werden. Aber da die Muster zu einer Größe passen, könnten wir sie als Größe kennzeichnen.

Ich dachte daran, dieses Problem zu lösen, indem ich die Token, die ich aus dem Text bekomme, vorbearbeite und nach Mustern suche, die ich kenne. Wenn also neue Muster identifiziert werden, muss dies der Vorverarbeitung hinzugefügt werden.

Ich frage mich, ist dies der beste Weg, um das zu tun? Oder gibt es einen besseren Weg, dies zu tun?

Antwort

1

Das uralte Problem der unsichtbaren Fälle. Du könntest deinen Schaber trainieren, um irgendwelche zahlenähnlichen Zeichen vor bestimmten Suffixen (ml, kg, usw.) zu nehmen und diese als Größe zu behandeln. Das Problem dabei ist, dass Tippfehler und andere schlecht formatierte Texte in Ihre Strukturdaten eingehen können. Es gibt keine richtige Antwort darauf, wie man mit Werten umgeht, die man vorher nicht gesehen hat - entweder muss man sie einzeln überprüfen oder Regeln um sie herum haben. Dies hängt von Ihrem Datensatz ab.

Bis zur Identifizierung von Mustern müssen Sie sie entweder manuell eingeben oder viele Datensätze manuell klassifizieren und vom Algorithmus lernen lassen. Nicht sicher, dass das sehr hilfreich ist, aber vieles hängt sehr von Ihren Daten ab.

+0

Danke. Ich dachte das selbe. –

0

Wenn Sie eine Trainingsdaten wie folgt aus:

word label 
10ml size-valume 
20kg size-weight 
etc... 

Sie könnten einen Klassifikator trainieren basierend auf Charakter n-Gramm und das würde erkennen, dass ml ist größen Volumen selbst wenn es sich um eine 11-ml sieht oder ml11 usw. sollten Sie die Zahlen auch in eine einzelne Zahl umwandeln (zB 0), so dass 11-ml vor der Merkmalsextraktion als 0-ml angesehen wird.

Dafür benötigen Sie ein Vorverarbeitungsmodul und auch ein großes Trainingssample. Für die Merkmalsextraktion können Sie die Zeichen-N-Gramme von scikit-learn und auch SVM verwenden.

Verwandte Themen