2017-04-09 2 views
0

Ich habe SVM Classifier erfolgreich implementiert. Ich benutze den Scikit-Ansatz nicht. Ich trainiere es gerade mit verschiedenen Arten von Daten. Jetzt möchte ich es für eine einzelne Texteingabe testen. Ich versuchte es mit Pandas, aber dann musste ich meinen Ansatz ändern, also entschied ich mich, es nicht zu benutzen. Der Klassifikator wird für die Sentimentanalyse mit positiven, negativen und neutralen Labels verwendet. Der Datensatz, der dem Klassifikator zugeführt wird, besteht aus Twittern von Twitter. Hier ist mein Klassifikator: https://pastebin.com/JZ5LVLW7Wie erstelle ich einen binären Merkmalsvektor für meinen Klassifikator

Also, ich brauche Hilfe eine Funktion in Python in der Gestaltung, die einen String-Eingang nehmen, vergleicht es mit meiner Features-Liste und einen binären Vektor erzeugen. Oder wenn es andere Alternativen gibt, bitte schlagen Sie vor. Beispiel: Wenn meine Texteingabe ist "Fußball ist ein beliebter Sport in Europa" So würde die vorgeschlagene Funktion die Feature-Liste scannen (bereits mit Hilfe von Testdaten generiert), und wenn die Feature-Wörter wie "Fußball", " popular "," sport "," Europe "ist in der Merkmalsliste vorhanden und würde 1 oder sonst 0 anhängen. Nach dem Scannen durch die Funktion sollte die Ausgabe also wie folgt aussehen [..., 1,0,1,1 , 0,0,0, ...].

+0

Was ist der Klassifikator für und was ist das Feature, was ist das Ziel? – aisensiy

+0

Entschuldigung für das Überspringen weniger Details. Der Klassifikator ist für die Stimmungsanalyse mit positiven, negativen und neutralen Bezeichnungen, er enthält Features, die aus Tweets-Datasets extrahiert werden. – Monty

+0

Sie wollen also ein Hot-Feature für die Texteingabe generieren? scikit hat einige Text-Feature-Tools dafür. – aisensiy

Antwort

0

Erstellen Sie ein Vokabular mit den Wörtern, die Sie interessieren, und einen Hot-Encoder der gleichen Größe. Lesen Sie die Textdatei und aktualisieren Sie den Hot-Encoder, falls Sie die Wörter in Ihrem Vokabular finden. Dieser Code sollte funktionieren.

vocabulary = ['Football', 'Europe'] # Put your targer words in here 
hot_encoder = [0] * len(vocabulary) 
binary_bag = dict(zip(vocabulary, hot_encoder)) 
with open('text.txt', 'r') as f: #Put your text sample in here 
    words = [word for line in f for word in line.split()] 
    for word in words: 
     if word in vocabulary and binary_bag[word] == 0: 
      binary_bag[word] = 1 
+0

Danke für Ihre Antwort! Wenn ich nur die Etiketten in der Ausgabe verstecken könnte. Beispiel: Statt ['Fußball': 1, 'Europa': 0 ..] Könnte es nur [1,0,0 ..] sein? – Monty

+0

Vorsicht in diesem Schritt. Da Sie mit einem Wörterbuch arbeiten, sollten Sie daran denken, dass Diktate die Reihenfolge nicht beibehalten. Daher sollten Sie die anfänglichen Listen verwenden, um Ihnen beim Erreichen dieses Ziels zu helfen. Dieser Code sollte funktionieren: 'für idx, Schlüssel in Enumerate (Wortschatz): hot_encoder [idx] = binary_bag [Schlüssel]' – Arthur

+0

Nur um klar zu sein, das ist zusätzlicher Code :) – Arthur

Verwandte Themen