2017-09-01 4 views
0

Je suis un débutant en Python et je voudrais faire du marquage POS après avoir importé le fichier CSV de ma machine locale. J'ai regardé quelques ressources en ligne et j'ai trouvé que le code suivant fonctionne.Tokenizing et POS tagging en Python à partir du fichier CSV

text = 'Senator Elizabeth Warren from Massachusetts announced her support of 
Social Security in Washington, D.C. on Tuesday. Warren joined other 
Democrats in support.' 
import nltk 
from nltk import tokenize 
sentences = tokenize.sent_tokenize(text) 
sentences 

from nltk.tokenize import TreebankWordTokenizer 
texttokens = [] 
for sent in sentences: 
texttokens.append(TreebankWordTokenizer().tokenize(sent)) 
texttokens 

from nltk.tag import pos_tag 
taggedsentences = [] 
for sentencetokens in texttokens: 
taggedsentences.append(pos_tag(sentencetokens)) 
taggedsentences 

print(taggedsentences) 

Depuis que je l'ai imprimé, le résultat du code ci-dessus ressemble à ceci.

[[('Senator', 'NNP'), ('Elizabeth', 'NNP'), ('Warren', 'NNP'), ('from', 
'IN'), ('Massachusetts', 'NNP'), ('announced', 'VBD'), ('her', 'PRP$'), 
('support', 'NN'), ('of', 'IN'), ('Social', 'NNP'), ('Security', 'NNP'), 
('in', 'IN'), ('Washington', 'NNP'), (',', ','), ('D.C.', 'NNP'), ('on', 
'IN'), ('Tuesday', 'NNP'), ('.', '.')], [('Warren', 'NNP'), ('joined', 
'VBD'), ('other', 'JJ'), ('Democrats', 'NNPS'), ('in', 'IN'), ('support', 
'NN'), ('.', '.')]] 

Ceci est un résultat souhaitable que je voudrais faire, mais je voudrais obtenir le résultat après l'importation d'un fichier csv qui contient plusieurs lignes (dans chaque ligne, il y a plusieurs phrases.). Par exemple, le fichier csv ressemble à ceci:

--------------------------------------------------------------- 
I like this product. This product is beautiful. I love it. 
--------------------------------------------------------------- 
This product is awesome. It have many convenient features. 
--------------------------------------------------------------- 
I went this restaurant three days ago. The food is too bad. 
--------------------------------------------------------------- 

En fin de compte, je voudrais enregistrer les résultats souhaitables de marquage pos que j'affiché ci-dessus après avoir importé le fichier csv. Je voudrais sauvegarder (écrire) le (pos tagged) chaque phrase dans chaque rangée comme format csv.

Deux formats peuvent être possibles. Le premier pourrait être le suivant (pas d'en-tête, chaque phrase (pos tagged) dans une rangée).

---------------------------------------------------------------------------- 
[[('I', 'PRON'), ('like', 'VBD'), ('this', 'PRON'), ('product', 'NN')]] 
---------------------------------------------------------------------------- 
[[('This', 'PRON'), ('product', 'NN'), ('is', 'VERB'), ('beautiful', 'ADJ')]] 
--------------------------------------------------------------------------- 
[[('I', 'PRON'), ('love', 'VERB'), ('it', 'PRON')]] 
---------------------------------------------------------------------------- 
... 

Le second format pourrait ressembler à ceci (sans en-tête, chaque jeu de tagger jeton et pos enregistré dans une cellule):

---------------------------------------------------------------------------- 
('I', 'PRON') | ('like', 'VBD') | ('this', 'PRON') | ('product', 'NN') 
---------------------------------------------------------------------------- 
('This', 'PRON') | ('product', 'NN') | ('is', 'VERB') | ('beautiful', 'ADJ') 
--------------------------------------------------------------------------- 
('I', 'PRON') | ('love', 'VERB') | ('it', 'PRON') | 
---------------------------------------------------------------------------- 
... 

Je préfère le second format au premier.

Le code python que j'ai écrit ici fonctionne parfaitement mais je voudrais faire la même chose pour le fichier csv et finalement le sauvegarder dans ma machine locale. Le but final de ceci est que je voudrais extraire seulement des noms de types de mots (par exemple, NN, NNP) des phrases. Est-ce que quelqu'un peut m'aider à corriger le code python?

+1

Je suis curieux de savoir comment vous prévoyez d'utiliser le CSV résultant? Je demande seulement parce que essayer de recharger ceci en python avec la parenthèse pourrait devenir un mal de tête. – Tony

Répondre

-1

Veuillez vous référer à la question déjà posée ici. Vous pouvez juste faire un tag pour filtrer uniquement les noms comme décrit dans le message. SO Link

+1

Si cette question est un doublon de votre lien, votez pour le fermer en double. Les réponses à lien uniquement sont déconseillées. –

+0

@Sincole Brans, j'ai besoin de noms maintenant mais j'aurai aussi besoin d'adj dans le futur. Donc, je voudrais extraire tous les mots et les ensembles de marquage, pas seulement les noms. La question était plutôt comment importer un fichier csv et enregistrer les résultats dans un formulaire csv au lieu de 'print', étant donné que le code ci-dessus fonctionne. Je suis vraiment un novice à python, désolé pour la question fondamentale et la confusion dans la question. De plus, je n'ai pas besoin de parenthèse dans les résultats. J'ai juste besoin des ensembles de 'mot et tagging' dans un format distingué signifiant que moi et un programme (R ou python) pouvons distinguer quelle étiquette indique quel mot – Emily