Nlp 空间标记器,添加标记器异常

Nlp 空间标记器,添加标记器异常,nlp,tokenize,spacy,Nlp,Tokenize,Spacy,嘿!我试图在使用spacy 2.02标记某些令牌时添加一个异常,我知道存在。tokenizer.add_special_case(),我在某些情况下使用它,但例如,像US$100这样的令牌,spacy会拆分为两个令牌 ('US$','SYM'),('100','NUM') 但我想像这样分成三部分,而不是对美元后的每个数字做一个特殊的处理,我想对每一个形式为美元数字的代币做一个例外 ('US','PROPN'),('$','SYM'),('800','NUM')) 我在spacy的文档中读到了关于

嘿!我试图在使用spacy 2.02标记某些令牌时添加一个异常,我知道存在。tokenizer.add_special_case(),我在某些情况下使用它,但例如,像US$100这样的令牌,spacy会拆分为两个令牌

('US$','SYM'),('100','NUM')

但我想像这样分成三部分,而不是对美元后的每个数字做一个特殊的处理,我想对每一个形式为美元数字的代币做一个例外

('US','PROPN'),('$','SYM'),('800','NUM'))

我在spacy的文档中读到了关于标记器_异常的内容,但我不知道如何解决这个问题

我试着用

从spacy.lang.en.tokenizer\u异常导入tokenizer\u异常 还有spacy.util,它有一个update_exc()方法

有人可以发布一个完整的代码示例来说明如何做到这一点吗

哦,另一件事,我知道lang.en上的文件标记器_异常,已经有一些异常,比如在“i”“m”中拆分“i'm”,我已经对该部分进行了注释,但这不起作用。我不希望标记器拆分“我是”,我怎么也能这样做

谢谢

解决方案是

解决办法是

 def custom_en_tokenizer(en_vocab):  
 prefixes = list(English.Defaults.prefixes)
 prefixes.remove('US\$')  # Remove exception for currencies
 prefixes.append(r'(?:US)(?=\$\d+)')  # Append new prefix-matching rule

 prefix_re = util.compile_prefix_regex(tuple(prefixes))
 suffix_re = util.compile_suffix_regex(English.Defaults.suffixes)
 infix_re = util.compile_infix_regex(English.Defaults.infixes)

 return Tokenizer(en_vocab,
                  English.Defaults.tokenizer_exceptions,
                  prefix_re.search,
                  suffix_re.search,
                  infix_re.finditer,
                  token_match=None)

> tokenizer = custom_en_tokenizer(spacy.blank('en').vocab)
> for token in tokenizer('US$100'):
>      print(token, end=' ')