【问题标题】:spacy IS_DIGIT or LIKE_NUM not working as expected for certain charsspacy IS_DIGIT 或 LIKE_NUM 对于某些字符没有按预期工作
【发布时间】:2022-10-17 11:49:12
【问题描述】:

我正在尝试使用IS_DIGITLIKE_NUM 属性提取一些数字,但对于像我这样的初学者来说,这似乎有点奇怪。 只有当 5 个字符串以 MGT 结尾时,匹配器才能检测到数字。如果是其他字符,则IS_DIGITLIKE_NUM 属性无法检测到。我在这里想念什么?

nlp = spacy.load("en_core_web_sm")
matcher = Matcher(nlp.vocab)
pattern = [{'LIKE_NUM': True}]
matcher.add("DIGIT",[pattern])

doc = nlp("1231M 1232G 1233H 1234J 1235V 1236T")
matches = matcher(doc, as_spans=True)
for span in matches:
    print(span.text, span.label_)
    # prints only 1231, 1232 and 1236

【问题讨论】:

    标签: spacy


    【解决方案1】:

    仅检查 LIKE_NUM 的哪些标记是正确的可能会有所帮助,如下所示:

    import spacy
    from spacy.matcher import Matcher
    
    nlp = spacy.load("en_core_web_sm")
    matcher = Matcher(nlp.vocab)
    pattern = [{"LIKE_NUM": True}]
    matcher.add("DIGIT", [pattern])
    
    doc = nlp("1231M 1232G 1233H 1234J 1235V 1236T")
    
    for tok in doc:
        print(tok, tok.like_num)
    

    在这里,您会看到有时您拥有的令牌会一分为二,有时则不会。您匹配的标记只是仅由数字组成的标记。

    现在,为什么 M、G 和 T 分开了,而 H、J 和 V 没有?这是因为它们是单位,如兆、千兆或太字节。

    这种单位行为可能看起来不一致和奇怪,但选择它是为了与用于英语模型的训练数据保持一致。如果您需要为您的应用程序更改它,请查看文档中的this section,其中包括自定义异常。

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 2021-11-09
      • 2018-11-12
      • 2017-01-06
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多