¿Cómo utilizar el clasificador de chispas Naive Bayes para la clasificación de texto con IDF?

Quiero convertir documentos de texto en vectores de características usando tf-idf, y luego entrenar un algoritmo ingenuo de bayes para clasificarlos.

Puedo cargar fácilmente mis archivos de texto sin las etiquetas y usar HashingTF () para convertirlo en un vector, y luego usar IDF () para ponderar las palabras de acuerdo con su importancia. Pero si hago eso me deshago de las etiquetas y parece que es imposible recombinar la etiqueta con el vector a pesar de que el orden es el mismo.

Por otro lado, puedo llamar a HashingTF () en cada documento individual y mantener las etiquetas, pero no puedo llamar a IDF () ya que requiere todo el corpus de documentos (y las etiquetas se interpondrían en el camino) .

La documentación de chispa para ingenuos bayes solo tiene un ejemplo donde los puntos ya están etiquetados y vectorizados, por lo que no es de mucha ayuda.

También eché un vistazo a esta guía:http://help.mortardata.com/technologies/spark/train_a_machine_learning_model pero aquí solo aplica la función hash en cada documento sin idf.

Entonces, mi pregunta es si hay una manera de no solo vectorizar sino también ponderar las palabras usando idf para el ingenuo clasificador bayes. El principal problema parece ser la insistencia de chispas en aceptar solo los rdds de puntos de etiqueta como entrada para NaiveBayes.

def parseLine(line):
    label = row[1] # the label is the 2nd element of each row
    features = row[3] # the text is the 4th element of each row
    features = tokenize(features)
    features = hashingTF.transform(features)
    return LabeledPoint(label, features)
labeledData = data1.map(parseLine)

Respuestas a la pregunta(1)

Su respuesta a la pregunta