我可以将自定义令牌规则应用于 spaCy 中按前缀拆分的令牌吗?
Can I apply custom token rules to tokens split by prefixes in spaCy?
我用额外的规则和前缀自定义了一个 spaCy Tokenizer
,将 w/
和 f/
分别视为 with
和 for
。前缀正确地将它们分开,但在这种情况下未应用引理和规范的自定义规则。
这是代码的摘录。
def create_tokenizer(nlp):
rules = dict(nlp.Defaults.tokenizer_exceptions)
rules.update({
'w/': [{ORTH: 'w/', LEMMA: 'with', NORM: 'with'}],
'W/': [{ORTH: 'W/', LEMMA: 'with', NORM: 'with'}],
'f/': [{ORTH: 'f/', LEMMA: 'for', NORM: 'for'}],
'F/': [{ORTH: 'F/', LEMMA: 'for', NORM: 'for'}],
})
custom_prefixes = (
r"[wW]/",
r"[fF]/",
)
prefix_re = spacy.util.compile_prefix_regex(nlp.Defaults.prefixes + custom_prefixes)
return Tokenizer(
nlp.vocab,
rules=rules,
prefix_search=prefix_re.search,
)
这是结果。
>>> doc = nlp("This w/ that")
>>> doc[1]
w/
>>> doc[1].norm_
'with'
>>> doc = nlp("This w/that")
>>> doc[1]
w/
>>> doc[1].norm_
'w/'
在 This w/that
的情况下,w/
被拆分,但它没有应用自定义规则(即 NORM
是 w/
而不是 with
)。我需要做什么才能将自定义规则应用于由 prefixes/infixes/suffixes 拆分的令牌?
不幸的是,在 spacy v2 中无法将前缀和后缀也作为异常进行分析。 Tokenizer 异常将在即将发布的 spacy v3 版本中得到更普遍的处理,以支持这样的情况,但我不知道此时可能何时发布。
我认为你在 spacy v2 中能做的最好的事情是有一个快速的后处理组件,如果它们匹配 orth 模式,它将 lemmas/norms 分配给单个标记。
我用额外的规则和前缀自定义了一个 spaCy Tokenizer
,将 w/
和 f/
分别视为 with
和 for
。前缀正确地将它们分开,但在这种情况下未应用引理和规范的自定义规则。
这是代码的摘录。
def create_tokenizer(nlp):
rules = dict(nlp.Defaults.tokenizer_exceptions)
rules.update({
'w/': [{ORTH: 'w/', LEMMA: 'with', NORM: 'with'}],
'W/': [{ORTH: 'W/', LEMMA: 'with', NORM: 'with'}],
'f/': [{ORTH: 'f/', LEMMA: 'for', NORM: 'for'}],
'F/': [{ORTH: 'F/', LEMMA: 'for', NORM: 'for'}],
})
custom_prefixes = (
r"[wW]/",
r"[fF]/",
)
prefix_re = spacy.util.compile_prefix_regex(nlp.Defaults.prefixes + custom_prefixes)
return Tokenizer(
nlp.vocab,
rules=rules,
prefix_search=prefix_re.search,
)
这是结果。
>>> doc = nlp("This w/ that")
>>> doc[1]
w/
>>> doc[1].norm_
'with'
>>> doc = nlp("This w/that")
>>> doc[1]
w/
>>> doc[1].norm_
'w/'
在 This w/that
的情况下,w/
被拆分,但它没有应用自定义规则(即 NORM
是 w/
而不是 with
)。我需要做什么才能将自定义规则应用于由 prefixes/infixes/suffixes 拆分的令牌?
不幸的是,在 spacy v2 中无法将前缀和后缀也作为异常进行分析。 Tokenizer 异常将在即将发布的 spacy v3 版本中得到更普遍的处理,以支持这样的情况,但我不知道此时可能何时发布。
我认为你在 spacy v2 中能做的最好的事情是有一个快速的后处理组件,如果它们匹配 orth 模式,它将 lemmas/norms 分配给单个标记。