Opinion Mining mit Python - Hilfestellung gesucht

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Semantiker
User
Beiträge: 2
Registriert: Dienstag 17. Mai 2016, 15:23

Hallo zusammen,

ich studiere Sprachwissenschaften und belege zurzeit ein Seminar, indem es darum geht mithilfe von Python automatisierte Hilfestellungen für die Sprachwissenschaften zu liefern. Da ich recht wenig Kenntnisse in puncto Programmierung habe und auch bisher nur ein paar Basics von Python gelernt habe, dachte ich mein Anliegen hier im Forum zu äußern.

Zum Problem: Ich habe eine .txt-Datei erstellt mit 100 Testsätzen aus zufälligen Kundenrezensionen. Python soll mir nun dabei helfen, ob ein Satz eher positiv oder negative Meinung enthält. In der .txt-Datei befindet sich z.B. der Satz:"Der Preis ist unschlagbar, kann ich sehr empfehlen." Der Satz ist also positiv zu bewerten. Nachdem ich nun eine vom Professort vorgegebene .py-Datei laufen lasse und die .txt-Datei einbinde kommt in der Shell das Ergebnis:

der:0
Preis:0.0
sein:0
unschlagbar:1.5
Kann:0
ich:0
sehr:0
empfehlen:1.5
SCOUNT: 3.0

Jeder einzelne Bestandteil wird also bewertet und dann aufsummiert. Ich würde jedoch gerne als Ausgabe den kompletten Satz haben ohne die einzelnen Werte, also:

Der Preis ist unschlagbar, kann ich sehr empfehlen: SCOUNT:3.0

Wie würde man das in einer .py-Datei formulieren?

Hier ein Screenshot von der .py-Datei (anfangs werden Module von nltk imporiert, die bei der Bewertung der Wörter helfen)

Bild

Vielen lieben Dank im Voraus! :roll:

Euer Semantiker
Sirius3
User
Beiträge: 17778
Registriert: Sonntag 21. Oktober 2012, 17:20

@Semantiker: wo, glaubst Du, wird im Programm was ausgegeben? Wenn Du das weißt, kannst Du ganz einfach die Ausgabe Deinen Wünschen anpassen.

Zum Quellcode: es wird sehr viel importiert, was nicht benutzt wird. Da solltest Du mal aufräumen. neg_score ist der falsche Name, weil mit der Variable wird ja kein Score negiert sondern multipliziert. scount, neg_score und blob wird an der falschen Stelle initialisiert. warum wird wcount ein String zugewiesen? Dann könnte man das unsinnige float beim Addieren auch weglassen.
Semantiker
User
Beiträge: 2
Registriert: Dienstag 17. Mai 2016, 15:23

Erstmal vielen Dank für die schnelle Antwort und Ratschläge von Dir SIrius3!

Also der Print-Befehl ist dafür verantwortlich, dass etwas ausgegeben wird, so viel weiß ich :D Dennoch habe ich keine Idee, wie ich mir den kompletten Satz ausgeben lassen kann anstatt jedes Wort einzeln...

Das mit dem wcount finde ich auch sehr verwirrend, genauso wie die if-Schleife. Du hast ja bereits angedeutet, dass man das ein oder andere rausschmeißen kann.

Hat jemand konkrete Ideen, wie man den Code überarbeiten könnte, sodass ein ganzer Satz ausgegeben wird?
BlackJack

@Semantiker: Warum hast Du da keine Idee? Du musst doch wissen, oder halt lernen, welcher Wert, wann, und warum, an welchen Namen gebunden wird. Also wo hast Du in diesem Programm Zugriff auf einen ganzen Satz? Das ist eine Frage die man mit Kenntnis von den Grundlagen, `print()` und ein wenig experimentieren, herausfinden kann. Falls es an der Kenntnis der Grundlagen hakt, dann lern die. Das kann Dir letztendlich niemand abnehmen, ausser Du lässt Deine Problemstellungen von anderen lösen, oder rätst Dir Deinen Code zusammen ohne ihn wirklich zu verstehen.

Quell*text* als Bild einfügen ist übrigens nicht so toll. Kaum jemand wird sich die Mühe machen das abzutippen um es mal auszuprobieren und/oder eine überarbeitete Version zu erstellen.
Antworten