LY Corporation Mobile NLP SDK は、モバイル端末上で動作するアプリ内で自然言語解析処理を手軽に利用できるようにすることを目的とした SDK です。
現在はその手段のひとつとして、Yahoo!デベロッパーネットワーク(YJDN) が提供するテキスト解析 Web API を Android/iOS アプリ上から簡単に利用できる実装を提供しています。
- クロスプラットフォーム: Android は
.aar、iOS は.xcframeworkを提供 - 最小限のセットアップ: APPID を設定するだけで API 呼び出しを開始
- デモ同梱: 導入・実行手順を確認できるデモアプリを同梱(導入手順にはデモアプリの例が含まれていますが、利用者のアプリに組み込むことを目的としています)
| 機能 | リクエストパラメータの method |
|---|---|
| 日本語形態素解析 | jlp.maservice.parse |
| かな漢字変換 | jlp.jimservice.conversion |
| ルビ振り | jlp.furiganaservice.furigana |
| 校正支援 | jlp.kouseiservice.kousei |
| 日本語係り受け解析 | jlp.daservice.parse |
| キーフレーズ抽出 | jlp.keyphraseservice.extract |
| 自然言語理解 | jlp.nluservice.analyze |
| 固有表現抽出 | jlp.nerservice.extract |
詳細はテキスト解析 WebAPI のドキュメントをご覧ください。
graph TD
%% 全体を縦方向
direction TB
%% =====================
%% 利用者のアプリ/デモアプリ
%% =====================
subgraph apps["アプリ"]
androidApp["androidApp"]
iosApp["iosApp"]
end
%% =====================
%% 配布物
%% =====================
subgraph artifacts["配布物"]
aarDist["Android用 AAR"]
xcDist["iOS用 XCFramework(MobileNLPKit)"]
end
%% 接続(アプリ -> 配布物)
androidApp --> |組み込む| aarDist
iosApp --> |組み込む| xcDist
%% =====================
%% SDK内部構造
%% =====================
subgraph sdk["SDKの内部構造"]
direction TB
%% Android向けSDK
subgraph sdkA["Android向けSDK"]
direction TB
subgraph kmmA["mobilenlp-kit (KMP)"]
direction TB
commonMainA["MobileNLPKitCore (commonMain)"]
androidMainA["Android固有実装 (androidMain)"]
androidMainA --> commonMainA
end
end
%% iOS向けSDK
subgraph sdkI["iOS向けSDK"]
direction TB
subgraph kmmI["mobilenlp-kit (KMP)"]
direction TB
coreI["MobileNLPKitCore (commonMain)"]
end
objcxx["Objective-C++ ブリッジ"]
swiftAPI["MobileNLPKit (Swift API)"]
swiftAPI --> objcxx --> coreI
end
end
%% 矢印: 配布物 -> SDK内部構造
aarDist --> |ビルド元| sdkA
xcDist --> |ビルド元| sdkI
| Platform | OS / API | Toolchain |
|---|---|---|
| Android | API Level 24+ | Kotlin 2.1.21, JDK 17 |
| iOS | iOS 16+ | Xcode 16, Swift 5 系 |
Note: 上記は検証済みの推奨構成です。その他の組み合わせは動作を保証しません。
Yahoo! JAPAN の Web API を利用するには、アプリケーションごとに発行される アプリケーション ID(APPID) が必要です。以下の手順で発行してください。
- https://e.developer.yahoo.co.jp/register にアクセス
- Yahoo! JAPAN ID でログイン
- 「新しいアプリケーションを開発」で必要事項を入力
- 登録完了後、APPID が発行されます
APPID の詳細については、こちらのサポート記事をご覧ください。
本リポジトリのルートディレクトリで以下を実行してください。
$ ./gradlew :mobilenlp-kit:assemble生成先は mobilenlp-kit/build/outputs/aar/mobilenlp-kit-{debug,release}.aar です。
$ ls -L1 mobilenlp-kit/build/outputs/aar/
mobilenlp-kit/build/outputs/aar/mobilenlp-kit-debug.aar
mobilenlp-kit/build/outputs/aar/mobilenlp-kit-release.aar導入先モジュール(<module_root>)に libs ディレクトリを作成し、生成した .aar ファイルを配置してください。
# 例: リリース版の AAR を配置する場合
$ mkdir -p <module_root>/libs
$ cp mobilenlp-kit/build/outputs/aar/mobilenlp-kit-release.aar <module_root>/libs/続いて、導入先モジュールの build.gradle.kts に以下を追記して、Gradle への依存関係を追加してください。
dependencies {
// for mobilenlp-kit
implementation(files("libs/mobilenlp-kit-release.aar"))
// SDK が利用する依存ライブラリ
// ※ 利用者側で確認して追加してください
}本 SDK は、ネットワーク通信や JSON 解析などに外部ライブラリを利用しています。 これらのライブラリは SDK に同梱されないため、利用者のアプリ側で追加が必要です。
どのライブラリが必要かは、以下のコマンドで確認してください。
$ ./gradlew :mobilenlp-kit:dependencies --configuration releaseRuntimeClasspath | grep -E '^(\+|\\)--- '出力例:
+--- io.ktor:ktor-client-okhttp:3.2.1
+--- org.jetbrains.kotlin:kotlin-stdlib:2.1.21 (*)
+--- io.ktor:ktor-client-core:3.2.1 (*)
+--- org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1
\--- org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2 (*)この場合、kotlin-stdlib を除いた以下の依存を追加する必要があります。
implementation("io.ktor:ktor-client-okhttp:3.2.1")
implementation("io.ktor:ktor-client-core:3.2.1")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.1")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2")さらに、ネットワーク通信を行うためには AndroidManifest.xml に以下のパーミッションを追加してください。
<uses-permission android:name="android.permission.INTERNET"/>本リポジトリに含まれる デモアプリ(androidApp)では、mobilenlp-kit モジュールを直接依存関係に含めています。
そのため、デモアプリをビルドする際には .aar を libs/ に配置する必要はありません。
本リポジトリのルートディレクトリで以下を実行してください。
$ ./gradlew :mobilenlp-kit:assembleMobileNLPKitCoreXCFramework生成先は mobilenlp-kit/build/XCFrameworks/{debug,release}/MobileNLPKitCore.xcframework です。
$ ls -L1 mobilenlp-kit/build/XCFrameworks/*/*.xcframework
mobilenlp-kit/build/XCFrameworks/debug/MobileNLPKitCore.xcframework:
Info.plist
ios-arm64
ios-arm64_x86_64-simulator
mobilenlp-kit/build/XCFrameworks/release/MobileNLPKitCore.xcframework:
Info.plist
ios-arm64
ios-arm64_x86_64-simulatorNote: iOS 向け SDK 本体は MobileNLPKit で、内部で
mobilenlp-kitの commonMain を利用します。
Swift Package Manager(SPM)経由で MobileNLPKit を追加してください。
- Xcode でアプリのプロジェクトを開く
- 「PROJECT > Package Dependencies > +」 を開く
- 「Add Local」を選択してこのリポジトリの
Package.swiftを指定する - 「Frameworks, Libraries, and Embedded Content」に
MobileNLPKitを追加する
本リポジトリ内のデモアプリは、生成した MobileNLPKit.framework を直接参照しています。
そのため、iosApp をビルドする際に SPM の追加設定を行う必要はありません。
import jp.co.lycorp.jlp.mobilenlp.kit.JlpHandlerType
import jp.co.lycorp.jlp.mobilenlp.kit.MobileJlpHandlerFactory
import jp.co.lycorp.jlp.mobilenlp.kit.model.JlpMethod
import kotlinx.coroutines.runBlocking
viewModelScope.launch(Dispatchers.IO) {
// 1) ハンドラ作成
val handler = MobileJlpHandlerFactory.create(JlpHandlerType.Online("<APPID>"))
// 2) 解析(suspend)
val response = handler.analyze(JlpMethod.MA, "美しい水車小屋の娘", id = "1234")
// 3) 出力
println(response)
}import MobileNLPKit
// 1) ハンドラ作成
let handler = MobileJlpHandlerFactory.create(JlpHandlerType.online(appid: "<APPID>"))
// 2) 解析(completion)
handler.analyze(method: .ma, query: "美しい水車小屋の娘", id: "1234") { jlpResponse, _ in
// 3) 出力
if let response = jlpResponse {
print(response)
}
}こちらで発行した APPID は、デモアプリで利用するために secrets.properties に以下のように記載してください。
$ cat secrets.properties
appid=your_appid_here # 発行された APPID をここに記載- Android Studio でプロジェクトを開く
- Run Configuration を
androidAppに設定して実行
iosApp/JlpTestApp.xcworkspaceを Xcode で開く- ターゲットを
iosAppに設定し、シミュレータまたは実機で実行
- 利用するメソッド(例:日本語形態素解析)を選択
- 「入力テキスト」に自然文を入力 (デフォルトでサンプルテキストが入力済み)
- 「解析する」ボタンを押下
- JSON 形式の結果が画面下部に表示されることを確認
本プロジェクトのライセンスファイルはこちらからご覧いただけます。
