Hallo,
ich beschäftige mich erst seit kurzem mit Python und stehe ein wenig auf dem Schlauch.
Und zwar würde ich gerne eine csv Datei auswerten, und gerne folgenden Output pro Zelle bekommen : aus wie vielen Wörtern die einzelnen Kommentare bestehen und wie viele positive und negative Wörter in den einzelnen Kommentaren vorkommen. Bei dem ersten Kommentar zb. Wörter=4, positive Wörter: 1 und negative Wörter=0.
Ich habe schon versucht das ganze mit openpyxl oder pandas zu lösen, aber weiß nicht was der richtige Ansatz ist...
Person II Kommentar
A II Der Baum ist schön
B II Die Frau ist nett und freundlich
C II Die Spinne ist hässlich
D II Die Frau ist hübsch aber unfreundlich
CSV Datei auswerten
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Python-Neuling: In der Standardbibliothek gibt es das `csv`-Modul. Mit `pandas` könnte man die Datei auch einlesen, aber ich denke das Modul ist letztlich komplizierter als es für diese Aufgabe nötig ist.
`openpyxl` ist für Excel-Dateien, nicht für CSV-Dateien.
`openpyxl` ist für Excel-Dateien, nicht für CSV-Dateien.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
-
- User
- Beiträge: 3
- Registriert: Montag 27. April 2020, 17:42
Vielen Dank für den Hinweis.
Ich verstehe halt nicht ganz wie ich auf die einzelnen Kommentare zugreife und diese auswerte.. Daher hatte ich es erst als xlsx datei und openpyxl probiert um auf die einzelnen Zellen zugreifen zu können.
Wie ich die Häufigkeit eines Wortes im gesamten Dokument bestimme oder die Textlänge eines Textes weiß ich, nur nicht wie ich auf die einzelnen Zellen zugreife
Ich verstehe halt nicht ganz wie ich auf die einzelnen Kommentare zugreife und diese auswerte.. Daher hatte ich es erst als xlsx datei und openpyxl probiert um auf die einzelnen Zellen zugreifen zu können.
Wie ich die Häufigkeit eines Wortes im gesamten Dokument bestimme oder die Textlänge eines Textes weiß ich, nur nicht wie ich auf die einzelnen Zellen zugreife

-
- User
- Beiträge: 3
- Registriert: Montag 27. April 2020, 17:42
Vielen Dank, da habe ich wohl zu kompliziert gedacht.
Habt ihr einen Tipp wie ich es schaffe das ich als Ergebnis die Anzahl der einzelnen Wörter der Liste pro Kommentar erhalte?
import csv
liste=["schön","nett"]
with open ("desktop/test.csv","r") as file:
for line in file:
data=line.strip().split(";")
if data[0]=="Person":
continue
Kommentar=data[1]
print(Kommentar.count(liste))

Habt ihr einen Tipp wie ich es schaffe das ich als Ergebnis die Anzahl der einzelnen Wörter der Liste pro Kommentar erhalte?

import csv
liste=["schön","nett"]
with open ("desktop/test.csv","r") as file:
for line in file:
data=line.strip().split(";")
if data[0]=="Person":
continue
Kommentar=data[1]
print(Kommentar.count(liste))
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Python-Neuling: Warum verwendest Du denn das `csv`-Modul nicht? Das Format ist ein bisschen komplizierter als einfach nur an ";" teilen. Das funktioniert nur solange Du Daten hast die eine Untermenge von CSV-Dateien sind. Zellen können beispielsweise mehr als eine Zeile enthalten und/oder das Trennzeichen.
Beim öffnen von Textdateien sollte man immer die Kodierung angeben.
Wenn Du die erste Zeile überspringen willst, dann mach das vor der Schleife und nicht durch testen von *jedem* Datensatz ob die erste Zelle "Person" ist. Von ``continue`` würde ich auch die Finger lassen. Das macht den Programmfluss komplizierter und kann in der Regel sehr leicht anders ausgedrückt werden.
Namen schreibt man in Python klein_mit_unterstrichen. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).
`liste` ist kein guter Name. Grunddatentypen haben in Namen nichts zu suchen und man will auch nicht wissen welchen Typ man da hat, sondern was der Wert im Kontext des Programms bedeutet.
Die letzte Zeile führt zu einem `TypeError` der auch verrät was für ein Datentyp bei `count()` als Argument übergeben werden müsste:
Du wirst das zählen von jedem Wort in der Liste programmieren müssen. Und vielleicht auch so, dass "nett" nicht gefunden wird, wenn da "nettobereinigt" im Text steht, aber doch wenn da einfach nur "Nett!" als Satz steht.
Programmieren funktioniert oft so das man Probleme in kleinere Teilprobleme zerlegt. Und die dann wieder in kleinere Teilprobleme. Solange bis man die einzelnen Teilprobleme mit einer Funktion mit wenigen Zeilen Code lösen kann. So eine Teillösung testet man dann, und schreibt dann die nächste Teillösung. Solange bis am Ende das Gesamtproblem gelöst ist.
Eventuell können hier reguläre Ausdrücke und das `re`-Modul hilfreich sein.
Beim öffnen von Textdateien sollte man immer die Kodierung angeben.
Wenn Du die erste Zeile überspringen willst, dann mach das vor der Schleife und nicht durch testen von *jedem* Datensatz ob die erste Zelle "Person" ist. Von ``continue`` würde ich auch die Finger lassen. Das macht den Programmfluss komplizierter und kann in der Regel sehr leicht anders ausgedrückt werden.
Namen schreibt man in Python klein_mit_unterstrichen. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).
`liste` ist kein guter Name. Grunddatentypen haben in Namen nichts zu suchen und man will auch nicht wissen welchen Typ man da hat, sondern was der Wert im Kontext des Programms bedeutet.
Die letzte Zeile führt zu einem `TypeError` der auch verrät was für ein Datentyp bei `count()` als Argument übergeben werden müsste:
Code: Alles auswählen
In [149]: "test".count(["a", "b"])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-149-ac9cb3a9b97c> in <module>
----> 1 "test".count(["a", "b"])
TypeError: must be str, not list
Programmieren funktioniert oft so das man Probleme in kleinere Teilprobleme zerlegt. Und die dann wieder in kleinere Teilprobleme. Solange bis man die einzelnen Teilprobleme mit einer Funktion mit wenigen Zeilen Code lösen kann. So eine Teillösung testet man dann, und schreibt dann die nächste Teillösung. Solange bis am Ende das Gesamtproblem gelöst ist.
Eventuell können hier reguläre Ausdrücke und das `re`-Modul hilfreich sein.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari