音声検索とアクセント

トピック作成者:ks-solruserml-bot (2024/08/06 21:45 投稿)
7
CloseClose

(The bot translated the original post https://lists.apache.org/thread/0q1dnppfhq6m4ybvody09j20krp7f9xr into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

こんにちは、

名前のデータベース検索にSolrを使用しており、標準のクエリパーサーと音声検索を使うことで最良の結果を得ています。しかし、その唯一の欠点は、音声検索が名前の通り、音が似ている一致を探すことです。そのため、発音を変えるアクセント付きの文字に誤字がある場合、一致が見つかりません。

例:

  • 「Muller」で検索すると「Müller」が見つからない
  • 「Francois」で検索すると「François」が見つからない

私はSolrのUIを使ってテストを行い、例えば q=phonetic_full_name:Francois を設定しました。また、名前にチルダを追加してファジー検索を試みましたが(phonetic_full_name:Francois~)、結果は変わりませんでした。

Solrの音声検索を使用しながら、アクセント付き文字とアクセントなし文字のリストをマッピングし、それらを同等に扱う方法はありますか(例:ç<->c, ü<->u, è<->e, ñ<->n など)?

何かアドバイスがあれば教えてください。

返信投稿者:ks-solruserml-bot (2024/08/06 21:45 投稿)

ダイアクリティカルマークは、MappingCharFilterFactory で処理されます。
文字通り音声マッチは、Beider-Morse Filter でうまく処理されます。
他のフィルターについても確認してみてください:Phonetic Matching
私は bphm を soundex と組み合わせる必要があったことを覚えています。評価には SolrAdmin の Analysis ページを使用してください。

--
よろしくお願いします、
Mikhail Khludnev

返信投稿者:ks-solruserml-bot (2024/08/06 21:46 投稿)

ICUTransformFilterFactory という「ハンマー」もあります。

面白いデモとして、タイ語のテキストに対して英語の音声検索を行いました:
solr-thai-test

よろしく、
Alex

返信投稿者:ks-solruserml-bot (2024/08/06 21:46 投稿)

おそらくシンプルなオプションとしては、ASCII Folding Filter か ICU Folding Filter を使ってアクセント付きの文字をアクセントなしのバージョンにマッピングすることです。

- Andy -

返信投稿者:ks-solruserml-bot (2024/08/06 21:46 投稿)

または、インデックスにインポートする際に、以下のようにアクセントを除去する方法があります。

unicodedata.normalize("NFKD", v).encode('ascii', 'ignore').decode()

(Pythonバージョン2)

残念ながら、これでも完全な解決策にはなりません。「Muller」が「Mueller」を見つけられないと不満を言う人たちがいました。これは「Müller」を英語で一般的に表記する方法の1つです。

さらに悪化します。たとえば、スラブ語の「短い i」と「開いた i」が「Zelenskyy」のように "-yy" と綴られます。これらは2つの異なる音であり、ラテン文字で表現するものがありません。ロシア語では通常 "-iy" と綴りますが、ポーランド語では「y」がほぼ無音であるため、単一の "-i" を使用する可能性が高いです。

誰かが Solr で名前検索を実装する良い方法を知っているなら、ぜひ教えてほしいです。私たちのインデックスには多くの名前の記録があり、家系研究者が不満を持っています。

Dima

返信投稿者:ks-solruserml-bot (2024/08/06 21:46 投稿)

一般的なアプローチとしては、精度を徐々に低くするマッピングを使用して複数のインデックスを作成し、それらの代替フィールドを異なる重みで検索することが考えられます(例えば、フィールド名エイリアスを拡張してそれらの重みを管理します)。これは、アジアの名前を検索する際に、ファーストネームとセカンドネームが予期しない順序で入力される問題に似ています。

ただし、その方法はシンプルなソートと組み合わせるのは難しいかもしれません。

よろしく、
Alex

返信投稿者:ks-solruserml-bot (2024/08/06 21:46 投稿)

Dima、BMPMを使って簡単な演習を行いましたが、このようなケースにうまく対応しているようです。
BMPM最高!!! - Telegraph BMPM Rocks!!!

--
よろしくお願いします、
Mikhail Khludnev

返信投稿者:ks-solruserml-bot (2024/08/06 21:47 投稿)

ありがとう! 新しいものを試せるので楽しみです。

Dima

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2024 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?