6

Desidero aggiungere ancora alcune parole a stop_words in TfidfVectorizer. Ho seguito la soluzione in Adding words to scikit-learn's CountVectorizer's stop list. La mia lista delle parole d'arresto contiene ora sia le parole d'arresto 'inglese' che le parole di arresto che ho specificato. Ma ancora TfidfVectorizer non accetta la mia lista di termini di stop e posso ancora vedere quelle parole nella mia lista di funzionalità. Qui di seguito è il mio codiceaggiunta di parole all'elenco di stop_words in TfidfVectorizer in sklearn

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) 

Ho anche cercato di impostare stop_words in TfidfVectorizer come stop_words = my_stop_words. Ma ancora non funziona. Per favore aiuto.

+0

Ho usato il tuo codice e ho eseguito come [qui] (https://gist.github.com/anonymous/043a0099b4c388d0686d). Ho ottenuto il risultato atteso. Puoi fornire maggiori dettagli? –

+0

Sto classificando i tweet che contengono URL. Ora le mie funzionalità che estraggo usando SelectKBest contengono quegli URL in pezzi. Quindi ho pensato di aggiungere quegli URL nel mio elenco di parole di arresto in modo che venga rimosso dal mio set di funzionalità. Ho aggiunto quegli URL come mostrato sopra. – ac11

+0

Ecco come il mio elenco di parole fermata assomiglia: frozenset ([ '', 'wA4qNj2o0b', 'all', 'fai5w3nBgo', 'Ikq7p9ElUW', '9W6GbM0MjL', 'quattro', 'WkOI43bsVj', 'x88VDFBzkO' , "cui", "YqoLBzajjo", "NVXydiHKSC", "HdjXav51vI", "q0YoiC0QCD", "a", "cTIYpRLarr", "nABIG7dAlr", "sotto", "6JF33FZIYU", "molto", "AVFWjAWsbF"]) – ac11

risposta

1

Questa risposta qui: https://stackoverflow.com/a/24386751/732396

Anche se sklearn.feature_extraction.text.ENGLISH_STOP_WORDS è un frozenset, è possibile effettuare una copia di esso e aggiungere nuove parole, poi passa quella variabile in all'argomento stop_words come una lista.

0

Ecco un esempio:

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_) 

In questo esempio, ho creato i vettori TFIDF per due documenti di esempio:

"This is a green apple." 
"This is a machine learning book." 

Per impostazione predefinita, this, is, a e an sono tutti nell'elenco ENGLISH_STOP_WORDS. E ho anche aggiunto book all'elenco delle parole di arresto. Questa è l'uscita:

(0, 1) 0.707106781187 
(0, 0) 0.707106781187 
(1, 3) 0.707106781187 
(1, 2) 0.707106781187 
{'green': 1, 'machine': 3, 'learning': 2, 'apple': 0} 

Come si vede, la parola book viene anche rimosso dalla lista delle caratteristiche perché elenchiamo come una parola di arresto. Di conseguenza, tfidfvectorizer ha accettato la parola aggiunta manualmente come parola di arresto e ha ignorato la parola al momento della creazione dei vettori.