2016-09-01 4 views
0

L'objectif est la classification des sentiments. Les étapes sont d'ouvrir 3 fichiers xlsx, de les lire, de les traiter avec les méthodes gensim.doc2vec et de les classifier avec SGDClassificator. Essayez simplement de répéter this code on doc2vec. Python 2,7Fonction readlines pour un fichier xlsx fonctionne inproper

with open('C:/doc2v/trainpos.xlsx','r') as infile: 
    pos_reviews = infile.readlines() 
with open('C:/doc2v/trainneg.xlsx','r') as infile: 
    neg_reviews = infile.readlines() 
with open('C:/doc2v/unsup.xlsx','r') as infile: 
    unsup_reviews = infile.readlines() 

Mais il est apparu que les listes résultantes ne sont pas ce qu'ils devraient être:

print 'length of pos_reviews is %s' % len(pos_reviews) 
>>> length of pos_reviews is 1 

Les fichiers contiennent 18, 1221 et 2203 RAWs en conséquence. Je pensais que les listes auraient le même nombre d'éléments.

L'étape suivante consiste à concaténer toutes les phrases.

y = np.concatenate((np.ones(len(pos_reviews)), np.zeros(len(neg_reviews)))) 
x_train, x_test, y_train, y_test = train_test_split(np.concatenate((pos_reviews, neg_reviews)), y, test_size=0.2) 

Cela conduit à la situation où x-train, x-test sont des listes de phrases qu'ils devraient être en

y_train = [0.] 
y_test = [1.] 

Après cette division chaque phrase obtient une étiquette:

def labelizeReviews(reviews, label_type): 
labelized = [] 
for i,v in enumerate(reviews): 
    label = '%s_%s'%(label_type,i) 
    labelized.append(LabeledSentence(v, [label])) 
return labelized 
x_train = labelizeReviews(x_train, 'TRAIN') 
x_test = labelizeReviews(x_test, 'TEST') 
unsup_reviews = labelizeReviews(unsup_reviews, 'UNSUP') 

Comme écrit dans the numpy documentation, les tableaux doivent être égaux en taille. Mais quand je réduis les gros fichiers à 18 lignes, rien ne change. Comme j'ai cherché sur le forum, personne n'a d'erreur similaire. Je me suis cassé la tête ce qui a mal tourné et comment le réparer. Merci pour l'aide!

Répondre

0

Généralement, vous ne pouvez pas lire les fichiers Microsoft Excel sous forme de fichiers texte en utilisant des méthodes telles que readlines ou read. Vous devriez convertir les fichiers dans un autre format (une bonne solution est .csv qui peut être lue par le module csv) ou utiliser des modules python spéciaux comme pyexcel et openpyxl pour lire directement les fichiers .xlsx.

+0

Je suis surpris parce que dans le livre [link] (https://automatetheboringstuff.com/) 'qui a été cité pas une fois sur ce site readlines() méthode a été conseillé de travailler avec des fichiers Excel. – Talka

+0

Pourriez-vous alors me dire quelle méthode module renvoie un objet du type liste afin que la méthode list.append puisse être appliquée plus tard? J'ai édité le code en ajoutant la fonction de marquage. – Talka

+0

@Talka [Ce code] (http://pastebin.com/rzi57bhE) devrait fonctionner pour 'python3' avec le module' xlrd'. Dans le module de livre «Automate the Boring Stuff ...» 'openpyxl' décrit. Ce module fonctionne uniquement avec les fichiers MS Office 2007 ('.xlsx'). –