CJK 二元分词过滤器

CJK 二元分词过滤器 #

CJK 二元(cjk_bigram)分词过滤器是专门为处理东亚语言(如中文、日文和韩文,简称 CJK)而设计的,这些语言通常不使用空格来分隔单词。二元组是指在词元字符串中两个相邻元素的序列,这些元素可以是字符或单词。对于 CJK 语言来说,二元组有助于近似确定单词边界,并捕捉那些能够传达意义的重要字符对。

参数说明 #

CJK 二元分词过滤器可以通过两个参数进行配置:ignore_scripts(忽略字符集)和 output_unigrams(输出一元组)。

ignore_scripts(忽略字符集) #

CJK 二元分词过滤器会忽略所有非 CJK 字符集(如拉丁字母或西里尔字母等书写系统),并且仅将 CJK 文本分词为二元组。可使用此选项指定要忽略的 CJK 字符集。该选项有以下有效值:

  • han(汉字):汉字字符集处理汉字。汉字是用于中国、日本和韩国书面语言的意符文字。该过滤器可帮助处理文本相关任务,例如对用中文、日文汉字或韩文汉字书写的文本进行分词、规范化或词干提取。
  • hangul(韩文):韩文(谚文)字符集处理韩文字符,这些字符是韩语所特有的,不存在于其他东亚字符集中。
  • hiragana(平假名):平假名字符集处理平假名,平假名是日语书写系统中使用的两种音节文字之一。平假名通常用于日语的本土词汇、语法元素以及某些形式的标点符号。
  • katakana(片假名):片假名字符集处理片假名,片假名是日语的另一种音节文字。片假名主要用于外来借词、拟声词、科学名称以及某些日语词汇。

output_unigrams(输出一元组) #

当此选项设置为 true 时,会同时输出一元组(单个字符)和二元组。默认值为 false

参考样例 #

以下示例请求创建了一个名为 devanagari_example_index 的新索引,并定义了一个分词器,该分词器使用了 cjk_bigram_filter 过滤器,且将 ignored_scripts 参数设置为 katakana(片假名):

PUT /cjk_bigram_example
{
  "settings": {
    "analysis": {
      "analyzer": {
        "cjk_bigrams_no_katakana": {
          "tokenizer": "standard",
          "filter": [ "cjk_bigrams_no_katakana_filter" ]
        }
      },
      "filter": {
        "cjk_bigrams_no_katakana_filter": {
          "type": "cjk_bigram",
          "ignored_scripts": [
            "katakana"
          ],
          "output_unigrams": true
        }
      }
    }
  }
}

产生的词元 #

使用以下请求来检查使用该分词器生成的词元:

POST /cjk_bigram_example/_analyze
{
  "analyzer": "cjk_bigrams_no_katakana",
  "text": "東京タワーに行く"
}

测试文本:“東京タワーに行く”

東京 (Kanji for "Tokyo")
タワー (Katakana for "Tower")
に行く (Hiragana and Kanji for "go to")

返回内容包含产生的词元

{
  "tokens": [
    {
      "token": "東",
      "start_offset": 0,
      "end_offset": 1,
      "type": "<SINGLE>",
      "position": 0
    },
    {
      "token": "東京",
      "start_offset": 0,
      "end_offset": 2,
      "type": "<DOUBLE>",
      "position": 0,
      "positionLength": 2
    },
    {
      "token": "京",
      "start_offset": 1,
      "end_offset": 2,
      "type": "<SINGLE>",
      "position": 1
    },
    {
      "token": "タワー",
      "start_offset": 2,
      "end_offset": 5,
      "type": "<KATAKANA>",
      "position": 2
    },
    {
      "token": "に",
      "start_offset": 5,
      "end_offset": 6,
      "type": "<SINGLE>",
      "position": 3
    },
    {
      "token": "に行",
      "start_offset": 5,
      "end_offset": 7,
      "type": "<DOUBLE>",
      "position": 3,
      "positionLength": 2
    },
    {
      "token": "行",
      "start_offset": 6,
      "end_offset": 7,
      "type": "<SINGLE>",
      "position": 4
    },
    {
      "token": "行く",
      "start_offset": 6,
      "end_offset": 8,
      "type": "<DOUBLE>",
      "position": 4,
      "positionLength": 2
    },
    {
      "token": "く",
      "start_offset": 7,
      "end_offset": 8,
      "type": "<SINGLE>",
      "position": 5
    }
  ]
}