Fragmento de código NLTK de Python para entrenar a un clasificador (bayes ingenuos) usando la función de frecuencia

Me preguntaba si alguien podría ayudarme a través de un fragmento de código que demuestre cómo entrenar al clasificador Naive Bayes utilizando un método de frecuencia de características en lugar de presencia de características.

Supongo que a continuación, como se muestra en el Capítulo 6, el texto del enlace se refiere a la creación de un conjunto de características utilizando la Presencia de funciones (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 

Por favor aconséjame

En el enlace que envió, dice que esta función es un extractor de características que simplemente verifica si cada una de estas palabras está presente en un documento determinado.

Aquí está el código completo con números para cada línea:

 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 

En la línea 1 creó una lista de todas las palabras.

En la línea 2 toma las 2000 palabras más frecuentes.

3 la definición de la función

4 convierte la lista de documentos (creo que debe ser una lista) y convierte la lista en un conjunto.

5 declara un diccionario

6 iteran sobre todas las 2000 palabras más frecuentes

7 crea un diccionario donde la clave es ‘contiene (theword)’ y el valor es verdadero o falso. Verdadero si la palabra está presente en el documento, falso de lo contrario

8 devuelve el diccionario que muestra si el documento contiene las 2000 palabras más frecuentes o no.

¿Responde esto a tu pregunta?

Para la capacitación, cree FreqDists apropiados que pueda usar para crear ProbDists, que luego se pueden pasar a NaiveBayesClassifier. Pero la clasificación realmente funciona en conjuntos de características, que utilizan valores booleanos, no frecuencias. Por lo tanto, si desea clasificar en base a un FreqDist, deberá implementar su propio clasificador, que no utiliza los conjuntos de características NLTK.

Aquí hay un método que te ayudará:

 ''' 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