文字分類器採用機器學習技術協助開發人員 例如分類文字
Android 11 版本文字分類器
Android 11 導入了可更新的預設值
程式碼中實作文字分類程式服務的
ExtServices 模組。搭載 Android 11 的裝置
或更高版本
getTextClassifier()
方法會在 ExtServices 模組中傳回這個預設實作。
建議裝置製造商將
TextClassifierService
,因為可透過 Mainline OTA 更新
更新。
Android 11 也移除了本機文字分類器
先前介紹的
Android 8.1。因此
getLocalTextClassifier()
傳回 NO_OP
文字分類器。不要使用本機
您應改用
getDefaultTextClassifierImplementation()
方法。
適合想使用自己的文字分類的裝置製造商
演算法即可導入自訂文字分類服務,方法是指定
config.xml
的config_defaultTextClassifierPackage
檔案。如果沒有指定這項設定,系統會採用預設的系統實作方式
自訂實作可以取得預設項目
呼叫
TextClassifierService.getDefaultTextClassifierImplementation(Context)
。
若需更多資訊,請參閲
導入自訂文字分類器服務。
測試
如要驗證文字分類器服務實作結果,請使用
中的 Compatibility Test Suite (CTS) 測試
platform/cts/tests/tests/textclassifier/
。
Android 10 版本文字分類器強化功能
Android 10 導入了兩種方法,
TextClassifier API:
suggestConversationActions
和
detectLanguage
。
suggestConversationActions
方法會產生建議的回覆
特定對話中的動作和 detectLanguage
方法
可偵測文字的語言
這些方法的模型檔案如下所示,請前往
external/libtextclassifier/models/
。
suggestionConversationActions
:actions_suggestions.universal.model
detectLanguage
:lang_id.model
如要發布含有最新模型檔案的裝置,請按照下列步驟操作: 包括:
擷取最新的模型檔案。
external/libtextclassifier/models/update.sh
- 重新命名下載的檔案,以取代現有檔案。
- 驗證設定。
adb shell dumpsys textclassification
這是該指令的輸出內容範例。
TextClassifierImpl: Annotator model file(s): ModelFile { path=/etc/textclassifier/textclassifier.universal.model name=textclassifier.universal.model version=608 locales=und } ModelFile { path=/etc/textclassifier/textclassifier.en.model name=textclassifier.en.model version=608 locales=en } LangID model file(s): ModelFile { path=/etc/textclassifier/lang_id.model name=lang_id.model version=0 locales=und } Actions model file(s): ModelFile { path=/etc/textclassifier/actions_suggestions.universal.model name=actions_suggestions.universal.model version=0 locales=und }
Android 9 版本文字分類器強化功能
Android 9 擴充了 Android 8.1 中推出的分類架構,包含的新文字 分類器服務文字分類器服務是原始設備製造商 (OEM) 的建議方式 提供文字分類系統支援文字分類器服務 。
Android 9 內含預設文字分類器
服務實作
(
TextClassifierImpl
),除非您將其替換為
自訂文字分類服務
。
導入自訂文字分類服務服務
以下各節說明如何實作自訂文字分類器 您開發的服務
擴充 android.service.textclassifier.TextClassifierService
public final class TextClassifierServiceImpl extends TextClassifierService { // Returns TextClassifierImpl. private final TextClassifier tc = getLocalTextClassifier(); @Override public void onSuggestSelection( @Nullable TextClassificationSessionId sessionId, @NonNull TextSelection.Request request, @NonNull CancellationSignal cancellationSignal, @NonNull Callback<TextSelection> callback) { CompletableFuture.supplyAsync( () -> tc.suggestSelection(request)) .thenAccept(r -> callback.onSuccess(r)); } @Override public void onClassifyText( @Nullable TextClassificationSessionId sessionId, @NonNull TextClassification.Request request, @NonNull CancellationSignal cancellationSignal, @NonNull Callback<TextClassification> callback) { ... } @Override public void onGenerateLinks( @Nullable TextClassificationSessionId sessionId, @NonNull TextLinks.Request request, @NonNull CancellationSignal cancellationSignal, @NonNull Callback<TextLinks> callback) { ... } ... }
在 Android 資訊清單中定義服務
[AndroidManifest.xml]
<service android:name=".TextClassifierServiceImpl" android:permission="android.permission.BIND_TEXTCLASSIFIER_SERVICE"> <intent-filter> <action android:name= "android.service.textclassifier.TextClassifierService"/> </intent-filter> </service>
請注意,服務必須具有
android.permission.BIND_TEXTCLASSIFIER_SERVICE
權限,且必須
請指定
android.service.textclassifier.TextClassifierService
意圖
動作。
在設定疊加層中設定系統預設的文字分類器服務
[config.xml]
<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>
將文字分類器服務建構到系統映像檔中
自訂文字分類服務可以是建構的獨立 APK
複製到系統映像檔或其他系統 APK 的一部分系統使用
PackageManager.MATCH_SYSTEM_ONLY
解決服務問題
測試
在 android.view.textclassifier.cts
中執行測試。
Android 9 中的其他文字分類異動
請參閱 檢查已安裝的語言模組。
Android 9 模型檔案與 Android 8.x 模型檔案。
Android 9 模型檔案的命名模式如下:
texclassifier.[language-code].model
(例如
textclassifier.en.model
)
而不是 textclassifier.smartselection.en.model
。
取得最新的文字分類模型檔案
如要取得最新模型,請執行下列指令碼, 會更新來源樹狀結構中的 TextClassifier 模型:
external/libtextclassifier/native/models/update.sh
Android 8.1 版文字分類器
Android 8.1 導入 TextClassfier API 以實作文字 例如單一語句分類
TextClassificationManager tcm = context.getSystemService(TextClassificationManager.class); TextClassifier classifier = tcm.getTextClassifier(); TextSelection selection = classifier.suggestSelection(...); TextClassification classification = classifier.classifyText(...);
開發人員可以設定自訂文字分類項:
tcm.setTextClassifier(customTextClassifier);
但是如果應用程式開發人員將文字分類器設為 null
,則系統
系統會為 getTextClassifier()
傳回預設文字分類器。
詳情請參閱 android.view.textclassifier.TextClassifierImpl
。
TextView 和 WebView 會透過 TextClassifier 使用智慧選取功能和智慧文字 分享功能
TextClassifier 類神經網路模型
Android 開放原始碼計畫 (AOSP) 包含多個類神經網路 以及用於分類文字的模型每個模型檔案都針對單一語言進行訓練。 您可以安裝任何模型組合。模型的定義如下:
external/libtextclassifier/Android.mk
預先安裝語言 裝置上的模型
您可以指定一組語言模型,然後安裝到裝置上:
# ----------------------- # Smart Selection bundles # ----------------------- include $(CLEAR_VARS) LOCAL_MODULE := textclassifier.smartselection.bundle1 LOCAL_REQUIRED_MODULES := textclassifier.smartselection.en.model LOCAL_REQUIRED_MODULES += textclassifier.smartselection.es.model LOCAL_REQUIRED_MODULES += textclassifier.smartselection.de.model LOCAL_REQUIRED_MODULES += textclassifier.smartselection.fr.model include $(BUILD_STATIC_LIBRARY)
例如 device/google/marlin/device-common.mk
中。
# TextClassifier smart selection model files PRODUCT_PACKAGES += \ textclassifier.smartselection.bundle1
檢查已安裝的語言 模組
使用 ADB 列出目錄中的檔案:
$ adb shell ls -l /etc/textclassifier -rw-r--r-- 1 root root ... textclassifier.smartselection.de.model -rw-r--r-- 1 root root ... textclassifier.smartselection.en.model -rw-r--r-- 1 root root ... textclassifier.smartselection.es.model -rw-r--r-- 1 root root ... textclassifier.smartselection.fr.model
模型更新
您可將新模型納入系統,藉此更新模型
更新映像檔,或使用會觸發系統元件的系統元件動態更新映像檔
可透過系統 API ACTION_UPDATE_SMART_SELECTION
更新
意圖。透過廣播這項系統 API 意圖,這個架構
更新目前設定的語言模型。模型本身
包含支援的語言和版本號碼,因此是最新版本
模型
因此,您不必為所有語言預先載入模型,因為模型可新增 如果找不到指定語言的模型檔案,則文字分類 就會傳回免人工管理值。
Compatibility Test Suite 測試
如要查看相關聯的 Android Compatibility Test Suite (CTS) 測試,請前往:
cts/tests/tests/view/src/android/view/textclassifier/cts/TextClassificationManagerTest.java
cts/tests/tests/widget/src/android/widget/cts/TextViewTest.java
testSmartSelection
testSmartSelection_dragSelection
testSmartSelection_resetSelection