Python 在Spacy中的引理后检测停止字
如何在Python 在Spacy中的引理后检测停止字,python,nlp,spacy,stop-words,lemmatization,Python,Nlp,Spacy,Stop Words,Lemmatization,如何在spaCy中进行词干分析和柠檬化后检测单词是否为停止词 服刑 s = "something good\nsomethings 2 bad" 在这种情况下,某物是一个停止词。显然(对我来说?Something和Something也是stopwords,但它需要在前面加词干。下面的脚本将说明第一个是正确的,但后一个不是 import spacy from spacy.tokenizer import Tokenizer nlp = spacy.load('en') tokenizer = T
spaCy
中进行词干分析和柠檬化后检测单词是否为停止词
服刑
s = "something good\nsomethings 2 bad"
在这种情况下,某物
是一个停止词。显然(对我来说?Something
和Something
也是stopwords,但它需要在前面加词干。下面的脚本将说明第一个是正确的,但后一个不是
import spacy
from spacy.tokenizer import Tokenizer
nlp = spacy.load('en')
tokenizer = Tokenizer(nlp.vocab)
s = "something good\nSomething 2 somethings"
tokens = tokenizer(s)
for token in tokens:
print(token.lemma_, token.is_stop)
返回:
something True
good False
"\n" False
Something False
2 False
somethings False
有没有办法通过
spaCy
API来检测spaCy中的停止词只是一组字符串,这些字符串在词汇表上设置了一个标志,即词汇表中与上下文无关的条目(用于英语停止列表)。该标志只是检查STOP\u WORDS中的文本是否为,这就是为什么的“something”返回True
是\u STOP
,而“something”不返回的原因
但是,您可以检查令牌的引理或小写形式是否是阻止列表的一部分,该列表可通过nlp.Defaults.stop_words
获得(即您使用的语言的默认值):
如果您正在使用spaCy v2.0,并且希望更优雅地解决这个问题,您还可以通过一个。您可以为属性选择任何名称,它将通过token.
,例如token.\u.is\u stop
:
from spacy.tokens import Token
from spacy.lang.en.stop_words import STOP_WORDS # import stop words from language data
stop_words_getter = lambda token: token.is_stop or token.lower_ in STOP_WORDS or token.lemma_ in STOP_WORDS
Token.set_extension('is_stop', getter=stop_words_getter) # set attribute with getter
nlp = spacy.load('en')
doc = nlp("something Something somethings")
assert doc[0]._.is_stop # this was a stop word before, and still is
assert doc[1]._.is_stop # this is now also a stop word, because its lowercase form is
assert doc[2]._.is_stop # this is now also a stop word, because its lemma is
谢谢,这很好,但我希望我不必使用Python级别的方法。能有低层次的东西就好了。你认为这是唯一的选择吗?如果你想要非常低级别的访问,Cython API实际上非常好用。您可以调用Lexeme.set_struct_attr(lex_ptr,attr_id,attr_value)
在Lexeme上设置一个值。通过使用vocab.get()
或从doc.c[i].lex
查找词素,可以获得指向该词素的指针。对于后者,您需要通过const进行转换以进行修改,因为相同类型的所有标记都指向相同的lexeme结构。词素是共享的这一事实解释了为什么停止词的行为与它们一样:标记被设置在词素上,它由一个精确的字符串进行键控。
from spacy.tokens import Token
from spacy.lang.en.stop_words import STOP_WORDS # import stop words from language data
stop_words_getter = lambda token: token.is_stop or token.lower_ in STOP_WORDS or token.lemma_ in STOP_WORDS
Token.set_extension('is_stop', getter=stop_words_getter) # set attribute with getter
nlp = spacy.load('en')
doc = nlp("something Something somethings")
assert doc[0]._.is_stop # this was a stop word before, and still is
assert doc[1]._.is_stop # this is now also a stop word, because its lowercase form is
assert doc[2]._.is_stop # this is now also a stop word, because its lemma is