如何用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
相关产品推荐
相关产品推荐

