2016-12-19 2 views
0

J'apprends Doc2Vec modèle de gensim bibliothèque et l'utiliser comme suit:Gensim Doc2Vec Exception AttributeError: objet « str » n'a pas d'attribut « mots »

class MyTaggedDocument(object): 
    def __init__(self, dirname): 
     self.dirname = dirname 

    def __iter__(self): 
     for fname in os.listdir(self.dirname): 
      with open(os.path.join(self.dirname, fname),encoding='utf-8') as fin: 
       print(fname) 
       for item_no, sentence in enumerate(fin): 
        yield LabeledSentence([w for w in sentence.lower().split() if w in stopwords.words('english')], [fname.split('.')[0].strip() + '_%s' % item_no]) 
sentences = MyTaggedDocument(dirname) 
model = Doc2Vec(sentences,min_count=2, window=10, size=300, sample=1e-4, negative=5, workers=7) 

L'entrée dirname est un chemin d'accès qui a, pour Par souci de simplicité, seulement 2 fichiers situés à chaque fichier contenant plus de 100 lignes. Je reçois l'exception suivante.

Output

En outre, avec print déclaration que je pouvais voir que le iterator itéré 6 fois le répertoire. Pourquoi cela est-il ainsi?

Toutes sortes d'aide seraient appréciées.

+0

Une chose, ne voulez-vous pas si vous n'êtes pas dans les mots vides? En ce moment, vos phrases ne contiennent que des mots vides – datawrestler

+0

Ouais c'est une erreur, je l'ai corrigé mais le même problème persiste. –

Répondre

0

Il ressemble à l'un des objets texte par exemple, qui devrait être la forme d'un TaggedDocument (avec words et tags propriétés, autrefois appelées LabeledSentence), est en quelque sorte une chaîne de caractères au lieu. Êtes-vous sûr à 100% que l'erreur dans votre capture d'écran a été générée par exactement le code itérable que vous avez inclus? (Le code semble ici ne pouvoir émettre que des objets LabeledSentece acceptables.)

Votre corpus Iterable fourni est lu une seule fois pour effectuer une analyse initiale qui a détecté tous les mots/toutes les étiquettes, puis plusieurs fois pour l'entraînement. Combien de fois est contrôlé par le paramètre iter, avec une valeur par défaut (dans les versions récentes de gensim) de 5. Donc, le balayage initial plus 5 passes d'entraînement égalent 6 itérations totales. (10 itérations ou plus est commun avec Doc2Vec.)