Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以将自定义令牌规则应用于spaCy中按前缀拆分的令牌吗?_Python_Tokenize_Spacy_Prefix - Fatal编程技术网

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

Python 我可以将自定义令牌规则应用于spaCy中按前缀拆分的令牌吗?,python,tokenize,spacy,prefix,Python,Tokenize,Spacy,Prefix,我定制了一个spaCy标记器,带有额外的规则和前缀,分别将w/和f/视为,带有和for。前缀正确地将它们分开,但是引理和规范的自定义规则没有在这种情况下应用 下面是代码的摘录 def create_tokenizer(nlp): rules = dict(nlp.Defaults.tokenizer_exceptions) rules.update({ 'w/': [{ORTH: 'w/', LEMMA: 'with', NORM: 'with'}],

我定制了一个spaCy
标记器
,带有额外的规则和前缀,分别将
w/
f/
视为
,带有
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'

这个w/那个
的情况下,
w/
被拆分,但它没有应用自定义规则(即
规范
w/
而不是
)。要将自定义规则应用于按前缀/中缀/后缀拆分的令牌,我需要做什么?

不幸的是,在spacy v2中,无法将前缀和后缀也作为例外进行分析。为了支持这样的情况,标记器异常将在即将发布的spacy v3版本中得到更广泛的处理,但我不知道何时发布


我认为在spacy v2中,最好的方法是使用一个快速的后处理组件,将引理/范数分配给单独的令牌,如果它们与ORH模式匹配。

啊,那太糟糕了。我将为这些异常执行自定义管道组件。谢谢
>>> doc = nlp("This w/that")
>>> doc[1]
w/
>>> doc[1].norm_
'w/'