Saltar al contenido

Scikit Learn TfidfVectorizer: cómo obtener los n términos principales con la puntuación tf-idf más alta

Es fundamental comprender el código correctamente previamente a usarlo a tu trabajo y si ttienes algo que aportar puedes compartirlo con nosotros.

Solución:

Tienes que hacer un poco de una canción y bailar para obtener las matrices como arreglos numpy, pero esto debería hacer lo que estás buscando:

feature_array = np.array(tfidf.get_feature_names())
tfidf_sorting = np.argsort(response.toarray()).flatten()[::-1]

n = 3
top_n = feature_array[tfidf_sorting][:n]

Esto me da:

array([u'fruit', u'travellers', u'jupiter'], 
  dtype='

El argsort call es realmente útil, aquí están los documentos para ello. Tenemos que hacer [::-1] porque argsort solo admite la clasificación de pequeño a grande. Nosotros llamamos flatten para reducir las dimensiones a 1d para que los índices ordenados se puedan usar para indexar la característica 1d array. Tenga en cuenta que incluyendo la llamada a flatten solo funcionará si está probando un documento a la vez.

Además, en otra nota, ¿quisiste decir algo como tfs = tfidf.fit_transform(t.split("nn"))? De lo contrario, cada término en la línea múltiple string está siendo tratado como un "documento". Utilizando nn en cambio, significa que en realidad estamos viendo 4 documentos (uno para cada línea), lo que tiene más sentido cuando piensas en tfidf.

Solución usando la propia matriz dispersa (sin .toarray())!

import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer

tfidf = TfidfVectorizer(stop_words='english')
corpus = [
    'I would like to check this document',
    'How about one more document',
    'Aim is to capture the key words from the corpus',
    'frequency of words in a document is called term frequency'
]

X = tfidf.fit_transform(corpus)
feature_names = np.array(tfidf.get_feature_names())


new_doc = ['can key words in this new document be identified?',
           'idf is the inverse document frequency caculcated for each of the words']
responses = tfidf.transform(new_doc)


def get_top_tf_idf_words(response, top_n=2):
    sorted_nzs = np.argsort(response.data)[:-(top_n+1):-1]
    return feature_names[response.indices[sorted_nzs]]
  
print([get_top_tf_idf_words(response,2) for response in responses])

#[array(['key', 'words'], dtype='

Puntuaciones y reseñas

Si piensas que ha resultado útil este artículo, te agradeceríamos que lo compartas con el resto desarrolladores de esta forma nos ayudas a difundir este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Respuestas a preguntas comunes sobre programacion y tecnología