spaCy类:Matcher
Matcher 允许您使用描述其标记属性的规则来查找单词和短语。规则可以引用标记注释(如文本或词性标记),以及词法属性,如 Token.is_punct。 将匹配器应用于文档可以让您访问上下文中匹配的标记。
添加到匹配器的模式由字典列表组成。 每个字典描述一个标记及其属性。 可用的令牌模式键对应于许多令牌属性。 基于规则的匹配支持的属性有:
属性 | 描述 |
---|---|
ORTH | 令牌里连续的精准文本。 值类型:str |
TEXT | 令牌里连续的精准文本。 值类型:str |
NORM | 令牌文本的标准化格式。 值类型:str |
LOWER | 令牌文本的小写格式。 值类型:str |
LENGTH | 令牌文本的长度。 值类型:int |
IS_ALPHA , IS_ASCII , IS_DIGIT | 令牌文本是否包含字母、ASCII 码、数字。 值类型:bool |
IS_LOWER , IS_UPPER , IS_TITLE | 令牌文本是否包含小写、大写、首字母大写。 值类型:bool |
IS_PUNCT , IS_SPACE , IS_STOP | 令牌是否是标点符号、空格、停用词。 值类型:bool |
IS_SENT_START | 令牌是否是句首。 值类型:bool |
LIKE_NUM , LIKE_URL , LIKE_EMAIL | 令牌是否包含像数字, URL, E-mail。 值类型:bool |
SPACY | 令牌是否包含尾随空格。 值类型:bool |
POS , TAG , MORPH , DEP , LEMMA , SHAPE | 令牌的单体和扩展的词性标签、形态分析、依赖关系标签、引理、形状。 值类型:str |
ENT_TYPE | 令牌的实体标签。 值类型:str |
ENT_IOB | 令牌的实体标记的 IOB 部分。 值类型:str |
ENT_ID | 令牌的实体 ID (ent_id )。值类型:str |
ENT_KB_ID | 令牌的实体知识库ID (ent_kb_id ).值类型:str |
_ | 自定义扩展属性中的属性 值类型:Dict[str, Any] |
OP | 运算符或量词,用于确定匹配令牌模式的频率。 值类型:str |
Matcher.add 方法
向匹配器添加规则,该规则由 ID 键、一个或多个模式以及用于处理匹配项的可选回调函数组成。回调函数将接收参数匹配器、文档、i 和匹配项。如果给定 ID 已存在模式,则将扩展模式。on_match回调将被覆盖。演示代码如下
1 2 3 |
patterns = [[{"TEXT": "Google"}, {"TEXT": "Now"}], [{"TEXT": "GoogleNow"}]] - matcher.add("GoogleNow", on_match, *patterns) + matcher.add("GoogleNow", patterns, on_match=on_match) |
名称 | 描述 |
---|---|
match_id | 您的匹配规则的ID。 值类型:str |
patterns | 匹配规则。 值类型:List[List[Dict[str, Any]]] |
keyword-only | |
on_match | 用于处理匹配项的回调函数。 值类型:[Callable[[Matcher,Doc, int, List[tuple], Any]] 可选 |
greedy V3.0 | 可选的贪婪匹配过滤器。 可以是“第一个”或“最长”。 值类型:[str] 可选 |
Matcher.remove 方法
移除匹配器里的规则,如果规则ID不存在会返回 KeyError。
名称 | 描述 |
---|---|
key | 规则ID。 值类型:str |
简单示例如下
这个示例是把内容包含¥及后边金额查找出来,并输出规则名、出现开始结束位置及匹配文本,代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import spacy from spacy.matcher import Matcher nlp = spacy.load('zh_core_web_lg') doc = nlp( "在1990年,一份豆腐脑可能只要¥0.5。" "现在一份豆腐脑可能要¥5左右了。" ) matcher = Matcher(nlp.vocab) pattern =[{"TEXT": "¥"}, {"LIKE_NUM": True}] matcher.add("Price", [pattern]) matches = matcher(doc) print(matches) for match_id, start, end in matches: string_id = nlp.vocab.strings[match_id] # Get string representation span = doc[start:end] # The matched span print( string_id, start, end, span.text) |
返回结果如下
1 2 |
Price 9 11 ¥0.5 Price 18 20 ¥5 |