2010-11-02 9 views
0

J'essaie de lire un fichier et de rechercher une combinaison de chaînes. PFB mon programme:Problème de correspondance de chaînes en Python

def negative_verbs_features(filename): 

    # Open and read the file content 
    file = open (filename, "r") 
    text = file.read() 
    file.close() 

    # Create a list of negative verbs from the MPQA lexicon 
    file_negative_mpqa = open("../data/PolarLexicons/negative_mpqa.txt", "r") 
    negative_verbs = [] 
    for line in file_negative_mpqa: 
     #print line, 
     pos, word = line.split(",") 
     #print line.split(",")  
     if pos == "verb": 
      negative_verbs.append(word) 
    return negative_verbs 

if __name__ == "__main__": 
    print negative_verbs_features("../data/test.txt") 

Le fichier negative_mpqa.txt se compose de paires de balisesmot, une partie du discours séparés par une virgule (,). Voici un extrait du fichier:

abandoned,adj 
abandonment,noun 
abandon,verb 
abasement,anypos 
abase,verb 
abash,verb 
abate,verb 
abdicate,verb 
aberration,adj 
aberration,noun 

Je voudrais créer une liste de tous les mots dans le fichier qui a verbe comme il fait partie du discours. Toutefois, lorsque je cours mon programme et la liste retournée (negative_verbs) est toujours vide. Le si la boucle n'était pas en cours d'exécution. J'ai essayé d'imprimer le mot, pos paire en décommentant la ligne print line.split (",") PFB un extrait de la sortie. Je comprends que mon fichier peut contenir des caractères spéciaux tels que le retour à la ligne et le retour à la fin de chaque ligne. Je veux juste les ignorer et construire ma liste. Veuillez me faire savoir comment procéder. PS: Je suis novice en Python.

Répondre

2

Vous avez dit que le fichier a des lignes comme ceci: abandoned,adj donc ce sont word, pos paires. Mais vous avez écrit pos, word = line.split(",") ce qui signifie que pos == 'abandoned' et word == 'adj' ... Je pense qu'il est clair pourquoi la liste sera vide maintenant :-)

+0

THC4k, merci! Je suis tellement idiot ... :-( – Dexter

1

Remplacer la ligne pos, word = line.split(",") par

word, pos = line.rstrip().split(",") 

rstrip() supprime les caractères blancs (espaces, nouvelles lignes, retour chariot ...) à droite de votre chaîne. Notez que lstrip() et même strip() existent également. Vous avez également changé de mot et de pos!

Vous pouvez également utiliser rstrip() sur votre variable word à la place, lorsque vous l'ajoutez à votre liste.

+0

Vincent Savard, Merci pour la réponse. J'ai fait comme tu l'as dit mais toujours pas de chance! – Dexter

+0

La sortie de print line.split (",") est toujours ['wrought', 'adj \ r \ n'] ['forgé', 'nom'] ['baille', 'nom' \ ' [' bâiller ',' verbe \ '] [' yelp ',' verbe \ ']' ['zealot', 'nom'] [ «zélé», «adj \ r» [«zélé», «anypos \ r»] – Dexter

+0

Je lis trop vite, mon mauvais. Dans votre code, la variable pos contient le mot (c'est-à-dire bâillement) et le mot, le type (c'est-à-dire verbe). Vous devez les changer. J'ai édité. Notez que vous devez toujours utiliser strip() si vous ne voulez pas voir ces \ r \ n! –

Questions connexes