語言偵測

Solr 可以使用 langid UpdateRequestProcessor 在索引期間識別語言並將文字對應到語言特定的欄位。

Solr 支援此功能的 3 種實作方式

您可以在此處看到 Tika 和 LangDetect 實作方式之間的比較:http://blog.mikemccandless.com/2011/10/accuracy-and-performance-of-googles.html。一般而言,LangDetect 實作方式支援更多語言,效能也更高。

如需這些語言識別實作方式的具體資訊,包括每種實作方式支援的語言清單,請參閱相關專案網站。

如需 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 網站上提供。

請參閱 資源載入,以取得有關模型放置位置的資訊。

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

指定如果 langFieldlangsField 欄位已包含值,是否覆寫它們的內容。

langid.lcmap

選用

預設值:無

一個以空格分隔的列表,指定要套用到偵測到的語言的以冒號分隔的語言代碼映射。

例如,您可以使用此功能將中文、日文和韓文映射到通用的 cjk 代碼,並透過使用 langid.lcmap=ja:cjk zh:cjk ko:cjk en_GB:en en_US:en 將美式英語和英式英語都映射到單一的 en 代碼。

這會影響放入 langFieldlangsField 欄位的值,以及使用 langid.map 時的欄位後綴,除非被 langid.map.lcmap 覆寫。

langid.threshold

選用

預設值:0.5

指定介於 0 和 1 之間的閾值,語言識別分數必須達到此閾值,langid 才會接受它。

對於較長的文字欄位,較高的閾值(例如 0.8)會產生良好的結果。對於較短的文字欄位,您可能需要降低語言識別的閾值,但您可能會承擔較低品質結果的風險。我們建議您使用您的資料進行實驗以調整您的結果。

langid.allowlist

選用

預設值:無

指定允許的語言識別代碼列表。將此與 langid.map 結合使用,以確保您只將文件索引到您綱要中的欄位。

langid.map

選用

預設值:false

啟用欄位名稱映射。如果為 true,Solr 會映射 langid.fl 中列出的所有欄位的欄位名稱。

langid.map.fl

選用

預設值:無

langid.map 的欄位列表,以逗號分隔,與 langid.fl 中指定的欄位不同。

langid.map.keepOrig

選用

預設值:false

如果為 true,Solr 會在欄位名稱映射過程中複製欄位,將原始欄位保留在原位。

langid.map.individual

選用

預設值:false

如果為 true,Solr 會單獨偵測和映射每個欄位的語言。

langid.map.individual.fl

選用

預設值:無

langid.map.individual 一起使用的欄位列表,以逗號分隔,與 langid.fl 中指定的欄位不同。

langid.fallback

選用

預設值:無

指定如果未偵測到任何語言或未在 langid.fallbackFields 中指定任何語言,則要使用的語言代碼。

langid.fallbackFields

選用

預設值:無

如果沒有偵測到符合 langid.threshold 分數的語言,或者偵測到的語言不在 langid.allowlist 上,則此欄位會指定要用作回退值的語言代碼。

如果找不到適當的回退語言,Solr 將使用 langid.fallback 中指定的語言代碼。

langid.map.lcmap

選用

預設值:無

一個以空格分隔的列表,指定在映射欄位名稱時要使用的以冒號分隔的語言代碼映射。

例如,您可以使用此功能使中文、日文和韓文欄位使用通用的 *_cjk 後綴,並透過使用 langid.map.lcmap=ja:cjk zh:cjk ko:cjk en_GB:en en_US:en 將美式英語和英式英語欄位都映射到單一的 *_en

使用此參數定義的列表將覆寫使用 langid.lcmap 設定的任何組態。

langid.map.pattern

選用

預設值:<欄位>_<語言>

預設情況下,欄位會映射為 <欄位>_<語言>。若要變更此模式,您可以在此參數中指定 Java 正規表示式。

langid.map.replace

選用

預設值:<欄位>_<語言>

預設情況下,欄位會映射為 <欄位>_<語言>。若要變更此模式,您可以在此參數中指定 Java 取代。

langid.enforceSchema

選用

預設值:true

如果為 false,則 langid 處理器不會根據您的綱要驗證欄位名稱。如果您計劃稍後在更新鏈中重新命名或刪除欄位,這可能會很有用。