【问题标题】:Spacy tokenizer, add tokenizer exceptionSpacy 分词器,添加分词器异常
【发布时间】:2017-11-15 17:02:23
【问题描述】:

嘿!我正在尝试在使用 spacy 2.02 标记某些令牌时添加一个例外,我知道存在 .tokenizer.add_special_case() 我在某些情况下使用它,但例如像 100 美元这样的令牌,spacy splits在两个令牌中

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

但我想像这样一分为三,而不是为美元后面的每个数字做一个特殊情况,我想为每个格式为 US$NUMBER 的令牌做一个例外。

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

我正在阅读 spacy 文档中有关 TOKENIZER_EXCEPTIONS 的信息,但我不知道该怎么做。

我正在尝试使用

从 spacy.lang.en.tokenizer_exceptions 导入 TOKENIZER_EXCEPTIONS 还有 spacy.util 有一个方法 update_exc()。

有人可以发布一个完整的代码示例吗?

哦,另一件事,我知道 lang.en 上的文件 tokenizer_exceptions 已经有一些例外,例如将“i'm”拆分为“i”“'m”,我已经评论了该部分,但这不起作用.我不希望标记器拆分“我”,我怎么能这样做?

谢谢

【问题讨论】:

    标签: nlp tokenize spacy


    【解决方案1】:

    解决办法是here

     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=' ')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 2019-12-09
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多