LoginSignup
4

More than 5 years have passed since last update.

Amazon CloudSearch で 商品検索を実現する - No.3 日本語トークン分割

Last updated at Posted at 2016-12-03

もう少しいい感じに検索したい

前の記事ではグループとエイリアスを明示的に使うことで表記の揺れと誤記に対応できることが分かりました。しかし、「ファイアーエムブレム」は英語表記では「Fire Emblem」なので、「ファイアー」と「エムブレム」の2単語から構成されています。前回の記事の「ファイアーエムブレム」の検索を単語単位の誤りを試すと下の様になりまいた。

入力した単語 入力内容 検索結果
ファイアーエムブレム 正しい単語 ヒットする
ファイーエムブレム ファイアーを誤る ヒットしない
ファイアーエブレム エムブレムを誤る ヒットしない
ファイーエブレム エイリアスで定義されている誤り ヒットする

というように、エイリアスに定義した通りに誤るとは限らず、全ての組み合わせをエイリアスに入れるのは手間がかかります。

日本語トークン分割 を使ってみる

前回の記事では持て余してたTokenization Dictionaryタブから 日本語トークン分割 を設定し、グループと組み合わせてみます。

Tokenization Dictionary タブ

前回に暫定で入れた値を削除し下の内容を入力します。区切り文字が無く入力された単語を「Fire」と「Emblem」に分けます。正しい単語と両方を間違えている単語の両方をいれておきます。

TokenizationDictionary
[
  [
    "ファイアーエムブレム",
    "ファイアー エムブレム",
    "ファイアー エムブレム",
    "カスタム名詞"
  ],
  [
    "ファイヤーエンブレム",
    "ファイヤー エンブレム",
    "ファイヤー エンブレム",
    "カスタム名詞"
  ]
]

2階層目の配列の意味は下の通りです。

  • テキスト - 分割前の単語
  • 分割した単語
  • 読み仮名
  • 品詞

Synonymタブ - Alias

日本語トークン分割を利用するのでJSON形式の空の配列にします。

Alias
[
]

Synonymタブ - Group

「ファイアー」と「ファイヤー」、「エムブレム」と「エンブレム」を同じグループとして定義します。

Groupタブ
[
  [
    "ファミリーコンピューター",
    "ファミコン",
    "FC"
  ],
  [
    "ファイアー",
    "ファイヤー"
  ],
  [
    "エムブレム",
    "エンブレム"
  ]
]

インデックスを再構築

分析スキーマの定義を変更したら、分析スキーマの画面にインデックス再構築のボタンが表示されるので、押下して再構築を実行します。

AnalyzeTokenRebuild.png

再構築後

日本語トークン分割で単語を分割し、グループにより分割された単語が同一視することで表記の揺れを吸収できるはずです。

入力した単語 入力内容 検索結果
ファイアーエムブレム 正しい単語 ヒットする
ファイーエムブレム ファイアーを誤る ヒットしない
ファイアーエブレム エムブレムを誤る ヒットしない
ファイーエブレム エイリアスで定義されている誤り ヒットする

変わりませんでした。グループがあることを考えて、間に半角スペースを入れると上手くいきました。

入力した単語 入力内容 検索結果
ファイー[半角スペース]エムブレム ファイアーを誤る ヒットする
ファイアー[半角スペース]エブレム エムブレムを誤る ヒットする

別案を考えてみます。

日本語トークン分割 の登録単位を変更する

「ファイアーエムブレム」は二つの単語で構成されているゲームタイトルなので、日本語トークン分割を「ファイアー」と「エムブレム」の二つを登録し、表記の揺れの「ファイヤー」と「エンブレム」も登録します。グループは残しておきます。

SynonymのGroup
[
  [
    "ファミリーコンピューター",
    "ファミコン",
    "FC"
  ],
  [
    "ファイアー",
    "ファイヤー"
  ],
  [
    "エムブレム",
    "エンブレム"
  ]
]
Tokenization_Dictionary
[
  [
    "ファイアー",
    "ファイアー",
    "ファイアー",
    "カスタム名詞"
  ],
  [
    "ファイヤー",
    "ファイヤー",
    "ファイヤー",
    "カスタム名詞"
  ],
  [
    "エムブレム",
    "エムブレム",
    "エムブレム",
    "カスタム名詞"
  ],
  [
    "エンブレム",
    "エンブレム",
    "エンブレム",
    "カスタム名詞"
  ]
]

インデックスを再構築した後にもう一度検索を行います。

入力した単語 入力内容 検索結果
ファイアーエムブレム 正しい単語 ヒットする
ファイーエムブレム ファイアーを誤る ヒットする
ファイアーエブレム エムブレムを誤る ヒットする
ファイーエブレム エイリアスで定義されている誤り ヒットする

これで表記の揺れの組み合わせも意図した通りにヒットしました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4