Si no tiene problemas para utilizar una biblioteca externa, le recomendaría scikit-learn ya que probablemente puede hacer esto mejor y más rápido que cualquier cosa que puedas codificar por ti mismo. Yo 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 puede que tenga que 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])
Los [1, 1, 0, 0] representan las etiquetas positivas y negativas.
Entonces, ¡crea una tubería! Pipeline es una clase de scikit-learn que facilita el encadenamiento de los pasos de procesamiento de texto para que sólo tengas que llamar a un objeto cuando entrenes/predigas:
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 de la tubería hay tres pasos de procesamiento. El CountVectorizer tokeniza las palabras, las divide, las cuenta y transforma los datos en una matriz dispersa. El TfidfTransformer es opcional, y es posible que quiera quitarlo dependiendo de la clasificación de precisión (hacer pruebas de validación cruzada y una búsqueda de cuadrícula para los mejores parámetros es un poco complicado, así que no voy a entrar en ello aquí). El LinearSVC es un algoritmo de clasificación de texto estándar.
Por último, se predice la categoría de los tweets:
def predict(pipe, tweet):
prediction = pipe.predict([tweet])
return prediction
Una vez más, el tweet tiene que estar en una lista, así que asumí que entraba en la función como una cadena.
Poner todo eso en una clase o lo que sea, y ya está. Al menos, con este ejemplo tan básico.
No he probado este código así que puede que no funcione si sólo copias y pegas, pero si quieres usar scikit-learn debería darte una idea de por dónde empezar.
EDIT: he intentado explicar los pasos con más detalle.