当两个单词仅设置为单独的"TEXT"条件对象时,空间匹配器返回正确答案。这是为什么呢?



我正在尝试设置匹配器查找单词'iPhone X'。

示例代码说我应该遵循下面的规则。

import spacy
# Import the Matcher
from spacy.matcher import Matcher
nlp = spacy.load("en_core_web_sm")
doc = nlp("Upcoming iPhone X release date leaked as Apple reveals pre-orders")
# Initialize the Matcher with the shared vocabulary
matcher = Matcher(nlp.vocab)
# Create a pattern matching two tokens: "iPhone" and "X"
pattern = [{"TEXT": "iPhone"}, {"TEXT": "X"}]
# Add the pattern to the matcher
matcher.add("IPHONE_X_PATTERN", None, pattern)
# Use the matcher on the doc
matches = matcher(doc)
print("Matches:", [doc[start:end].text for match_id, start, end in matches])

我尝试了另一种方法,把like放在下面。

# Create a pattern matching two tokens: "iPhone" and "X"
pattern = [{"TEXT": "iPhone X"}]
# Add the pattern to the matcher
matcher.add("IPHONE_X_PATTERN", None, pattern)

为什么第二种方法不起作用?我假设如果我把"iPhone"one_answers"X"两个单词放在一起,它可能会以同样的方式工作,因为它会把中间有空格的单词视为一个长而独特的单词。但它没有。

我能想到的可能原因是,匹配器条件应该是一个没有空格的单词。我说的对吗?或者还有其他原因导致第二种方法不起作用?

谢谢。

答案在于space如何标记字符串:

>>> print([t.text for t in doc])
['Upcoming', 'iPhone', 'X', 'release', 'date', 'leaked', 'as', 'Apple', 'reveals', 'pre', '-', 'orders']

如您所见,iPhoneX是单独的令牌。参见Matcher参考:

添加到Matcher中的模式由一个字典列表组成。每个字典描述一个标记和它的属性。

因此,不能在一个令牌定义中同时使用它们。

相关内容

  • 没有找到相关文章