偶尔,我如何确保始终将特定字符视为完整令牌?

为了方便起见,我希望像“€”,“ $”或“¥”这样的字符始终被视为令牌。但是,似乎有时它们已成为更大令牌的一部分。 例如,这很好(两个令牌)

>>> len(nlp("100€"))
2

但是以下不是我想要的(在这种情况下,我也想获得两个令牌):

>>> len(nlp("N€"))
1

我怎样才能通过欺骗实现这一目标? 顺便说一句,不要太关注货币示例。我遇到了其他与数字或货币无关的字符的问题。问题是如何确保始终将字符视为完整标记,而不将其粘在句子中的其他字符串上。

lyl513317658 回答:偶尔,我如何确保始终将特定字符视为完整令牌?

请参见here

Spacy的令牌生成器的工作原理是遍历用空格分隔的子字符串,并查找诸如前缀或后缀之类的东西,以将这些部分分开。 您可以按照上面的链接中的说明添加自定义前缀和后缀。

我们可以如下使用它:

import spacy
nlp = spacy.load('en_core_web_lg')

doc = nlp("N€")
print([t for t in doc])
#[N€]

suffixes = nlp.Defaults.suffixes + ("€",)

suffix_regex = spacy.util.compile_suffix_regex(suffixes)
nlp.tokenizer.suffix_search = suffix_regex.search


doc = nlp("N€")
print([t for t in doc])
#[N,€]
本文链接:https://www.f2er.com/3042000.html

大家都在问