"Not"实际上是一个停止词,在代码中,如果一个令牌被移除,那么它就是一个停止词.您也可以通过查看Spacy停用词列表
来查看这一点
"not" in spacy.lang.en.stop_words.STOP_WORDS
或通过循环您的文档对象的令牌
for tok in nlp(text.lower()):
print(tok.text, tok.is_stop, tok.lemma_)
#hello False hello
#, False ,
#my True my
#earphones False earphone
#are True be
#still True still
#not True not
#working False work
#. False .
解
要解决这个问题,您应该从STOP_WORD列表中删除诸如"NOT"之类的目标单词.您可以这样做:
spacy.lang.en.stop_words.STOP_WORDS.remove("not")
然后,您可以重新运行代码,您将获得预期的结果:
import spacy
spacy.lang.en.stop_words.STOP_WORDS.remove("not")
nlp = spacy.load("en_core_web_sm")
def my_tokenizer(sentence):
return [token.lemma_ for token in tqdm(nlp(sentence.lower()), leave = False) if token.is_stop == False and token.is_alpha == True and token.lemma_ ]
sentence = "hello,my earphones are still not working."
results = my_tokenizer(sentence)
print(results)
#['hello', 'earphone', 'not', 'work']