为了方便起见,我希望像“€”,“ $”或“¥”这样的字符始终被视为令牌。但是,似乎有时它们已成为更大令牌的一部分。 例如,这很好(两个令牌)
>>> len(nlp("100€"))
2
但是以下不是我想要的(在这种情况下,我也想获得两个令牌):
>>> len(nlp("N€"))
1
我怎样才能通过欺骗实现这一目标? 顺便说一句,不要太关注货币示例。我遇到了其他与数字或货币无关的字符的问题。问题是如何确保始终将字符视为完整标记,而不将其粘在句子中的其他字符串上。
为了方便起见,我希望像“€”,“ $”或“¥”这样的字符始终被视为令牌。但是,似乎有时它们已成为更大令牌的一部分。 例如,这很好(两个令牌)
>>> len(nlp("100€"))
2
但是以下不是我想要的(在这种情况下,我也想获得两个令牌):
>>> len(nlp("N€"))
1
我怎样才能通过欺骗实现这一目标? 顺便说一句,不要太关注货币示例。我遇到了其他与数字或货币无关的字符的问题。问题是如何确保始终将字符视为完整标记,而不将其粘在句子中的其他字符串上。
请参见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,€]