web-dev-qa-db-fra.com

Ajouter/supprimer des mots vides avec spacy

Quel est le meilleur moyen d'ajouter/supprimer des mots vides avec spacy? J'utilise token.is_stop function et souhaite apporter des modifications personnalisées à l'ensemble. Je regardais la documentation mais je n'ai rien trouvé concernant les mots vides. Merci!

22
E.K.

Vous pouvez les éditer avant de traiter votre texte comme ceci (voir cet article ):

>>> import spacy
>>> nlp = spacy.load("en")
>>> nlp.vocab["the"].is_stop = False
>>> nlp.vocab["definitelynotastopword"].is_stop = True
>>> sentence = nlp("the Word is definitelynotastopword")
>>> sentence[0].is_stop
False
>>> sentence[3].is_stop
True

Note: Cela semble fonctionner <= v1.8. Pour les versions plus récentes, voir d'autres réponses.

19
dantiston

À l'aide de Spacy 2.0.11, vous pouvez mettre à jour son ensemble de mots vides à l'aide de l'un des éléments suivants:

Pour ajouter un seul mot d'arrêt:

import spacy    
nlp = spacy.load("en")
nlp.Defaults.stop_words.add("my_new_stopword")

Pour ajouter plusieurs mots vides à la fois:

import spacy    
nlp = spacy.load("en")
nlp.Defaults.stop_words |= {"my_new_stopword1","my_new_stopword2",}

Pour supprimer un seul mot d'arrêt:

import spacy    
nlp = spacy.load("en")
nlp.Defaults.stop_words.remove("whatever")

Pour supprimer plusieurs mots vides à la fois:

import spacy    
nlp = spacy.load("en")
nlp.Defaults.stop_words -= {"whatever", "whenever"}

Remarque: pour voir le jeu actuel de mots vides, utilisez:

print(nlp.Defaults.stop_words)
14
Romain

Pour la version 2.0, j'ai utilisé ceci:

from spacy.lang.en.stop_words import STOP_WORDS

print(STOP_WORDS) # <- set of Spacy's default stop words

STOP_WORDS.add("your_additional_stop_Word_here")

for Word in STOP_WORDS:
    lexeme = nlp.vocab[Word]
    lexeme.is_stop = True

Cela charge tous les mots vides dans un ensemble.

Vous pouvez modifier vos mots vides en STOP_WORDS ou commencer par utiliser votre propre liste.

10
petezurich

Pour 2.0, utilisez ce qui suit:

for Word in nlp.Defaults.stop_words: Lex = nlp.vocab[Word] Lex.is_stop = True

1
harryhorn