nltk - die Wörter jeden Satzes einzeln

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
marena
User
Beiträge: 15
Registriert: Dienstag 22. März 2016, 10:35

Hallo!
Ich arbeite zum ersten mal mit nltk. Ich habe einen Text parsen lassen und die einzelnen Sätze gesplittet, so das ich anschließend eine Liste mit Sätzen habe (s. Code).

Code: Alles auswählen

first = parse(text) 
s = split(first) 
#print(s)

sent=s.sentences


Nun möchte ich gerne gucken, aus welchen Wörtern jeder Satz besteht. Dafür müsste ich aber jeweils die Endungen "/RB/I-NP/...." (s. unten) alle weider loswerden. Mit split("/") geht das leider nicht. Gibt es da eine andere Lösung oder wie könnte ich vorgehen? Das Ziel ist nämlich, jeden Satz mit einem Sentiment-Lexikon zu vergleichen., also ich würde gerne gucken, ob Sätze eher positiv oder negativ sind. Habt ihr da sonst andere Ideen?
ohnehin/RB/I-NP/O nur/RB/I-NP/O bedingt/JJ/I-NP/O einsatzbereite/NN/I-NP/O


Wie gesegt, ich bin noch Anfänger und bin für alle Hinweise dankbar! Ich weiß auch es gibt eine Dokumenation zu NLTK, allerdings weiß ich da gerade nicht so recht, wo ich suchen muss ://
harryberlin
User
Beiträge: 227
Registriert: Donnerstag 17. Dezember 2015, 12:17

irgendwie fehlt da code. ich komme nicht mit was du splitten willst
wie wäre es mit einer for schleife?
empty Sig
marena
User
Beiträge: 15
Registriert: Dienstag 22. März 2016, 10:35

textdatei.txt entspricht bspw. dem hier:
"Die US-Behörden haben nach eigenen Angaben selbst das iPhone eines islamistischen Attentäters entschlüsselt und verzichten auf den Versuch, Apple zur Entsperrung zu zwingen. Die Hilfe des Technologiekonzerns werde "nicht länger benötigt", heißt es in einem Schreiben des Justizministeriums an das Gericht. Die zuständige Bundesstaatsanwältin Eileen Decker erklärte, der entsprechende Ermittlungsschritt sei abgeschlossen.

Die US-Behörden hatten bereits vergangene Woche mitgeteilt, dass ihnen eine Möglichkeit vorgeschlagen worden sei, um auf Daten auf dem Telefon zuzugreifen. Wer der Helfer ist und wie die Methode funktioniert, wurde bisher nicht bekannt. Das iPhone wurde von einem der Attentäter benutzt, die im Dezember bei einem Anschlag im kalifornischen San Bernardino 14 Menschen töteten. Das FBI untersucht, ob die Angreifer mit der Dschihadisten-Miliz "Islamischer Staat" (IS) in Kontakt standen. "

mit s.split habe ich die geparste Version des Textes in einer Liste. Also jedes Wort mit den einzelnen Kategorien hinter jedem Wort. Jeder Satz ergibt dann ein Listenelement.
Jetzt möchte ich gerne gucken, wie ich jeden Satz ausgegeben bekomme, ohne eben die Kategorien hinter jedem Wort. Ich möchte Worthäufigkeiten und eben eine Sentimentanalyse durchführen...

wie meinst du das mit einer for-schleife? Ich habe das wie oben steht schon mit .splt() versucht, das funktioniert bei Listenelementen aber leider nicht :/....jedes Element der Liste ist ein Satz.

Code: Alles auswählen

with codecs.open("textdatei.txt",encoding='utf8') as text:
texte=(text.read())

first = parse(texte)
s = split(first)
#print(s)

sent=s.sentences
BlackJack

@marena: Was heisst jedes Element ist ein Satz? Welchen Typ haben diese Elemente? Der Typ gibt ja vor welche Operationen Du mit den Werten durchführen kannst. Beispielsweise ob man über Sätze iterieren kann und was man dabei bei jeder Iteration für einen Wert bekommt. Und da ist dann wieder interessant welchen Typ diese Werte hätten, weil der Typ ja vorgibt welche Operationen man mit einem Wert durchführen kann.

Das übliche vorgehen ist ein Problem in Teilprobleme zu zerlegen und diese Teilprobleme wieder in Teilprobleme, solange bis sich einzelne Teilprobleme leicht mit einer Funktion in ein paar Zeilen Code lösen lassen. Und diese Teillösungen kann man dann Stück für Stück zu einer Gesamtlösung zusammensetzen.
marena
User
Beiträge: 15
Registriert: Dienstag 22. März 2016, 10:35

Hey! Also mit dem .split() mache ich ja eine Liste aus den Ergebnissen vom Parsen. Diese Liste sieht dann eben so aus, dass sie verschiedene Elemente beinhaltet, die alle aus einem geparsten Satz bestehen.
BlackJack

@marena: Du wiederholst Dich. Jetzt musst Du halt schauen wie so ein Element aufgebaut ist das einen geparsten Satz repräsentiert. Also welchen Typ es hat und damit welche Operationen Dir mit so einem Element zur Verfügung stehen. Und jetzt fange ich an mich zu wiederholen…

Welchen Typ haben die Elemente denn? Was sagt die Dokumentation dazu? Notfalls ”fragst” Du die Elemente selber (`type()`-Funktion) und schlägst dann in der Dokumentation nach welche Operationen möglich sind um an die Worte zu kommen. Dann liest Du nach wie Du von den Worten nur den Wort-Teil, ohne die Annotation bekommst. Dann kannst Du diese zu Zeichenketten zusammenfügen welche aus den Sätzen bestehen. Wenn es das ist was Du letztendlich haben willst.
Antworten