Génération de Ngrams (Unigrams, Bigrams etc) à partir d'un grand corpus de fichiers .txt et de leur fréquence
J'ai besoin d'écrire un programme dans NLTK qui casse un corpus (une grande collection de fichiers txt) dans unigrams, bigrams, trigrammes, fourgrams et fivegrams. J'ai déjà écrit le code pour entrer mes fichiers dans le programme.
L'entrée est de 300 .les fichiers txt écrit en anglais et je veux la sortie en forme de Ngrams et spécialement de la fréquence de comptage.
Je sais que NLTK a Bigram et Trigramme modules : http://www.nltk.org/_modules/nltk/model/ngram.html
mais je ne suis pas du tout avancé pour entrer dans mon programme.
d'entrée: fichiers txt PAS simple phrase
exemple de sortie:
Bigram [('Hi', 'How'), ('How', 'are'), ('are', 'you'), ('you', '?'), ('?', 'i'), ('i', 'am'), ('am', 'fine'), ('fine', 'and'), ('and', 'you')]
Trigram: [('Hi', 'How', 'are'), ('How', 'are', 'you'), ('are', 'you', '?'), ('you', '?', 'i'), ('?', 'i', 'am'), ('i', 'am', 'fine'), ('am', 'fine', 'and'), ('fine', 'and', 'you')]
Mon code jusqu'à maintenant est:
from nltk.corpus import PlaintextCorpusReader
corpus = 'C:/Users/jack3/My folder'
files = PlaintextCorpusReader(corpus, '.*')
ngrams=2
def generate(file, ngrams):
for gram in range(0, ngrams):
print((file[0:-4]+"_"+str(ngrams)+"_grams.txt").replace("/","_"))
for file in files.fileids():
generate(file, ngrams)
Toute aide à ce qui devrait être fait par la suite?
source d'informationauteur Arash
Vous devez vous connecter pour publier un commentaire.
Suffit d'utiliser
ntlk.ngrams
.Mise à JOUR (avec de la pure python):
Ok, alors, puisque vous l'avez demandé un NLTK solution est peut-être pas exactement ce que vous où regarder pour, mais, avez-vous considéré TextBlob? Il a un NLTK backend, mais il a une syntaxe plus simple. Il ressemblerait à quelque chose comme ceci:
Bien entendu, vous devez utiliser le Compteur ou d'une autre méthode pour ajouter un compte par ngram.
Cependant, l'approche plus rapide (et de loin) que j'ai pu trouver à la fois de créer de toute ngram vous le souhaitez et également compter dans une seule fonction émane de cette post de 2012 et utilise Itertools. C'est génial.
Si l'efficacité est un problème et que vous avez à construire plusieurs types de n-grammes, mais que vous souhaitez utiliser pur python, je le ferais:
Utilisation :
~Même vitesse que NLTK:
Repost de mon réponse précédente.
Voici un exemple simple d'utilisation de pur Python pour générer de l'
ngram
:peut-être que ça aide. voir lien