Python - Clasificación de texto
Muchas veces, necesitamos categorizar el texto disponible en varias categorías según algunos criterios predefinidos. nltk proporciona dicha función como parte de varios corpus. En el siguiente ejemplo, observamos el corpus de reseñas de películas y verificamos la categorización disponible.
# Lets See how the movies are classified
from nltk.corpus import movie_reviews
all_cats = []
for w in movie_reviews.categories():
all_cats.append(w.lower())
print(all_cats)
Cuando ejecutamos el programa anterior, obtenemos el siguiente resultado:
['neg', 'pos']
Ahora veamos el contenido de uno de los archivos con una revisión positiva. Las oraciones en este archivo están tokenizadas e imprimimos las primeras cuatro oraciones para ver la muestra.
from nltk.corpus import movie_reviews
from nltk.tokenize import sent_tokenize
fields = movie_reviews.fileids()
sample = movie_reviews.raw("pos/cv944_13521.txt")
token = sent_tokenize(sample)
for lines in range(4):
print(token[lines])
Cuando ejecutamos el programa anterior, obtenemos el siguiente resultado:
meteor threat set to blow away all volcanoes & twisters !
summer is here again !
this season could probably be the most ambitious = season this decade with hollywood churning out films
like deep impact , = godzilla , the x-files , armageddon , the truman show ,
all of which has but = one main aim , to rock the box office .
leading the pack this summer is = deep impact , one of the first few film
releases from the = spielberg-katzenberg-geffen's dreamworks production company .
A continuación, identificamos las palabras en cada uno de estos archivos y buscamos las palabras más comunes utilizando la función FreqDist de nltk.
import nltk
from nltk.corpus import movie_reviews
fields = movie_reviews.fileids()
all_words = []
for w in movie_reviews.words():
all_words.append(w.lower())
all_words = nltk.FreqDist(all_words)
print(all_words.most_common(10))
Cuando ejecutamos el programa anterior, obtenemos el siguiente resultado:
[(,', 77717), (the', 76529), (.', 65876), (a', 38106), (and', 35576),
(of', 34123), (to', 31937), (u"'", 30585), (is', 25195), (in', 21822)]