Python traitement de texte: NLTK et les pandas
Je suis à la recherche d'un moyen efficace de construire un Terme de Document de la Matrice en Python qui peut être utilisé conjointement avec des données supplémentaires.
J'ai quelques données de texte avec quelques autres attributs. Je voudrais lancer un certain nombre d'analyses sur le texte et je voudrais être en mesure de corréler les caractéristiques extraites à partir de texte (comme le mot individuel des jetons ou LDA sujets) avec les autres attributs.
Mon plan était de charger les données comme les pandas bloc de données, et ensuite chaque réponse représentera un document. Malheureusement, j'ai rencontré un problème:
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
Noter que dans les deux cas, le texte a été traité de manière à ce que seul le rien, mais des espaces, des lettres et des ,.?! a été supprimé (pour des raisons de simplicité).
Comme vous pouvez le voir une pandas champ converti en une chaîne de caractères retourne de moins en moins de matchs et la longueur de la chaîne est également plus courte.
Est-il possible d'améliorer le code ci-dessus?
Aussi, str(x)
crée 1 grande chaîne des commentaires alors que [str(x) for x in txt_data.comment]
crée une liste d'objet qui ne peut être rompu dans un sac de mots. Quelle est la meilleure façon de produire un nltk.Text
objet qui permettra de conserver le document indices? En d'autres mots, je suis à la recherche d'un moyen de créer un Terme de Document de la Matrice, R est l'équivalent de TermDocumentMatrix()
de tm
paquet.
Merci beaucoup.
Merci @mi , je suis au courant de gensim, mais je n'ai jamais entendu parler de textblob précédemment, il semble en effet utile si! Je suis assez nouveau pour Python (j'ai l'habitude de travailler dans R) et je doute vraiment que j'ai atteint une impasse avec NLTK, compte tenu de la popularité de ce package est, je suis certain que je suis juste en manque de quelque chose.
OriginalL'auteur IVR | 2016-01-14
Vous devez vous connecter pour publier un commentaire.
L'avantage d'utiliser un
pandas
DataFrame
serait d'appliquer lenltk
de la fonctionnalité de chaquerow
comme suit:Comme un résultat, vous obtenez le
.count()
pour chaquerow
entrée:Vous pouvez alors résumer le résultat à l'aide de:
txt
objet est toujours une pandas bloc de données objet, ce qui signifie que je ne peux utiliser certains de NLTK fonctions à l'aide deapply
,map
oufor
boucles. Cependant, si je veux faire quelque chose commenltk.Text(txt).concordance("the")
je vais courir dans des problèmes. Pour résoudre ce j'ai encore besoin de convertir l'ensemble du texte variable dans une chaîne de caractères, et comme nous l'avons vu dans mon premier exemple, cette chaîne sera tronqué pour une raison quelconque. Toute réflexion sur la façon de surmonter cela? Merci beaucoup!Vous pouvez convertir la totalité de la
text
column
dans une liste de mots à l'aide de:[t for t in df.text.tolist()]
- soit après la création ou après.tokenize()
.OriginalL'auteur Stefan