Seite 1 von 1
Hilfe bei Lexikon-Einbindung
Verfasst: Montag 11. April 2016, 06:22
von Sonja
Hallo,
ich möchte gerne im Bereich der Sentiment Analyse auf ein selbst erstelltes Lexikon zugreifen. Bisher sieht der Inhalt davon so aus:
good, 1
bad, -2
boring, -1
Mein Code-Teil, um das Lexikon einzulesen ist der:
Code: Alles auswählen
sentiment_dic = {}
for line in open('Lexikon.txt'):
word, score = line.split('\t')
sentiment_dic[word] = int(score)
Leider bekomme ich aber immer diesen Fehler:
Traceback (most recent call last):
word, score = line.split('\t')
ValueError: need more than 1 value to unpack
Habt ihr eine Idee was ich falsch mache? Ich bin Python-Anfänger und wäre euch sehr dankbar für eure Hilfe

Re: Hilfe bei Lexikon-Einbindung
Verfasst: Montag 11. April 2016, 07:50
von Sirius3
@Sonja: Schau doch mal an wie Dein Dein 'Lexikon.txt' aussieht. Die Spalten sind offensichtlich nicht Tab-getrennt.
Re: Hilfe bei Lexikon-Einbindung
Verfasst: Montag 11. April 2016, 21:19
von Sonja
Vielen Dank, daran lag es
Leider hat sich mittlerweile ein neuer Fehler ergeben..
ich möchte gerne, dass mir die positive und negativen Zahlen im Lexikon für jeden Satz zusammengerechnet werden und dann ausgegeben werden. Dafür habe ich folgenden Code-Teil:
Code: Alles auswählen
result = []
for satz in sent_tokenize(text):
pos = 0
neg = 0
for word in word_tokenize(satz):
score = Lexikon.get(word, 0)
if score > 0:
pos += score
if score < 0:
neg += score
result.append([pos, neg])
for s in result: print(s)
print(result)
Ich hätte eigentlich solch ein Ergebnis erwartet: [3, -2] bekomme aber immer nur ein leeres Ergebnis: []. Die Wörter im Lexikon sind aber richtig beziffert.
Hat jemand eine Idee, was ich an diesem Code-Teil ändern könnte/müsste?
Vielen Dank für eure Hilfe

Re: Hilfe bei Lexikon-Einbindung
Verfasst: Montag 11. April 2016, 21:27
von Sirius3
@Sonja: überleg Dir mal, wann result.append aufgerufen wird, wann also die äußere if-Bedingung erfüllt ist und wann die innere.
Re: Hilfe bei Lexikon-Einbindung
Verfasst: Dienstag 12. April 2016, 11:17
von Sonja
Danke für deinen Tipp, ich habe den Code jetzt ein paar mal umgestellt aber das Ergebnis bleibt leer.. ich habe versucht die beiden for-Schleifen miteinander zu verbinden, sodass append auf beide angewendet wird, aber das klappt nicht. Sorry, ich bin wirklich noch nicht lange dabei, könntest du mir sagen, was genau ich falsch mache?
Vielen Dank für deine Hilfe!
Re: Hilfe bei Lexikon-Einbindung
Verfasst: Dienstag 12. April 2016, 11:36
von kbr
@Sonja: Du hast einen Logikfehler in Deinem Programmablauf. Alles im Block unter score > 0 wird niemals mit einem negativen score ausgeführt. Also gibt der Vergleich score < 0 in diesem Block stets False als Ergebnis und die append-Methode Deiner result-Liste wird daher auch niemals aufgerufen.
Re: Hilfe bei Lexikon-Einbindung
Verfasst: Dienstag 12. April 2016, 11:40
von BlackJack
@Sonja: Du musst verstehen wie Schleifen und Bedingte Ausführung funktionieren. Das sind Grundlagen die Du selber lernen musst, sonst kannst Du keine Programme selber schreiben. Dein Quelltext weiter oben zeigt ziemlich deutlich das Du wirklich sehr grundlegende Dinge nicht verstanden hast, Du also auch Code den Dir jetzt jemand anderes schreibt nicht verstehen wirst. Das ist doch sicher nicht der Sinn der Übung, dass Du Dir den Code den Du selber entwickeln sollst um etwas zu lernen, von anderen schreiben lässt‽
Warum hättest Du bei dem Quelltext als Ergebnis [3, -2] erwartet? Welche Bedingungen müssten erfüllt sein, das in dem Code *jemals* etwas an `result` angehängt wird? Welche Bedeutung hat in Python Einrückung für den Code? Welches Grundlagentutorial hast Du durchgearbeitet was das *so* (falsch oder gar nicht) vermittelt hat?
Re: Hilfe bei Lexikon-Einbindung
Verfasst: Dienstag 12. April 2016, 12:40
von Sonja
Ich habe mir jetzt nochmal genauer das Kapitel zu den Schleifen angeschaut. Ich habe meinen Code jetzt umgebaut:
Code: Alles auswählen
result = []
for satz in sent_tokenize(text):
pos = 0
neg = 0
for word in word_tokenize(satz):
score = Lexikon.get(word, 0)
if score > 0:
pos += score
if score < 0:
neg += score
result.append([pos, neg])
for s in result: print(s)
Soweit ich das verstanden habe, müsste es ja jetzt einen Output geben. Ich bekomme aber immer noch einen leeren Output. Ich glaube ich stehe gerade auf dem Schlauch.. die Einrückungen müssten das Problem doch eigentlich gelöst haben, oder?
Re: Hilfe bei Lexikon-Einbindung
Verfasst: Dienstag 12. April 2016, 12:51
von /me
Sonja hat geschrieben:Soweit ich das verstanden habe, müsste es ja jetzt einen Output geben. Ich bekomme aber immer noch einen leeren Output.
Das kann nur passieren, wenn `sent_tokenize` schon kein Ergebnis liefert.
Streu doch einfach mal strategisch ein paar Ausgaben mit print ins Programm ein (Arme-Leute-Debugger) und lass dir Zwischenergebnisse ausgeben.