Je veux ajouter quelques mots supplémentaires à stop_words dans TfidfVectorizer. J'ai suivi la solution dans Ajout de mots à la liste d'arrêt de CountVectorizer de scikit-learn . Ma liste de mots vides contient désormais les mots vides "anglais" et les mots vides que j'ai spécifiés. Mais TfidfVectorizer n'accepte toujours pas ma liste de mots vides et je peux toujours voir ces mots dans ma liste de fonctionnalités. Ci-dessous mon code
from sklearn.feature_extraction import text
my_stop_words = text.ENGLISH_STOP_WORDS.union(my_words)
vectorizer = TfidfVectorizer(analyzer=u'Word',max_df=0.95,lowercase=True,stop_words=set(my_stop_words),max_features=15000)
X= vectorizer.fit_transform(text)
J'ai également essayé de définir stop_words dans TfidfVectorizer comme stop_words = my_stop_words. Mais ça ne marche toujours pas. Veuillez aider.
Voici un exemple:
from sklearn.feature_extraction import text
from sklearn.feature_extraction.text import TfidfVectorizer
my_stop_words = text.ENGLISH_STOP_WORDS.union(["book"])
vectorizer = TfidfVectorizer(ngram_range=(1,1), stop_words=my_stop_words)
X = vectorizer.fit_transform(["this is an Apple.","this is a book."])
idf_values = dict(Zip(vectorizer.get_feature_names(), vectorizer.idf_))
# printing the tfidf vectors
print(X)
# printing the vocabulary
print(vectorizer.vocabulary_)
Dans cet exemple, j'ai créé les vecteurs tfidf pour deux exemples de documents:
"This is a green Apple."
"This is a machine learning book."
Par défaut, this
, is
, a
et an
sont tous dans le ENGLISH_STOP_WORDS
liste. Et, j'ai également ajouté book
à la liste des mots vides. Voici la sortie:
(0, 1) 0.707106781187
(0, 0) 0.707106781187
(1, 3) 0.707106781187
(1, 2) 0.707106781187
{'green': 1, 'machine': 3, 'learning': 2, 'Apple': 0}
Comme nous pouvons le voir, le mot book
est également supprimé de la liste des fonctionnalités car nous l'avons répertorié comme un mot d'arrêt. En conséquence, tfidfvectorizer a accepté le mot ajouté manuellement comme mot d'arrêt et a ignoré le mot au moment de la création des vecteurs.
On y répond ici: https://stackoverflow.com/a/24386751/732396
Même si sklearn.feature_extraction.text.ENGLISH_STOP_WORDS
est un frozenset, vous pouvez en faire une copie et ajouter vos propres mots, puis passer cette variable dans le stop_words
argument sous forme de liste.
Pour une utilisation avec scikit-learn, vous pouvez également toujours utiliser une liste:
from nltk.corpus import stopwords
stop = list(stopwords.words('english'))
stop.extend('myword1 myword2 myword3'.split())
vectorizer = TfidfVectorizer(analyzer = 'Word',stop_words=set(stop))
vectors = vectorizer.fit_transform(corpus)
...
Le seul inconvénient de cette méthode, par rapport à un ensemble, est que votre liste peut finir par contenir des doublons, c'est pourquoi je la reconvertis lorsque je l'utilise comme argument pour TfidfVectorizer