当前位置:   article > 正文

Spacy教程-Matcher_spacy matcher

spacy matcher

Spacy教程-Matcher

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

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

Pattern format

[
  {"LOWER": "i"},
  {"LEMMA": {"IN": ["like", "love"]}},
  {"POS": "NOUN", "OP": "+"}
]
  • 1
  • 2
  • 3
  • 4
  • 5

添加到Matcher 的模式由词典列表组成。每个词典都描述一个token及其属性。可用的Token模式键对应于许多Token属性。基于规则的匹配支持的属性是:


运算符和量词定义了标记模式匹配的频率:

[
  {"POS": "ADJ", "OP": "*"},
  {"POS": "NOUN", "OP": "+"}
]
  • 1
  • 2
  • 3
  • 4

! 通过要求它精确匹配0次来对模式进行。
? 通过允许匹配0或1次,使模式成为可选的。
**+**要求模式匹配1次或更多次。
*****允许匹配0次或更多次。

Token模式还可以映射到一个属性字典,而不是单个值,以指示期望的值是否是列表的成员,或者它与另一个值的比较方式。

[
  {"LEMMA": {"IN": ["like", "love", "enjoy"]}},
  {"POS": "PROPN", "LENGTH": {">=": 10}},
]
  • 1
  • 2
  • 3
  • 4

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)
  • 1
  • 2

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Matcher.len

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

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

Matcher.contains

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

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

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

修改为:

patterns = [[{"TEXT": "Google"}, {"TEXT": "Now"}], [{"TEXT": "GoogleNow"}]]
- matcher.add("GoogleNow", on_match, *patterns)
+ matcher.add("GoogleNow", patterns, on_match=on_match)
  • 1
  • 2
  • 3

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")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

参考

https://spacy.io/api/matcher

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/694223
推荐阅读
相关标签
  

闽ICP备14008679号