語言偵測
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 實作方式支援更多語言,效能也更高。
如需這些語言識別實作方式的具體資訊,包括每種實作方式支援的語言清單,請參閱相關專案網站。
如需 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 網站上提供。
請參閱 資源載入,以取得有關模型放置位置的資訊。
langid 參數
如先前所述,langid
UpdateRequestProcessor 的兩種實作方式都採用相同的參數。
langid
-
選用
預設值:
true
當為
true
時,啟用語言偵測。 langid.fl
-
必要
預設值:無
一個以逗號或空格分隔的欄位列表,將由
langid
處理。 langid.langField
-
必要
預設值:無
指定返回的語言代碼的欄位。
langid.langsField
-
選用
預設值:無
指定返回的語言代碼列表的欄位。如果您使用
langid.map.individual
,每個偵測到的語言都會加入此欄位。 langid.overwrite
-
選用
預設值:
false
指定如果
langField
和langsField
欄位已包含值,是否覆寫它們的內容。 langid.lcmap
-
選用
預設值:無
一個以空格分隔的列表,指定要套用到偵測到的語言的以冒號分隔的語言代碼映射。
例如,您可以使用此功能將中文、日文和韓文映射到通用的
cjk
代碼,並透過使用langid.lcmap=ja:cjk zh:cjk ko:cjk en_GB:en en_US:en
將美式英語和英式英語都映射到單一的en
代碼。這會影響放入
langField
和langsField
欄位的值,以及使用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
處理器不會根據您的綱要驗證欄位名稱。如果您計劃稍後在更新鏈中重新命名或刪除欄位,這可能會很有用。