はじめに
Watson DiscoveryのAnalyze APIを実行すると、入力された自然文に対してアノテーションした結果を返してくれます。
もう少し詳細に説明すると、コレクションに対して、ファセット辞書や、正規表現、文書分類器、などなどを適用していた場合、コレクションに分析対象の文書を投入しなくとも、APIで指定した自然文に対して分析した結果を返してくれます。
百聞は一見にしかずということで実際にやってみました。
前提
予めコレクションに以下を作成して適用しています。作成手順はここでは割愛します。
Analyze API
input_text = '{"text" : "Googleで検索したところ、「リアル・スチール」はスティーブン・スピルバーグ監督の映画だったことがわかりました。"}'
textname = 'テスト'
response = discovery.analyze_document(
project_id = project_id,
collection_id = collection_id,
file = input_text,
filename = textname,
file_content_type = 'application/json'
).get_result()
-
input_text
: ここに入力された文が分析対象となります。 -
textname
: これが何のために使われているかはよく分かりません。。。が、必須のようです。 -
analyze_document
: Analyze API
結果
期待する結果
入力テキスト Googleで検索したところ、「リアル・スチール」はスティーブン・スピルバーグ監督の映画だったことがわかりました。
に対して期待する結果は以下です。
- Google : 企業名を抽出するファセット辞書にヒットする
- 「リアル・スチール」 : かぎ括弧で囲まれた文字列を抽出する正規表現にヒットする
- 文書分類 : 映画エンターテイメント として分類される
結果
1. 企業名を抽出するファセット辞書にヒットする単語
{
"text": "Google",
"type": "company_dic",
"mentions": [
{
"text": "Google",
"confidence": 1.0,
"location": {
"begin": 0,
"end": 6
}
}
],
"model_name": "Dictionary:.company_dic"
},
Google
が company_dic
という Dictionary
で抽出されていることがわかります。
ちなみに、 company_dic
は自分で作ったファセット辞書の名前です。
2. かぎ括弧で囲まれた文字列を抽出する正規表現にヒットする単語
{
"text": "「リアル・スチール」",
"type": "brackets_regex",
"mentions": [
{
"text": "「リアル・スチール」",
"confidence": 1.0,
"location": {
"begin": 15,
"end": 25
}
}
],
"model_name": "brackets_regex"
}
「リアル・スチール」
が brackets_regex
という正規表現で抽出されていることがわかります。
ちなみに、 brackets_regex
は自分で作った正規表現の定義の名前です。
3. 文書分類
"document_level_enrichment": {
"classes": [
{
"class_name": "movie-enter",
"confidence": 0.5397826433181763,
"classifier_name": "livedoor classifier_v0.1"
}
]
}
文書分類器 livedoor classifier_v0.1
の結果として movie-enter
(映画エンターティメント)と分類されたことがわかります。
ちなみに、 livedoor classifier
は自分で作った文書分類器の名前です。
参考
お断り
このサイトの掲載内容は私自身の見解であり、必ずしも所属会社の立場、戦略、意見を代表するものではありません。 記事は執筆時点の情報を元に書いているため、必ずしも最新情報であるとはかぎりません。 記事の内容の正確性には責任を負いません。自己責任で実行してください。