Sketch Engine语料库CQL查询:匹配无前后空格的点
问题分析与正确写法
首先,你的CQL写法主要错在这几个地方:
- token划分逻辑误解:你要找的
a.a这类实例,绝大多数语料库会把它识别为单个token,而非a、.、a三个独立token。你用三个连续token的规则去匹配,自然找不到结果。 - 属性与正则误用:
lemma!="[[:space:]]"完全无效,因为空格不会作为任何token的lemma存在,这个条件等于没加。[lemma="[[:alpha:]]*"]里的*会匹配空字符串,可能命中.a或a.这类不符合要求的情况;就算是三个token的场景,也该用+(匹配至少一个字母)而非*。
正确写法分两种场景:
场景1:目标是含中间无空格点的单个token(如a.b、hello.world)
直接匹配表层文本(用word属性,避免词元还原干扰):
[word="^[[:alpha:]]+\.[[:alpha:]]+$"]
说明:^和$限定整个token的首尾,[[:alpha:]]+匹配至少一个字母,\.匹配点。
场景2:若语料库确实将a.a拆分为三个独立token(极少出现)
匹配连续的字母token、点token、字母token:
[word="[[:alpha:]]+"] [word="\."] [word="[[:alpha:]]+"]
这里用word而非lemma,确保匹配的是表层的字母和点,不受词元还原影响。
另外无需用\s或[[:space:]]排除空格——token序列本身就代表文本中连续无空格的部分,有空格的地方会被拆分为不同token组,中间会有<s>等分隔标记。
内容的提问来源于stack exchange,提问作者Cecilia
相关产品推荐
相关产品推荐

