赞
踩
根据模式规则匹配标记序列
Matcher
允许您使用描述其标记属性的规则来查找单词和短语。规则可以引用标记注释(如文本或词性标记),以及词法属性(如Token.is_punct
)。将匹配器应用于Doc
使您能够访问上下文中匹配的令牌。有关结合规则和统计模型的深入示例和工作流,请参阅关于基于规则的匹配的使用指南。
[
{"LOWER": "i"},
{"LEMMA": {"IN": ["like", "love"]}},
{"POS": "NOUN", "OP": "+"}
]
添加到Matcher
的模式由词典列表组成。每个词典都描述一个token及其属性。可用的Token模式键对应于许多Token属性。基于规则的匹配支持的属性是:
运算符和量词定义了标记模式匹配的频率:
[
{"POS": "ADJ", "OP": "*"},
{"POS": "NOUN", "OP": "+"}
]
! 通过要求它精确匹配0次来对模式进行。
? 通过允许匹配0或1次,使模式成为可选的。
**+**要求模式匹配1次或更多次。
*****允许匹配0次或更多次。
Token模式还可以映射到一个属性字典,而不是单个值,以指示期望的值是否是列表的成员,或者它与另一个值的比较方式。
[
{"LEMMA": {"IN": ["like", "love", "enjoy"]}},
{"POS": "PROPN", "LENGTH": {">=": 10}},
]
IN:属性值是列表的成员。
NOT_IN:属性值不是列表的成员。
IS_SUBSET:属性值(用于MORPH或自定义列表属性)是列表的子集。
IS_SUPERSET:属性值(对于MORPH或自定义列表属性)是列表的超集。
INTERSECTS:属性值(用于MORPH或自定义列表属性)与列表有一个非空的交集。
==, >=, <=, >, <:属性值等于、大于或等于、小于或等于、大于或小于。
创建基于规则的Matcher
。如果设置validate=True
,所有添加到匹配器的模式都将针对一个JSON模式进行验证,如果发现问题,则会引发一个MatchPatternError。这可能包括不正确的类型(例如,需要整数的字符串)或意外的属性名。
from spacy.matcher import Matcher
matcher = Matcher(nlp.vocab)
在Doc
或Span
上查找与提供的模式匹配的所有标记序列。
from spacy.matcher import Matcher
matcher = Matcher(nlp.vocab)
pattern = [{"LOWER": "hello"}, {"LOWER": "world"}]
matcher.add("HelloWorld", [pattern])
doc = nlp("hello world!")
matches = matcher(doc)
获取添加到匹配器的规则的数量。注意,这只返回规则的数量(与id的数量相同),而不是单个模式的数量。
matcher = Matcher(nlp.vocab)
assert len(matcher) == 0
matcher.add("Rule", [[{"ORTH": "test"}]])
assert len(matcher) == 1
检查匹配器是否包含匹配ID的规则。
matcher = Matcher(nlp.vocab)
assert "Rule" not in matcher
matcher.add("Rule", [[{'ORTH': 'test'}]])
assert "Rule" in matcher
向匹配器添加一个规则,由一个ID键、一个或多个模式和一个可选的回调函数组成。回调函数将接收参数matcher
, doc
,i
和matches
。如果给定ID的模式已经存在,则模式将被扩展。一个on_match
回调将被覆盖。
def on_match(matcher, doc, id, matches):
print('Matched!', matches)
matcher = Matcher(nlp.vocab)
patterns = [
[{"LOWER": "hello"}, {"LOWER": "world"}],
[{"ORTH": "Google"}, {"ORTH": "Maps"}]
]
matcher.add("TEST_PATTERNS", patterns)
doc = nlp("HELLO WORLD on Google Maps.")
matches = matcher(doc)
修改为:
patterns = [[{"TEXT": "Google"}, {"TEXT": "Now"}], [{"TEXT": "GoogleNow"}]]
- matcher.add("GoogleNow", on_match, *patterns)
+ matcher.add("GoogleNow", patterns, on_match=on_match)
从匹配器中删除一个规则。如果匹配ID不存在则引发KeyError
。
matcher.add("Rule", [[{"ORTH": "test"}]])
assert "Rule" in matcher
matcher.remove("Rule")
assert "Rule" not in matcher
```![在这里插入图片描述](https://img-blog.csdnimg.cn/36d4fcfe1dea4501bd92a20dcb5dda6c.png)
## Matcher.get
检索为键存储的模式。返回一个包含回调和可用模式的(`on` `match`, `patterns`)元组。
```python
matcher.add("Rule", [[{"ORTH": "test"}]])
on_match, patterns = matcher.get("Rule")
https://spacy.io/api/matcher
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。