Code NLTK de Python snippet pour former un classificateur (Bayes naïf) en utilisant la fréquence de fonctionnalité
je me demandais si quelqu'un pourrait m'aider à travers un extrait de code qui montre comment former le classificateur Bayes naïf en utilisant une méthode de fréquence caractéristique par opposition à la présence de caractéristique.
je présume que ce qui suit est indiqué au chapitre 6 le lien renvoie à la création d'un ensemble de caractéristiques utilisant la présence de caractéristiques (FP) -
def document_features(document):
document_words = set(document)
features = {}
for word in word_features:
features['contains(%s)' % word] = (word in document_words)
return features
s'il vous Plaît des conseils
3 réponses
Dans le lien que vous avez envoyé il dit que cette fonction est extracteur qui vérifie simplement si chacun de ces mots est présent dans un document donné.
voici le code entier avec les nombres pour chaque ligne:
1 all_words = nltk.FreqDist(w.lower() for w in movie_reviews.words())
2 word_features = all_words.keys()[:2000]
3 def document_features(document):
4 document_words = set(document)
5 features = {}
6 for word in word_features:
7 features['contains(%s)' % word] = (word in document_words)
8 return features
dans la ligne 1 Il a créé une liste de tous les mots.
dans la ligne 2 Il prend les 2000 mots les plus fréquents.
3 La définition de la fonction
4 convertis le document de la liste (je pense que ça doit être une liste) et convertit la liste d'un ensemble.
5 déclare un dictionnaire
6 itère sur tous les plus fréquentes de 2000 mots
7 crée un dictionnaire où la clé est 'contains(theword)' et la valeur est soit vrai ou faux. Vrai si le mot est présent dans le document, faux sinon
8 renvoie le dictionnaire qui montre si le document contient le plus souvent 2000 mots ou pas.
est-ce que cela répond à votre question?
pour la formation, créer des FreqDists appropriés que vous pouvez utiliser pour créer des ProbDists, qui peuvent ensuite être transmis au NaiveBayesClassifier. Mais la classification fonctionne en fait sur les ensembles de caractéristiques, qui utilisent des valeurs booléennes, pas des fréquences. Donc, si vous voulez classer sur la base d'une FreqDist, vous devrez implémenter votre propre classificateur, qui n'utilise pas les ensembles de fonctionnalités NLTK.
Voici une méthode qui vous aidera:
''' Returns the frequency of letters '''
def get_freq_letters(words):
fdist = nltk.FreqDist([char.lower() for word in words for char in word if char.isalpha()])
freq_letters = {}
for key,value in fdist.iteritems():
freq_letters[key] = value
return freq_letters