Python text processing: NLTK und pandas
Ich bin auf der Suche nach einer effektiven Weg, zu konstruieren, ein Term-Dokument-Matrix in Python verwendet werden kann, zusammen mit zusätzlichen Daten.
Habe ich einige text-Daten mit ein paar anderen Parametern. Ich würde gerne einige Analysen auf den text, und ich möchte in der Lage sein zu korrelieren Merkmale extrahiert aus dem text (wie einzelne word-Token oder LDA-Themen) mit den anderen Parametern.
Mein plan war, laden Sie die Daten als pandas-Daten-frame und dann jede Antwort repräsentieren ein Dokument. Leider, ich lief in ein Problem:
import pandas as pd
import nltk
pd.options.display.max_colwidth = 10000
txt_data = pd.read_csv("data_file.csv",sep="|")
txt = str(txt_data.comment)
len(txt)
Out[7]: 71581
txt = nltk.word_tokenize(txt)
txt = nltk.Text(txt)
txt.count("the")
Out[10]: 45
txt_lines = []
f = open("txt_lines_only.txt")
for line in f:
txt_lines.append(line)
txt = str(txt_lines)
len(txt)
Out[14]: 1668813
txt = nltk.word_tokenize(txt)
txt = nltk.Text(txt)
txt.count("the")
Out[17]: 10086
Beachten Sie, dass in beiden Fällen der text wurde so verarbeitet, dass nur das nichts, sondern Räume, Briefe und.?! entfernt wurde (für die Einfachheit).
Wie Sie sehen können, eine Pandabären-Feld in einen string konvertiert zurückgibt, weniger Spiele und die Länge der Zeichenfolge ist kürzer.
Gibt es eine Möglichkeit zur Verbesserung der obige code?
Auch str(x)
schafft 1 big-string aus der Kommentare, während [str(x) for x in txt_data.comment]
erzeugt ein list-Objekt, das nicht gebrochen werden kann und in einen Beutel von Worten. Was ist der beste Weg, um zu produzieren ein nltk.Text
Objekt, das behalten Dokument-Indizes? In anderen Worten, ich bin auf der Suche nach ein Weg, um eine Term-Dokument-Matrix, R ist äquivalent TermDocumentMatrix()
aus tm
Paket.
Vielen Dank.
- nicht sicher, was deine Frage ist, aber es gibt auch andere Bibliotheken für NLP könnte für Sie zu helfen, Bibliotheken Muster, textblob, C&C, wenn Sie in der Sackgasse, können Sie versuchen, die Bibliotheken zu, jeder von Ihnen hat Ihren eigenen Vorteil über den anderen.
- Danke @mid , ich bin mir bewusst, von gensim, aber ich habe noch nie gehört, textblob zuvor, es ist in der Tat Aussehen nützlich wenn! Ich bin ganz neu bei Python (ich arbeite gewöhnlich in R), und ich bezweifle wirklich, dass ich in der Sackgasse mit NLTK, wenn man bedenkt, wie beliebt das Paket ist, ich bin mir sicher, dass ich mich einfach etwas fehlt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Vorteil der Verwendung einer
pandas
DataFrame
wäre die Anwendung dernltk
Funktionalität zu jederrow
etwa so:Als Ergebnis erhalten Sie die
.count()
für jedenrow
Eintrag:Können Sie dann die Summe und das Ergebnis mit:
txt
Objekt ist immer noch ein Pandabären-Daten-frame-Objekt, was bedeutet, dass ich nur einige der NLTK-Funktionen, die mitapply
,map
oderfor
Schleifen. Jedoch, wenn ich etwas machen möchte, wienltk.Text(txt).concordance("the")
ich auf Probleme stoßen. Zu lösen, dies werde ich noch brauchen, um zu konvertieren das gesamte text-variable in einen string und wie wir gesehen, in meinem ersten Beispiel, der string wird abgeschnitten, aus irgendeinem Grund. Irgendwelche Gedanken auf, wie dies zu überwinden? Vielen Dank!text
column
in einer Liste der Wörter, die mit:[t for t in df.text.tolist()]
- entweder nach der Erstellung oder nach.tokenize()
.