You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用spaCy Entity Ruler匹配含nch的整词屏幕尺寸?

解决spaCy Entity Ruler匹配合并式屏幕尺寸token的问题

你的问题核心在于:ORTH: 'nch'要求token的完整文本精确等于'nch',但15.2nch是一个完整token,它的文本是15.2nch,所以这个条件永远无法满足。要匹配这种数字和单位连在一起的单个token,需要用正则表达式匹配整个token的文本,或者调整token属性的匹配逻辑。

可行解决方案

方案1:使用正则匹配整个token文本

直接通过TEXT的REGEX属性匹配符合"数字+nch"格式的单个token,这是最直接可靠的方式:

{"label": "inches", "pattern": [{"TEXT": {"REGEX": r"^\d+(\.\d+)?nch$"}}]}

这个正则会匹配:

  • 整数+nch:比如5nch
  • 小数+nch:比如15.2nch、3.14nch

如果需要兼容更多单位变体(比如拼写错误的inch、标准的in),可以扩展正则:

{"label": "inches", "pattern": [{"TEXT": {"REGEX": r"^\d+(\.\d+)?(nch|inch|in)$"}}]}

方案2:整合所有场景的完整模式

把你之前能匹配的14"、7.1-ch场景,和新的合并token场景整合到同一个patterns列表中:

patterns = [
    # 匹配独立token的"数字+英寸符号"(如14")
    {"label": "inches", "pattern": [
        {"SHAPE": {"IN": ["dd", "d", "d.d", "dd.d"]}},
        {"ORTH": '"'}
    ]},
    # 匹配独立token的"数字+-+ch"(如7.1-ch)
    {"label": "inches", "pattern": [
        {"SHAPE": {"IN": ["dd", "d", "d.d", "dd.d"]}},
        {"ORTH": "-"},
        {"ORTH": "ch"}
    ]},
    # 匹配合并token的"数字+nch"(如15.2nch)
    {"label": "inches", "pattern": [{"TEXT": {"REGEX": r"^\d+(\.\d+)?nch$"}}]}
]

额外说明

  • spaCy的SHAPE属性是描述整个token的字符形状,比如15.2nch的SHAPE是dd.daaa,所以你之前用的["dd.d", "dd", "d.d", "d"]无法匹配这个token的形状,这也是之前方案失效的另一个原因。
  • 如果你需要对数字部分做更精确的形状匹配,可以在正则中保留数字的格式逻辑,或者自定义tokenizer规则提前拆分15.2nch这类token,但正则匹配是最轻量化的解决方案。

内容的提问来源于stack exchange,提问作者joaomsimoes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:07:13