セットアップ
Watson API 呼び出し用に用意されているライブラリを利用します。
pom.xml
<!-- https://mvnrepository.com/artifact/com.ibm.watson/natural-language-understanding -->
<dependency>
<groupId>com.ibm.watson</groupId>
<artifactId>natural-language-understanding</artifactId>
<version>10.0.0</version>
</dependency>
モデル作成用CSVファイルを用意する
以下のようなCSVファイルを用意します。UTF-8で作成します。BOM付でも問題無いようです。
1列目が例文で2列目が分類したいカテゴリです。例文は適宜用意してください。
テキスト1-1,CATEGORY1
テキスト1-2,CATEGORY1
テキスト1-3,CATEGORY1
テキスト1-4,CATEGORY1
テキスト1-5,CATEGORY1
テキスト1-6,CATEGORY1
テキスト1-7,CATEGORY1
テキスト1-8,CATEGORY1
テキスト1-9,CATEGORY1
テキスト2-1,CATEGORY2
テキスト2-2,CATEGORY2
テキスト2-3,CATEGORY2
テキスト2-4,CATEGORY2
テキスト2-5,CATEGORY2
テキスト2-6,CATEGORY2
テキスト2-7,CATEGORY2
テキスト2-8,CATEGORY2
テキスト2-9,CATEGORY2
テキスト2-10,CATEGORY2
モデルの作成
Watson NLU の管理コンソールからAPI KEYを取得しておきます。
以下サンプルでは Config.API_KEY1 にセットしてあります。
また、APIをコールするエンドポイントのURLも管理コンソールで取得しておきます。
以下サンプルでは Config.URL_NLU1 にセットしてあります。
package nlu;
import java.io.File;
import com.ibm.cloud.sdk.core.security.IamAuthenticator;
import com.ibm.watson.natural_language_understanding.v1.NaturalLanguageUnderstanding;
import com.ibm.watson.natural_language_understanding.v1.model.ClassificationsModel;
import com.ibm.watson.natural_language_understanding.v1.model.CreateClassificationsModelOptions;
/**
* https://cloud.ibm.com/apidocs/natural-language-understanding?code=java#createclassificationsmodel
*/
public class P001CreateModel {
public static void main(String[] args) throws Exception {
@SuppressWarnings("deprecation")
IamAuthenticator authenticator = new IamAuthenticator(Config.API_KEY1);
NaturalLanguageUnderstanding naturalLanguageUnderstanding = new NaturalLanguageUnderstanding(
"2022-04-07", authenticator);
naturalLanguageUnderstanding.setServiceUrl(Config.URL_NLU1);
File trainingData = new File("data/classification/model_q1.csv");
CreateClassificationsModelOptions op = new CreateClassificationsModelOptions.Builder() //
.description("This is test") //
.language("ja") //
.modelVersion("1.0.1") //
.name("test name") //
.trainingData(trainingData) //
.versionDescription("test versionDescription") //
.trainingDataContentType("text/csv") //
.build();
ClassificationsModel res = naturalLanguageUnderstanding
.createClassificationsModel(op).execute().getResult();
System.err.println(res);
}
}
モデルの一覧を取得する
作成した分類モデルの一覧や、ステータスを確認できます。
「モデルID」を取得することができるので控えておきます。
package nlu;
import com.ibm.cloud.sdk.core.security.IamAuthenticator;
import com.ibm.watson.natural_language_understanding.v1.NaturalLanguageUnderstanding;
import com.ibm.watson.natural_language_understanding.v1.model.ClassificationsModelList;
/**
* https://cloud.ibm.com/apidocs/natural-language-understanding?code=java#listclassificationsmodels
*/
public class P002ListModels {
public static void main(String[] args) throws Exception {
@SuppressWarnings("deprecation")
IamAuthenticator authenticator = new IamAuthenticator(Config.API_KEY1);
NaturalLanguageUnderstanding naturalLanguageUnderstanding = new NaturalLanguageUnderstanding(
"2022-04-07", authenticator);
naturalLanguageUnderstanding.setServiceUrl(Config.URL_NLU1);
ClassificationsModelList res = naturalLanguageUnderstanding
.listClassificationsModels().execute().getResult();
System.err.println(res);
}
}
モデルを利用してテキストの分類を行う
package nlu;
import com.ibm.cloud.sdk.core.security.IamAuthenticator;
import com.ibm.watson.natural_language_understanding.v1.NaturalLanguageUnderstanding;
import com.ibm.watson.natural_language_understanding.v1.model.AnalysisResults;
import com.ibm.watson.natural_language_understanding.v1.model.AnalyzeOptions;
import com.ibm.watson.natural_language_understanding.v1.model.ClassificationsOptions;
import com.ibm.watson.natural_language_understanding.v1.model.Features;
/**
* https://cloud.ibm.com/apidocs/natural-language-understanding?code=java#analyze
*/
public class P004Classification {
public static void main(String[] args) throws Exception {
@SuppressWarnings("deprecation")
IamAuthenticator authenticator = new IamAuthenticator(Config.API_KEY1);
NaturalLanguageUnderstanding naturalLanguageUnderstanding = new NaturalLanguageUnderstanding(
"2022-04-07", authenticator);
naturalLanguageUnderstanding.setServiceUrl(Config.URL_NLU1);
String model = "XXX";
String text = "{分類したいテキスト}";
ClassificationsOptions op = new ClassificationsOptions.Builder() //
.model(model) //
.build();
Features features = new Features.Builder() //
.classifications(op) //
.build();
AnalyzeOptions parameters = new AnalyzeOptions.Builder().text(text)
.features(features).build();
AnalysisResults response = naturalLanguageUnderstanding
.analyze(parameters).execute().getResult();
System.out.println("Input : " + text);
System.out.println("Output: ");
System.out.println(response);
}
}
以上。
(APIレスポンスの例は後日追加予定です。。)