J'ai un fichier du Moby Project qui associe des mots avec une ou plusieurs lettres indiquant leur part de la parole. Par exemple:

hemoglobin\N
hemogram\N
hemoid\A
hemolysin\N
hemolysis\N
hemolytic\A
hemophile\NA
hemophiliac\N

L'hémoglobine est un nom, l'hémoïde est un adjectif et l'hémophile peut être utilisé comme nom ou adjectif.

J'ai créé un dict à partir de ce fichier qui associe un mot aux lettres indiquant sa partie du discours en utilisant le code suivant:

mm = open("mobypos.txt").readlines()
pairs = []
for x in mm:
    pairs.append(x.split("\\"))
posdict = dict(pairs)

Cela fonctionne avec succès. Ce que je veux faire, c'est générer des listes appelées nouns, verbs, adjectives, etc. qui contiennent tous les mots de cette partie du discours. Quel est le moyen le plus rapide pour ce faire, étant donné que len(posdict.keys()) renvoie 233340

1
Luke Taylor 23 juil. 2015 à 15:47

2 réponses

Meilleure réponse

Vous pouvez utiliser la compréhension de liste

nouns = [word, type in posdict.iteritems() if 'N' in type]

adjs = [word, type in posdict.iteritems() if 'A' in type]

verbs = [word, type in posdict.iteritems() if 'V' in type]

L'utilisation de l'opérateur in dans la clause if placera les mots de plusieurs types en conséquence.

1
ILostMySpoon 23 juil. 2015 à 13:03

Vous pouvez utiliser une expression de générateur pour obtenir un itérateur de mots relatifs:

nouns = (w for w,type in posdict.iteritems() if type=='N')

Mais notez que puisque les itérateurs sont des itérateurs uniques, lorsque vous voulez simplement les parcourir et que vous ne voulez pas obtenir les éléments spécifiques ou utiliser certaines fonctions comme len, il est préférable de les utiliser, qui sont très optimisés en termes d'utilisation de la mémoire. mais si vous voulez les utiliser souvent, il vaut mieux utiliser une compréhension de liste.

nouns = [w for w,type in posdict.iteritems() if type=='N']
1
Finn Årup Nielsen 23 juil. 2015 à 13:13