2017-09-05 5 views
0

J'essaye de faire l'étiquette de position pour chaque mot dans chaque ligne (chaque ligne contient plusieurs phrases).Marquage de pos-niveau de mot en Python

Je possède ce code:

import nltk import pos_tag 
import nltk.tokenize import word_tokenize 

f = open('C:\Users\test_data.txt') 
data = f.readlines() 

#Parse the text file for NER with POS Tagging 
for line in data: 
    tokens = nltk.word_tokenize(line) 
    tagged = nltk.pos_tag(tokens) 
    entities = nltk.chunk.ne_chunk(tagged) 
    print entities 
f.close() 

Mais le code donne une étiquette pour chaque ligne et la sortie ressemble à ceci:

[('L'appartement est tout neuf et vierge dans sa propreté. ',' NNP '), (' 'Super petit endroit dans les montagnes.' ',' NNP '), (' Endroit très confortable près de l'arrêt fatima luas, j'adore cet endroit. \ Njose et vadym sont très accueillants et m'a très bien traité. "NNP"), ("Très serviable et communicatif hôte.Excellent emplacement, bien relié aux transports publics.La chambre était un peu trop petit pour un couple et le manque de cu pboards a été douloureusement senti. \ n \ nOinwise tout à fait propre et bien maintenu. ',' NNP '), (' Tout était exactement comme décrit. C'est beau. ',' NNP ')]

Mon code a' tokenizer 'et je ne sais pas quel est le problème avec mon code. J'ai besoin de balise pos pour chaque mot au lieu de chaque ligne. Mais chaque ligne doit toujours être découpée (ou distinguée) entre parenthèses ou quelque chose comme ça.

+0

Il n'y a pas de problème avec python3 sur mon ordinateur. Je ne sais pas ce qui ne va pas ... – mquantin

+0

@mquantin, je n'ai pas non plus de problème avec python 3, mais le code m'a donné la sortie ci-dessus, qui est un tag de niveau ligne. Avez-vous obtenu un marquage pos au niveau des mots, ce qui signifie que chaque mot a un tag pos? – Emily

+0

@mquantin, FYI, dans mon ensemble de données, les phrases d'une parenthèse sont stockées dans une ligne. C'est probablement pourquoi une balise pos a été donnée aux phrases dans une parenthèse. – Emily

Répondre

1

(pur copier coller de ce qui fonctionne sur mon ordinateur)

Marchepied votre code (notez simple déclaration d'importation):

#!/usr/bin/env python3 
# encoding: utf-8 
import nltk 
f = open('/home/matthieu/Téléchargements/testtext.txt') 
data = f.readlines() 

for line in data: 
    tokens = nltk.word_tokenize(line) 
    tagged = nltk.pos_tag(tokens) 
    entities = nltk.chunk.ne_chunk(tagged) 
    print(entities) 
f.close() 

Sur le fichier texte brut unicode suivant (3 lignes):

(this is a first example.)(Another sentence in another parentheses.) 
(onlyone in that line) 
this is a second one wihtout parenthesis. (Another sentence in another parentheses.) 

Je reçois les résultats suivants:

(S 
(/(
this/DT 
is/VBZ 
a/DT 
first/JJ 
example/NN 
./. 
)/) 
(/(
Another/DT 
sentence/NN 
in/IN 
another/DT 
parentheses/NNS 
./. 
)/)) 
(S (/(onlyone/NN in/IN that/DT line/NN)/)) 
(S 
this/DT 
... 

Comme vous pouvez le voir, il n'y a pas de problème particulier. Analysez-vous correctement vos données csv? csv est-il utile dans votre cas? avez-vous essayé d'utiliser un simple fichier texte?

+0

merci beaucoup, ça a fonctionné après avoir changé l'encodage de données en 'utf -8 'et l'installation' numpy 'pour une raison quelconque.J'apprécie votre aide – Emily

+0

pourrait marquer la réponse comme acceptée? – mquantin

+0

Je l'ai fait.Merci encore! – Emily