2017-07-18 5 views
0

J'essaie de faire un modèle word2vec par Gensim sur le langage persan qui a "espace" comme délimiteur de caractères, j'utilise python 3.5. Le problème que j'ai rencontré a été de donner un fichier texte en entrée et de renvoyer un modèle qui se compose uniquement de chaque caractère séparément au lieu de mots. J'ai aussi donné l'entrée comme une liste de mots qui est recommandé sur:Les modèles word2vec sont constitués de charachters au lieu de mots

Python Gensim word2vec vocabulary key

Il ne fonctionne pas pour moi et je pense qu'il ne considère pas la séquence de mots dans une phrase il ne serait pas être correct.

J'ai fait quelques pré-traitement sur mon entrée qui se composent de:

effondrement de plusieurs espaces blancs en une seule
tokenize par division sur les espaces
supprimer les mots de moins de 3 caractères supprimer des mots d'arrêt

J'ai donné le texte à word2vec qui m'a donné le résultat correctement, mais j'en ai besoin sur python donc mon choix est limité à utiliser Gensim.

J'ai aussi essayé de charger le modèle qui a été fait par word2vec source sur gensim J'ai une erreur donc j'ai besoin de créer le modèle word2vec par Gensim.

mon code est:

wfile = open('aggregate.txt','r')  
    wfileRead = wfile.read()  
    model = word2vec.Word2Vec(wfileRead , size=100) 
    model.save('Word2Vec.txt') 
+0

Vous avez étiqueté votre question avec 'encodage de caractères', mais vous semblez ne pas savoir comment y faire face. Je vous recommande fortement de spécifier explicitement l'encodage de "aggregate.py" lorsque vous l'ouvrez, au lieu de vous fier à l'encodage par défaut de votre environnement. Il se pourrait bien que le choix par défaut soit (par hasard) le bon choix et que votre problème n'ait rien à voir avec l'encodage, mais c'est l'une des premières choses à exclure ici. – lenz

+0

@lenz merci pour votre réponse, oui je vérifie l'encodage. l'encodage du fichier "aggregate.txt" est "utf-8" qui est l'encodage defult de python 3.5. Ce n'est pas le problème, dans ce cas, j'obtiendrais une erreur d'encodage et cela ne me donnera pas un modèle basé sur le charater. –

+0

Lors de l'ouverture de fichiers en lecture/écriture, le codage par défaut n'est pas nécessairement UTF-8. Cela dépend de la configuration de votre système d'exploitation (par exemple, sur un système Unix, cela dépend de la variable d'environnement 'LC_ALL'), et vous pouvez vérifier ce que c'est avec' locale.getpreferredencoding() '. – lenz

Répondre

1

Le modèle gensim de Word2Vec ne prévoit pas chaînes comme exemples de textes (phrases), mais listes-de-jetons. Ainsi, c'est à votre code de marquer votre texte avant de le passer à Word2Vec.

Votre code tel qu'il est montré transmet simplement les données brutes du fichier 'aggregate.txt' à Word2Vec sous la forme wFileRead.

Regardez les exemples dans la documentation gensim, y compris la classe LineSentence inclus avec gensim, des idées

0

Vous devez tokenizer votre texte à l'aide de mots nltk.

from nltk import word_tokenize 

tokenized_text = word_tokenize(wfileRead) 
model = word2vec.Word2Vec(tokenized_text , size=100)