Python 在spaCy文档中访问超出范围的单词:为什么它能工作?
我在学spaCy,我在玩spaCy 我有:Python 在spaCy文档中访问超出范围的单词:为什么它能工作?,python,nlp,spacy,matcher,pos-tagger,Python,Nlp,Spacy,Matcher,Pos Tagger,我在学spaCy,我在玩spaCy 我有: 一个非常基本的句子(“白色牧羊犬”) 匹配器对象,搜索模式(“白色牧羊犬”) 显示匹配项以及匹配前的单词和词组的打印 我只是想检查如何处理我期望得到的索引超出范围异常,因为在比赛之前没有任何异常。我没料到它会起作用,但它确实起作用了,并且在比赛结束后返回了“狗”。。。现在我很困惑 看起来spaCy使用的是循环列表(我想是deque) 这需要一个语言模型才能运行,如果您想复制它,可以使用以下命令行安装它: python-mspacy下载en\u co
- 一个非常基本的句子(“白色牧羊犬”)
- 匹配器对象,搜索模式(“白色牧羊犬”)
- 显示匹配项以及匹配前的单词和词组的打印
python-mspacy下载en\u core\u web\u md
这就是代码
import spacy
from spacy.matcher import Matcher
# Loading language model
nlp = spacy.load("en_core_web_md")
# Initialising with shared vocab
matcher = Matcher(nlp.vocab)
# Adding statistical predictions
matcher.add("DOG", None, [{"LOWER": "white"}, {"LOWER": "shepherd"}]) # searching for white shepherd
doc = nlp("white shepherd dog")
for match_id, start, end in matcher(doc):
span = doc[start:end]
print("Matched span: ", span.text)
# Get previous token and its POS
print("Previous token: ", doc[start - 1].text, doc[start - 1].pos_) # I would expect the error here
我得到以下信息:
>>> Matched span: white shepherd
>>> Previous token: dog PROPN
有人能解释一下发生了什么事吗
谢谢 您正在索引0-1处查找一个令牌,该令牌的计算结果为-1,这是最后一个令牌 我建议使用
Token.nbor
方法查找跨度之前的第一个标记,如果之前没有标记,则将其设置为None或空字符串
import spacy
from spacy.matcher import Matcher
# Loading language model
nlp = spacy.load("en_core_web_md")
# Initialising with shared vocab
matcher = Matcher(nlp.vocab)
# Adding statistical predictions
matcher.add("DOG", None, [{"LOWER": "white"}, {"LOWER": "shepherd"}]) # searching for white shepherd
doc = nlp("white shepherd dog")
for match_id, start, end in matcher(doc):
span = doc[start:end]
print("Matched span: ", span.text)
try:
nbor_tok = span[0].nbor(-1)
print("Previous token:", nbor_tok, nbor_tok.pos_)
except IndexError:
nbor_tok = ''
print("Previous token: None None")
您正在索引0-1处查找一个令牌,该令牌的计算结果为-1,这是最后一个令牌 我建议使用
Token.nbor
方法查找跨度之前的第一个标记,如果之前没有标记,则将其设置为None或空字符串
import spacy
from spacy.matcher import Matcher
# Loading language model
nlp = spacy.load("en_core_web_md")
# Initialising with shared vocab
matcher = Matcher(nlp.vocab)
# Adding statistical predictions
matcher.add("DOG", None, [{"LOWER": "white"}, {"LOWER": "shepherd"}]) # searching for white shepherd
doc = nlp("white shepherd dog")
for match_id, start, end in matcher(doc):
span = doc[start:end]
print("Matched span: ", span.text)
try:
nbor_tok = span[0].nbor(-1)
print("Previous token:", nbor_tok, nbor_tok.pos_)
except IndexError:
nbor_tok = ''
print("Previous token: None None")