Je suis nouveau dans scikit-learn et j'utilisais TfidfVectorizer
pour trouver les valeurs tfidf des termes dans un ensemble de documents. J'ai utilisé le code suivant pour obtenir le même.
vectorizer = TfidfVectorizer(stop_words=u'english',ngram_range=(1,5),lowercase=True)
X = vectorizer.fit_transform(lectures)
Maintenant, si j'imprime X, je peux voir toutes les entrées dans la matrice, mais comment puis-je trouver les n meilleures entrées en fonction du score tfidf. En plus de cela, y a-t-il une méthode qui m'aidera à trouver les n meilleures entrées en fonction du score tfidf par ngram, c'est-à-dire les meilleures entrées parmi unigram, bigram, trigram et ainsi de suite?
Depuis la version 0.15, la pondération globale des termes appris par un TfidfVectorizer
est accessible via l'attribut idf_
, qui renverra un tableau de longueur égale à la dimension de l'entité. Triez les entités par cette pondération pour obtenir les entités pondérées les plus performantes:
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
Production:
[u'food', u'drink']
Le deuxième problème d'obtenir les fonctionnalités principales par ngram peut être fait en utilisant la même idée, avec quelques étapes supplémentaires pour diviser les fonctionnalités en différents groupes:
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
Production:
1-gram top: [u'drink', u'food']
2-gram top: [u'some drink', u'some food']