Si no tiene problemas para usar una biblioteca externa, le recomiendo scikit-learn, ya que probablemente pueda hacer esto mejor y más rápido que cualquier cosa que pueda codificar usted mismo. Solo haría algo como esto:
Construye tu corpus. Hice las comprensiones de la lista para mayor claridad, pero dependiendo de cómo se almacenan sus datos, es posible que deba hacer cosas diferentes:
def corpus_builder(apple_inc_tweets, apple_fruit_tweets):
corpus = [tweet for tweet in apple_inc_tweets] + [tweet for tweet in apple_fruit_tweets]
labels = [1 for x in xrange(len(apple_inc_tweets))] + [0 for x in xrange(len(apple_fruit_tweets))]
return (corpus, labels)
Lo importante es que terminas con dos listas que se ven así:
([['apple inc tweet i love ios and iphones'], ['apple iphones are great'], ['apple fruit tweet i love pie'], ['apple pie is great']], [1, 1, 0, 0])
[1, 1, 0, 0] representan las etiquetas positivas y negativas.
Luego, ¡crea un Pipeline! Pipeline es una clase de scikit-learn que facilita encadenar los pasos de procesamiento de texto para que solo tenga que llamar a un objeto al entrenar / predecir:
def train(corpus, labels)
pipe = Pipeline([('vect', CountVectorizer(ngram_range=(1, 3), stop_words='english')),
('tfidf', TfidfTransformer(norm='l2')),
('clf', LinearSVC()),])
pipe.fit_transform(corpus, labels)
return pipe
Dentro del Pipeline hay tres pasos de procesamiento. CountVectorizer tokeniza las palabras, las divide, las cuenta y transforma los datos en una matriz dispersa. El TfidfTransformer es opcional, y es posible que desee eliminarlo dependiendo de la calificación de precisión (hacer pruebas de validación cruzada y una búsqueda en cuadrícula de los mejores parámetros es un poco complicado, por lo que no entraré en él aquí). LinearSVC es un algoritmo de clasificación de texto estándar.
Finalmente, predice la categoría de tweets:
def predict(pipe, tweet):
prediction = pipe.predict([tweet])
return prediction
Nuevamente, el tweet debe estar en una lista, así que asumí que ingresaba a la función como una cadena.
Ponlos todos en una clase o lo que sea, y listo. Al menos, con este ejemplo muy básico.
No probé este código, por lo que es posible que no funcione si solo copia y pega, pero si desea usar scikit-learn, debería darle una idea de por dónde empezar.
EDITAR: intenté explicar los pasos con más detalle.