web-dev-qa-db-fra.com

ajout de mots à la liste stop_words dans TfidfVectorizer dans sklearn

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.

14
ac11

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.

9
Pedram

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.

2
yanhan

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

0
user2589273