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
demandé sur Georg Fritzsche 2010-01-29 17:58:20

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?

3
répondu elif 2010-01-29 22:26:03

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.

3
répondu Jacob 2010-02-09 01:18:35

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
0
répondu Dexter 2011-05-04 22:50:06