tfidfvectorizer tfidftransformer idf countvectorizer python numpy scikit-learn tf-idf top-n

python - countvectorizer - tfidftransformer



Cómo ver las principales n entradas de la matriz de documento de término después de tfidf en scikit-learn (1)

Desde la versión 0.15, se puede acceder a la ponderación de término global de las características aprendidas por un TfidfVectorizer a través del atributo idf_ , que devolverá una matriz de longitud igual a la dimensión de la característica. Ordena las características por esta ponderación para obtener las características más ponderadas:

from sklearn.feature_extraction.text import TfidfVectorizer import numpy as np lectures = ["this is some food", "this is some drink"] vectorizer = TfidfVectorizer() X = vectorizer.fit_transform(lectures) indices = np.argsort(vectorizer.idf_)[::-1] features = vectorizer.get_feature_names() top_n = 2 top_features = [features[i] for i in indices[:top_n]] print top_features

Salida:

[u''food'', u''drink'']

El segundo problema de obtener las funciones principales de ngram se puede hacer usando la misma idea, con algunos pasos adicionales para dividir las funciones en diferentes grupos:

from sklearn.feature_extraction.text import TfidfVectorizer from collections import defaultdict lectures = ["this is some food", "this is some drink"] vectorizer = TfidfVectorizer(ngram_range=(1,2)) X = vectorizer.fit_transform(lectures) features_by_gram = defaultdict(list) for f, w in zip(vectorizer.get_feature_names(), vectorizer.idf_): features_by_gram[len(f.split('' ''))].append((f, w)) top_n = 2 for gram, features in features_by_gram.iteritems(): top_features = sorted(features, key=lambda x: x[1], reverse=True)[:top_n] top_features = [f[0] for f in top_features] print ''{}-gram top:''.format(gram), top_features

Salida:

1-gram top: [u''drink'', u''food''] 2-gram top: [u''some drink'', u''some food'']

Soy nuevo en scikit-learn, y estaba usando TfidfVectorizer para encontrar los valores tfidf de los términos en un conjunto de documentos. Utilicé el siguiente código para obtener el mismo.

vectorizer = TfidfVectorizer(stop_words=u''english'',ngram_range=(1,5),lowercase=True) X = vectorizer.fit_transform(lectures)

Ahora, si imprimo X, puedo ver todas las entradas en la matriz, pero ¿cómo puedo encontrar las mejores n entradas basadas en la puntuación tfidf? Además, ¿existe algún método que me ayude a encontrar las mejores n entradas basadas en la puntuación tfidf por ngram, es decir, las principales entradas entre unigram, bigram, trigram, etc.?