言語検出

Solr は、langid UpdateRequestProcessor を使用して、インデックス作成中に言語を識別し、テキストを言語固有のフィールドにマッピングできます。

Solr はこの機能の3つの実装をサポートしています

Tika と LangDetect の実装の比較については、こちらをご覧ください: http://blog.mikemccandless.com/2011/10/accuracy-and-performance-of-googles.html。一般に、LangDetect の実装の方が、より多くの言語をより高いパフォーマンスでサポートしています。

これらの言語識別実装のそれぞれに関する特定の情報 (それぞれのサポート対象言語のリストなど) については、関連するプロジェクトの Web サイトを参照してください。

Solr での言語分析の詳細については、言語分析を参照してください。

モジュール

これは、使用する前に有効にする必要のある langid Solr モジュール を介して提供されます。

言語検出の設定

solrconfig.xmllangid UpdateRequestProcessor を構成できます。どちらの実装も同じパラメータを使用します。これらのパラメータについては、次のセクションで説明します。最低限、言語識別のフィールドと、結果の言語コードのフィールドを指定する必要があります。

Tika 言語検出の設定

以下は、solrconfig.xml での最小限の Tika langid 構成の例です。

<processor class="org.apache.solr.update.processor.TikaLanguageIdentifierUpdateProcessorFactory">
  <lst name="defaults">
    <str name="langid.fl">title,subject,text,keywords</str>
    <str name="langid.langField">language_s</str>
  </lst>
</processor>

LangDetect 言語検出の設定

以下は、solrconfig.xml での最小限の LangDetect langid 構成の例です。

<processor class="org.apache.solr.update.processor.LangDetectLanguageIdentifierUpdateProcessorFactory">
  <lst name="defaults">
    <str name="langid.fl">title,subject,text,keywords</str>
    <str name="langid.langField">language_s</str>
  </lst>
</processor>

OpenNLP 言語検出の設定

以下は、solrconfig.xml での最小限の OpenNLP langid 構成の例です。

<processor class="org.apache.solr.update.processor.OpenNLPLangDetectUpdateProcessorFactory">
  <lst name="defaults">
    <str name="langid.fl">title,subject,text,keywords</str>
    <str name="langid.langField">language_s</str>
    <str name="langid.model">langdetect-183.bin</str>
  </lst>
</processor>

OpenNLP 固有のパラメータ

langid.model

必須

デフォルト: なし

OpenNLP 言語検出モデル。

OpenNLP プロジェクトは、OpenNLP サイトのモデルダウンロードページで、事前にトレーニングされた 103 言語モデルを提供しています。モデルのトレーニング手順は、OpenNLP Web サイトで提供されています。

モデルを配置する場所については、リソースのロードを参照してください。

OpenNLP 言語コード

OpenNLPLangDetectUpdateProcessor は、OpenNLP モデルによって検出された 3 文字の ISO 639-3 コードを、2 文字の ISO 639-1 コードに自動的に変換します。

langid パラメータ

前述の通り、langid UpdateRequestProcessor の両方の実装は同じパラメータを受け取ります。

langid

オプション

デフォルト: true

true の場合、言語検出を有効にします。

langid.fl

必須

デフォルト: なし

langid によって処理されるフィールドの、カンマまたはスペース区切りのリスト。

langid.langField

必須

デフォルト: なし

返される言語コードのフィールドを指定します。

langid.langsField

オプション

デフォルト: なし

返される言語コードのリストのフィールドを指定します。langid.map.individual を使用する場合、検出された各言語がこのフィールドに追加されます。

langid.overwrite

オプション

デフォルト: false

langField および langsField フィールドの内容が既に値を含んでいる場合に、上書きするかどうかを指定します。

langid.lcmap

オプション

デフォルト: なし

検出された言語に適用するコロン区切りの言語コードマッピングを指定する、スペース区切りのリスト。

たとえば、中国語、日本語、韓国語を共通の cjk コードにマッピングし、アメリカ英語とイギリス英語の両方を単一の en コードにマッピングするには、langid.lcmap=ja:cjk zh:cjk ko:cjk en_GB:en en_US:en を使用します。

これは、langid.map.lcmap で上書きされない限り、langField および langsField フィールドに設定される値、および langid.map を使用する場合のフィールドサフィックスの両方に影響します。

langid.threshold

オプション

デフォルト: 0.5

言語識別スコアが langid によって受け入れられる前に到達する必要がある、0〜1 の間のしきい値を指定します。

長いテキストフィールドでは、0.8 などの高いしきい値で良好な結果が得られます。短いテキストフィールドの場合、言語識別のしきい値を下げる必要があるかもしれませんが、結果の品質がやや低下するリスクがあります。結果を調整するために、データで実験することをお勧めします。

langid.allowlist

オプション

デフォルト: なし

許可される言語識別コードのリストを指定します。スキーマにあるフィールドにのみドキュメントをインデックス化するようにするには、langid.map と組み合わせて使用します。

langid.map

オプション

デフォルト: false

フィールド名のマッピングを有効にします。true の場合、Solr は langid.fl にリストされているすべてのフィールドのフィールド名をマッピングします。

langid.map.fl

オプション

デフォルト: なし

langid.fl で指定されたフィールドとは異なる、langid.map のためのフィールドのカンマ区切りリスト。

langid.map.keepOrig

オプション

デフォルト: false

true の場合、Solr はフィールド名のマッピング処理中にフィールドをコピーし、元のフィールドはそのまま残します。

langid.map.individual

オプション

デフォルト: false

true の場合、Solr は各フィールドの言語を個別に検出してマッピングします。

langid.map.individual.fl

オプション

デフォルト: なし

langid.fl で指定されたフィールドとは異なる、langid.map.individual で使用するためのフィールドのカンマ区切りリスト。

langid.fallback

オプション

デフォルト: なし

言語が検出されないか、langid.fallbackFields で指定されていない場合に使用する言語コードを指定します。

langid.fallbackFields

オプション

デフォルト: なし

langid.threshold スコアを満たす言語が検出されない場合、または検出された言語が langid.allowlist にない場合、このフィールドはフォールバック値として使用する言語コードを指定します。

適切なフォールバック言語が見つからない場合、Solr は langid.fallback で指定された言語コードを使用します。

langid.map.lcmap

オプション

デフォルト: なし

フィールド名をマッピングするときに使用する、コロン区切りの言語コードマッピングを指定するスペース区切りのリスト。

たとえば、中国語、日本語、韓国語の言語フィールドで共通の *_cjk サフィックスを使用し、アメリカ英語とイギリス英語の両方のフィールドを単一の *_en にマッピングするには、langid.map.lcmap=ja:cjk zh:cjk ko:cjk en_GB:en en_US:en を使用します。

このパラメータで定義されたリストは、langid.lcmap で設定された構成を上書きします。

langid.map.pattern

オプション

デフォルト: <field>_<language>

デフォルトでは、フィールドは <field>_<language> としてマッピングされます。このパターンを変更するには、このパラメータで Java の正規表現を指定できます。

langid.map.replace

オプション

デフォルト: <field>_<language>

デフォルトでは、フィールドは <field>_<language> としてマッピングされます。このパターンを変更するには、このパラメータで Java の置換を指定できます。

langid.enforceSchema

オプション

デフォルト: true

false の場合、langid プロセッサはスキーマに対してフィールド名を検証しません。これは、更新チェーンの後でフィールドの名前を変更または削除する予定がある場合に役立つ場合があります。