【问题标题】:spacy- custom tokenization doesn't work with POS and ORTH and OP argumentspacy-自定义标记化不适用于 POS 和 ORTH 和 OP 参数
【发布时间】:2021-06-03 18:52:44
【问题描述】:

我正在尝试实现自定义标记化来分离 这样的词 '6 英寸长','6 英尺','3 米高'

所以我将自定义标记器设置如下。

from spacy.symbols import ORTH,POS

# Add special case rule
special_case = [{'pos': "NUM"}, {'F': "-"}, {'pos': "NOUN"},{'F': "-",'op':'?'},{'pos': "ADJ",'op':'?'}]
# special_case = [{POS: "NUM"}, {ORTH: "-"}, {POS: "NOUN"},{ORTH: "-"},{POS: "ADJ"}]
nlp.tokenizer.add_special_case("dashed", special_case)

# Check new tokenization
print([w.text for w in nlp("6-inch-long")])  # ['gim', 'me', 'that']

它返回错误消息说

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-987-f37f530be1e3> in <module>
      6 special_case = [{'pos': "NUM"}, {'F': "-"}, {'pos': "NOUN"},{'F': "-",'op':'?'},{'pos': "ADJ",'op':'?'}]
      7 # special_case = [{POS: "NUM"}, {ORTH: "-"}, {POS: "NOUN"},{ORTH: "-"},{POS: "ADJ"}]
----> 8 nlp.tokenizer.add_special_case("dashed", special_case)
      9 
     10 # Check new tokenization

tokenizer.pyx in spacy.tokenizer.Tokenizer.add_special_case()

vocab.pyx in spacy.vocab.Vocab.make_fused_token()

KeyError: 65

我用谷歌搜索了这个问题,有人说如果我替换它就会解决 ORTH=> 'F', POS=>'pos' 但还是不行,我也找不到 为自定义标记化放置“可选”参数的方式。 我需要可选标记化参数的原因是 我需要标记“6 英寸长”和“6 英尺”。 这意味着第四和第五个元素必须保持为“可选”。

我该如何解决这个问题?

谢谢你。

【问题讨论】:

    标签: python nlp spacy


    【解决方案1】:

    我认为您误解了tokenizer.add_special_case API。第一个参数是您希望以特定方式标记的 token string,第二个参数是如何仅标记该特定标记字符串。它看起来很相似,但不是Matcher 模式。

    nlp.tokenizer.add_special_case("dashed", [{"ORTH": "dash"}, {"ORTH": "ed"}])
    

    如果您想做一些更复杂的事情,包括基于 POS 等注释匹配标记,您可以使用 Matcher 和 retokenizer (https://spacy.io/api/doc#retokenize) 来修改标记化。

    spaCy v2 和 v3 之间还有一些差异需要注意:

    • v2 不验证 ORTH 字符串是否与令牌字符串相加,这意味着您可以(意外)修改输入文本
    • v2 允许您设置ORTHNORM 之外的属性
    • v2 不支持令牌字符串中的空格

    【讨论】:

    • 谢谢!我查看了 retokenizer,但似乎我必须提供最终结果将是什么样的 ['New','York'] 这意味着它没有概括模式。如何制作一个模式来拆分所有在中间或在令牌中多次包含连字符的单词?
    • 如果您只想拆分连字符,请修改分词器中缀。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    相关资源
    最近更新 更多