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

如何让OpenSearch将末尾大写州缩写拆分为独立Token?

问题

在个人项目中需要用OpenSearch对银行交易信息分词,目标是把末尾的美国州缩写拆成独立Token。交易描述示例如下:
amazon web services aws.amazon.coQA
TST* PLUS MEMBERSHIP THRITX
UBER EATS HELP.UBER.COMCA
HUMBEBUNDLE.COM HTTPSWWW.HUMBCA
APPLE.COM/BILL 866-712-7753 CA

尝试用Pattern Tokenizer制定规则,当末尾2个大写字母是美国州缩写时拆分,请求代码如下:

GET /_analyze
{
    "tokenizer": {
        "type": "pattern",
        "pattern": "(?:[ A-Z]|^)(AL|AK|AZ|AR|CA|CO|CT|DE|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY)$"
      },
  "text": "TST* PLUS MEMBERSHIP HTTPSWWW.THRITX"
}

但返回结果仅移除了末尾州缩写,未拆分出独立Token:

{
  "tokens": [
    {
      "token": "TST* PLUS MEMBERSHIP HTTPSWWW.THR",
      "start_offset": 0,
      "end_offset": 33,
      "type": "word",
      "position": 0
    }
  ]
}
解决方案

问题出在当前的正则匹配逻辑——Pattern Tokenizer默认会把匹配到的内容当作分隔符,而非保留为独立Token。要实现拆分并保留州缩写,需调整正则,让州缩写前的位置成为分隔符,同时确保州缩写被识别为独立Token。

正确的配置使用正向断言匹配州缩写前的边界,而非匹配州缩写本身,修改后的请求如下:

GET /_analyze
{
    "tokenizer": {
        "type": "pattern",
        "pattern": "(?<=\\S)(?=(AL|AK|AZ|AR|CA|CO|CT|DE|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY)$)",
        "group": 0
      },
  "text": "TST* PLUS MEMBERSHIP HTTPSWWW.THRITX"
}

逻辑说明:

  • (?<=\\S):正向后顾断言,确保州缩写前不是空白字符,避免误拆分空格后的州缩写(比如示例里的CA)
  • (?=(...)$):正向前瞻断言,匹配末尾的州缩写,将这个位置作为分隔符
  • group: 0:确保分隔符位置被正确识别,拆分出前后两部分

测试结果

执行上述请求后,会得到两个独立Token:

{
  "tokens": [
    {
      "token": "TST* PLUS MEMBERSHIP HTTPSWWW.THR",
      "start_offset": 0,
      "end_offset": 33,
      "type": "word",
      "position": 0
    },
    {
      "token": "TX",
      "start_offset": 33,
      "end_offset": 35,
      "type": "word",
      "position": 1
    }
  ]
}

针对类似APPLE.COM/BILL 866-712-7753 CA这种州缩写前有空格的情况,可补充规则匹配空格+州缩写的边界,合并后的正则配置如下:

GET /_analyze
{
    "tokenizer": {
        "type": "pattern",
        "pattern": "(?<=\\s)(?=(AL|AK|AZ|AR|CA|CO|CT|DE|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY)$)|(?<=\\S)(?=(AL|AK|AZ|AR|CA|CO|CT|DE|FL|GA|HI|ID|IL|IN|IA|KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY)$)",
        "group": 0
      },
  "text": "APPLE.COM/BILL    866-712-7753 CA"
}

该配置可同时处理两种场景:州缩写直接跟在字符后,或州缩写前有空格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:47:05