Spacy教程-Matcher

Spacy教程-Matcher

根据模式规则匹配标记序列

Matcher允许您使用描述其标记属性的规则来查找单词和短语。规则可以引用标记注释(如文本或词性标记),以及词法属性(如Token.is_punct)。将匹配器应用于Doc使您能够访问上下文中匹配的令牌。有关结合规则和统计模型的深入示例和工作流,请参阅关于基于规则的匹配的使用指南

Pattern format

[
  {"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.init

创建基于规则的Matcher。如果设置validate=True,所有添加到匹配器的模式都将针对一个JSON模式进行验证,如果发现问题,则会引发一个MatchPatternError。这可能包括不正确的类型(例如,需要整数的字符串)或意外的属性名。

from spacy.matcher import Matcher
matcher = Matcher(nlp.vocab)

Matcher.call

DocSpan上查找与提供的模式匹配的所有标记序列。

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)

Matcher.len

获取添加到匹配器的规则的数量。注意,这只返回规则的数量(与id的数量相同),而不是单个模式的数量。

matcher = Matcher(nlp.vocab)
assert len(matcher) == 0
matcher.add("Rule", [[{"ORTH": "test"}]])
assert len(matcher) == 1

Matcher.contains

检查匹配器是否包含匹配ID的规则。

matcher = Matcher(nlp.vocab)
assert "Rule" not in matcher
matcher.add("Rule", [[{'ORTH': 'test'}]])
assert "Rule" in matcher

Matcher.add

向匹配器添加一个规则,由一个ID键、一个或多个模式和一个可选的回调函数组成。回调函数将接收参数matcher, doc,imatches。如果给定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)

Matcher.remove

从匹配器中删除一个规则。如果匹配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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发呆的比目鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值