我可以在spaCy中将自定义令牌规则应用于按前缀拆分的令牌吗?

时间:2020-05-13 15:37:43

标签: python tokenize spacy prefix

我定制了带有其他规则和前缀的spaCy Tokenizer,将w/f/分别视为withfor。前缀正确地将它们分割开了,但是在这种情况下,没有应用引理和规范的自定义规则。

这是代码的摘录。

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/被拆分,但是没有应用自定义规则(即NORMw/with)。我该怎么做才能将自定义规则应用于通过前缀/中缀/后缀分隔的令牌?

1 个答案:

答案 0 :(得分:2)

不幸的是,无法将前缀和后缀也作为spacy v2中的异常进行分析。为了支持这种情况,在即将发布的spacy v3版本中将更一般地处理Tokenizer异常,但是我不知道何时发布该版本。

我认为您在spacy v2中可以做的最好的事情就是拥有一个快速的后处理组件,该组件可以将引理/范数分配给单个标记(如果它们与orth模式匹配)。