言語検出
Solr は、langid
UpdateRequestProcessor を使用して、インデックス作成中に言語を識別し、テキストを言語固有のフィールドにマッピングできます。
Solr はこの機能の3つの実装をサポートしています
-
Tika の言語検出機能: https://tika.apache.org/1.28.5/detection.html
-
LangDetect 言語検出: https://github.com/shuyo/language-detection
-
OpenNLP 言語検出: http://opennlp.apache.org/docs/1.9.4/manual/opennlp.html#tools.langdetect
Tika と LangDetect の実装の比較については、こちらをご覧ください: http://blog.mikemccandless.com/2011/10/accuracy-and-performance-of-googles.html。一般に、LangDetect の実装の方が、より多くの言語をより高いパフォーマンスでサポートしています。
これらの言語識別実装のそれぞれに関する特定の情報 (それぞれのサポート対象言語のリストなど) については、関連するプロジェクトの Web サイトを参照してください。
Solr での言語分析の詳細については、言語分析を参照してください。
モジュール
これは、使用する前に有効にする必要のある langid
Solr モジュール を介して提供されます。
言語検出の設定
solrconfig.xml
で langid
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 サイトで提供されています。
モデルを配置する場所については、リソースのロードを参照してください。
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
プロセッサはスキーマに対してフィールド名を検証しません。これは、更新チェーンの後でフィールドの名前を変更または削除する予定がある場合に役立つ場合があります。