Puis-je utiliser CountVectorizer dans scikit-apprendre à compter de la fréquence des documents qui n'ont pas été utilisés pour extraire les jetons?
J'ai travaillé avec le CountVectorizer
classe dans scikit-learn.
Je comprends que si l'on utilise de la manière montrée ci-dessous, le résultat final sera composé d'un tableau contenant des comtes de fonctionnalités, ou des jetons.
Ces jetons sont extraites à partir d'un ensemble de mots-clés, c'est à dire
tags = [
"python, tools",
"linux, tools, ubuntu",
"distributed systems, linux, networking, tools",
]
La prochaine étape est:
from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer(tokenizer=tokenize)
data = vec.fit_transform(tags).toarray()
print data
Où l'on se
[[0 0 0 1 1 0]
[0 1 0 0 1 1]
[1 1 1 0 1 0]]
C'est bien, mais ma situation est un peu différente.
Je veux extraire les caractéristiques de la même façon que ci-dessus, mais je ne veux pas les lignes de data
être les mêmes documents que les caractéristiques ont été extraites à partir d'.
En d'autres termes, comment puis-je obtenir compte d'un autre ensemble de documents, disons,
list_of_new_documents = [
["python, chicken"],
["linux, cow, ubuntu"],
["machine learning, bird, fish, pig"]
]
Et obtenez:
[[0 0 0 1 0 0]
[0 1 0 0 0 1]
[0 0 0 0 0 0]]
J'ai lu la documentation de la CountVectorizer
classe, et est venu à travers la vocabulary
argument, qui est une cartographie des termes de fonctionnalité indices. Je n'arrive pas à obtenir cet argument pour m'aider, cependant.
Tout conseil est le bienvenue.
PS: tout le crédit en raison de Matthias Friedrich Blog pour l'exemple j'ai utilisé ci-dessus.
Vous devez vous connecter pour publier un commentaire.
Vous avez raison,
vocabulary
est ce que vous voulez. Il fonctionne comme ceci:De sorte que vous passer à un dict de vos fonctions que les touches.
Si vous avez utilisé
CountVectorizer
sur un ensemble de documents et alors vous voulez utiliser l'ensemble des fonctionnalités de ces documents pour un nouveau jeu, utilisez lavocabulary_
attribut de l'original de votre CountVectorizer et de le passer à la nouvelle. Donc dans votre exemple, vous pourriez fairepour créer un nouveau générateur de jetons en utilisant le vocabulaire de votre premier.
vocabulary_
méthode de monté vectorizer est.CountVectorizer
avec le vocabulaire original, vous ne pourriez pas vous suffit d'appeler.transform()
sur le nouveau document d'origine avec le vectorizer?Vous devriez appeler
fit_transform
ou tout simplementfit
sur votre vocabulaire original source, de sorte que le vectorizer apprend un vocabulaire.Alors vous pouvez utiliser cette
fit
vectorizer sur les nouvelles sources de données via letransform()
méthode.Vous pouvez obtenir le vocabulaire produite par l'ajustement (c'est à dire de la cartographie de la parole à l'ID de jeton) via
vectorizer.vocabulary_
(en supposant que vous avez un nom à votreCountVectorizer
le nomvectorizer
.Pour vérifier que
CountVectorizer
est en utilisant le vocabulaire appris detags
surnew_docs
: imprimervect.vocabulary_
de nouveau ou de comparer la sortie denew_docs.toarray()
à celle detags.toarray()