【发布时间】:2020-05-13 15:37:43
【问题描述】:
我自定义了一个 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)。我需要做什么才能将自定义规则应用于按前缀/中缀/后缀拆分的标记?
【问题讨论】:
标签: python tokenize spacy prefix