2017-06-10 2 views
0

Könnten Sie mir bitte helfen, die Häufigkeitsverteilung von "Wortgruppe" zu berechnen?NLTK Häufigkeitsverteilung für eine Gruppe von Wörtern

Mit anderen Worten, ich habe eine Textdatei. Hier ist ein Überblick:

a snapshot of it is given here

Hier mein Code ist die 50 häufigsten Wörter in der Textdatei zu finden:

f=open('myfile.txt','rU') 
text=f.read() 
text1=text.split() 
keywords=nltk.Text(text1) 
fdist1=FreqDist(keywords) 
fdist1.most_common(50) 

In den Ergebnissen, wie Sie in den Link sehen können, jeweils Wort wird berechnet. Hier ist ein Screenshot der Ergebnisse:

a screenshot of the results

Es funktioniert gut, aber ich versuche, die Häufigkeitsverteilung von jeder Zeile in der Textdatei zu finden. Zum Beispiel gibt es in der ersten Zeile einen Begriff "konzeptionelle Veränderung". Das Programm berechnet "konzeptionell" und "ändern" als unterschiedliche Keywords. Ich muss jedoch die Häufigkeitsverteilung des Begriffs "konzeptionelle Veränderung" finden.

+0

Welcome to-Überlauf zu stapeln. Sie können Ihre Frage etwas verbessern, indem Sie einige Informationen darüber geben, was Sie versucht haben und wo Sie stecken geblieben sind. – Willem

+1

Auch: Wie sieht die Eingabedatei eigentlich aus? Zeigen Sie ein paar Zeilen. – alexis

+0

Ich habe meine Frage nach Ihren Vorschlägen bearbeitet –

Antwort

0

Sie teilen den Text durch beliebig Leerzeichen. Siehe the docs. Dies ist das Standardverhalten, wenn Sie kein Trennzeichen angeben.

Wenn Sie in Ihrem Beispielprogramm den Wert text1 ausdrucken würden, würden Sie dies sehen. Es ist einfach eine Liste von Wörtern - keine Zeilen - der Schaden wurde also schon bei der Übergabe an FreqDist gemacht.

es zu beheben, ersetzen Sie einfach mit text.split("\n"):

import nltk 
from nltk import FreqDist 
f=open('myfile.txt','rU') 
text=f.read() 
text1=text.split("\n") 
keywords=nltk.Text(text1) 
print(type(keywords)) 
fdist1=FreqDist(keywords) 
print(fdist1.most_common(50)) 

Dies ergibt eine Ausgabe wie:

[('conceptual change', 1), ('coherence', 1), ('cost-benefit tradeoffs', 1), ('interactive behavior', 1), ('naive physics', 1), ('rationality', 1), ('suboptimal performance', 1)] 
+0

hey Ich habe eine etwas ähnliche Frage und ich fragte mich, ob Sie mir helfen könnten. Ich spalte die Wörter nicht als das OP per se, ich benutze einen NLTK Text als Eingabe und ich bekomme die Wörter "Herz" und "Rate" getrennt. Gibt es einen Weg um das? Vielen Dank im Voraus! https://stackoverflow.com/questions/45531514/nltk-freqdist-counting-two-words-as-one – tech4242

Verwandte Themen