テキストクラスタリング
複数の文を受け取り、同じトピックについて記述されている可能性が高い文同士をまとめ上げるテキストクラスタリング機能を提供します。
リクエストURL
JSON
https://jlp.yahooapis.jp/jsonrpc
※Client ID(アプリケーションID)をリクエストに付与する必要があります。詳細はサンプルコードをご覧ください。
リクエストパラメータ(POST)
JSON-RPC 2.0 の仕様に準拠しています。
| パラメータ | 値 | 説明 |
|---|---|---|
| id(必須) | string,integer | JSON-RPC 2.0 のid。値は任意で、指定した値がレスポンスのidにも返ります。 |
| jsonrpc(必須) | string | 値は「2.0」としてください。 |
| method(必須) | string | 値は「jlp.text_clusterer.cluster」としてください。 |
| params(必須) | object | |
| params/q(必須) | string | 改行(LF)区切りの文リストを、UTF-8とBASE64でエンコードした文字列を指定します。 最大1,000行の文を含めることができ、一文あたり65,536byteが上限です。 それぞれ上限をオーバーした場合はエラーが返ります。ファイルの中身を分割するなどしてリクエストし直してください。 |
| params/similarity_threshold(任意) | number | 同クラスタと判定する文同士のコサイン類似度の下限です。 指定しない場合のデフォルト値は0.3です。 クラスタの粒度をより細かくしたい場合にこの数値を上げてください。 0.0より大きく、1.0より小さな値のみを受け取ります(それ以外の場合はエラーが返ります)。 データの性質や目的に応じて最適なsimilarity_thresholdは変わりうるので、 固定値としては扱わず、クラスタリング結果に応じて調整することを推奨します。 |
サンプルリクエスト
{
"id": "1234-1",
"jsonrpc" : "2.0",
"method" : "jlp.text_clusterer.cluster",
"params" : {
"q" : "5aSp5rCX5LqI5aCx44Gv5pm044KM44Gg44GR44Gp44CB5LuK5pel44Gv5YKY44KS5oyB44Gj44Gm44GE44GT44GG44CC44GN44Gj44Go6Zuo44CCCuOCq+ODrOODvOODqeOCpOOCueOBruOBlOmjr+OBq+WPpOWPpOexs+OCkuS9v+eUqOOBmeOCi+OAguODqeODvOODoeODs+OBruODqeOCpOOCueOBq+aWsOexs+OCkuS9v+eUqOOBmeOCi+OAggrlpKnmsJfjga/ltKnjgozjgabjgYTjgovjga7jgaflgpjjgYzlo7LjgozjgovjgYvjgoLjgZfjgozjgarjgYTjgILmmbTjgozjgovjga7jga/lvZPliIblhYjjgafku4rml6Xjga/pm6jjga7jga/jgZrjgIIK5Y+k5Y+k57Gz44Gu5L6h5qC844GM5aSn5bmF5LiL6JC944CC44K544O844OR44O844Oe44O844Kx44OD44OI44Gr5q665Yiw44GZ44KL44Kr44Os44O844Op44Kk44K55aW944GN44CCCkJCUeODkeODvOODhuOCo+OBruaKvemBuOOBq+OBr+OBmuOCjOOBn+OBruOBp+S7iuaXpeOBr+OBteOBpuWvneOBmeOCi+OAggrlpKnmsJfjga7oia/jgYTml6Xjgavjgqvjg6zjg7zjgYzpo5/jgbnjgZ/jgYTjgILlhYjpgLHjga/ml6flnovjg4/jg7zjg4njgpLosrfjgYbjgbnjgY3jgaDjgaPjgZ/jgIIK5aSp5rCX44Gu6Imv44GE5pel44GrQkJR44OR44O844OG44Kj44KS6ZaL44GN44Gf44GE44CC5Y675bm044Gv44Os44OI44Ot44K944OV44OI44KS6LK344GG44G544GN44Gg44Gj44Gf44CCCuWkqeawl+OBruaCquOBhOaXpeOBq+OCq+ODrOODvOOCkumjn+OBueOCi+OBquOAguadpeW5tOOBr+acgOaWsOapn+eoruOCkuiyt+OBhuOBueOBjeOAggrlpKnmsJfjga7mgqrjgYTml6Xjgavjgqvjg6zjg7zjg6njgqTjgrnjgYzpo5/jgbnjgZ/jgYTjgILku4rpgLHjga/jgqLjg4rjg63jgrDmqZ/nqK7jgpLosrfjgYbjgbnjgY3jgII="
}
}
サンプルコード
解析対象の文リストをエンコードし、テキストクラスタリングを使用したサンプルコードです。
レスポンスフィールド
JSON-RPC 2.0 の仕様に準拠しています。
| フィールド | 値 | 説明 |
|---|---|---|
| id | string,integer | リクエストのidの値が返ります。 |
| jsonrpc | string | 固定で「"2.0"」が返ります。 |
| result | object | テキストクラスタリングの結果です。 |
| result/blocked_result | array(object) | 各クラスタごとの情報の配列です。 |
| result/blocked_result/index | array(integer) | クラスタとしてまとめ上げられた文の行番号(先頭行は1)の配列です。 いずれのクラスタにも含まれなかった文の行番号は出力されません。 |
| result/blocked_result/topic | array(string) | まとめ上げられた文クラスタごとに抽出されたそれぞれのトピックです(最大10件)。 クラスタ中の各文に含まれるキーフレーズがトピックとして抽出されます。 |
サンプルレスポンス
以下は、上で例示したリクエストに対するレスポンスです。
{
"id": "1234-1",
"jsonrpc": "2.0",
"result": {
"blocked_result": [
{
"index": [
1,
3
],
"topic": [
"天気"
]
},
{
"index": [
2,
4
],
"topic": [
"カレー"
]
},
{
"index": [
5,
7
],
"topic": [
"天気"
]
},
{
"index": [
6,
8,
9
],
"topic": [
"カレー",
"天気"
]
}
]
}
}
エラー
テキストクラスタリングは、Yahoo! JAPAN Web API に共通のエラーメッセージおよびコードが返ります。
また、リクエストパラメータが本ドキュメント記載の仕様と異なる場合、ステータスコード200で JSON-RPC 2.0 の仕様に準拠したレスポンスが返ることがあります。
| フィールド | 値 | 説明 |
|---|---|---|
| id | string, integer | リクエストのidの値が返ります。 |
| jsonrpc | string | 固定で「"2.0"」が返ります。 |
| error | object | |
| error/code | integer | JSON-RPC 2.0 の仕様に準拠したエラーコードです。 |
| error/message | string | JSON-RPC 2.0 の仕様に準拠したエラーメッセージです。 |
例1:不正なJSONの場合
リクエスト
{
"id": "1234-1",
"jsonrpc" : "2.0",
"method" : "jlp.text_clusterer.cluster",
"params" : {
"q" : "5aSp5rCX5LqI5aCx44Gv5pm044KM44Gg44GR44Gp44CB5LuK5pel44Gv5YKY44KS5oyB44Gj44Gm44GE44GT44GG44CC44GN44Gj44Go6Zuo44CCCuOCq+ODrOODvOODqeOCpOOCueOBruOBlOmjr+OBq+WPpOWPpOexs+OCkuS9v+eUqOOBmeOCi+OAguODqeODvOODoeODs+OBruODqeOCpOOCueOBq+aWsOexs+OCkuS9v+eUqOOBmeOCi+OAggrlpKnmsJfjga/ltKnjgozjgabjgYTjgovjga7jgaflgpjjgYzlo7LjgozjgovjgYvjgoLjgZfjgozjgarjgYTjgILmmbTjgozjgovjga7jga/lvZPliIblhYjjgafku4rml6Xjga/pm6jjga7jga/jgZrjgIIK5Y+k5Y+k57Gz44Gu5L6h5qC844GM5aSn5bmF5LiL6JC944CC44K544O844OR44O844Oe44O844Kx44OD44OI44Gr5q665Yiw44GZ44KL44Kr44Os44O844Op44Kk44K55aW944GN44CCCkJCUeODkeODvOODhuOCo+OBruaKvemBuOOBq+OBr+OBmuOCjOOBn+OBruOBp+S7iuaXpeOBr+OBteOBpuWvneOBmeOCi+OAggrlpKnmsJfjga7oia/jgYTml6Xjgavjgqvjg6zjg7zjgYzpo5/jgbnjgZ/jgYTjgILlhYjpgLHjga/ml6flnovjg4/jg7zjg4njgpLosrfjgYbjgbnjgY3jgaDjgaPjgZ/jgIIK5aSp5rCX44Gu6Imv44GE5pel44GrQkJR44OR44O844OG44Kj44KS6ZaL44GN44Gf44GE44CC5Y675bm044Gv44Os44OI44Ot44K944OV44OI44KS6LK344GG44G544GN44Gg44Gj44Gf44CCCuWkqeawl+OBruaCquOBhOaXpeOBq+OCq+ODrOODvOOCkumjn+OBueOCi+OBquOAguadpeW5tOOBr+acgOaWsOapn+eoruOCkuiyt+OBhuOBueOBjeOAggrlpKnmsJfjga7mgqrjgYTml6Xjgavjgqvjg6zjg7zjg6njgqTjgrnjgYzpo5/jgbnjgZ/jgYTjgILku4rpgLHjga/jgqLjg4rjg63jgrDmqZ/nqK7jgpLosrfjgYbjgbnjgY3jgII="
}
レスポンス
{
"id": null,
"jsonrpc": "2.0",
"error": {
"code": -32700,
"message": "Parse error"
}
}
例2:必須のパラメータがない場合
リクエスト
{
"id": "1234-1",
"jsonrpc": "2.0",
"params": {
"q": "5aSp5rCX5LqI5aCx44Gv5pm044KM44Gg44GR44Gp44CB5LuK5pel44Gv5YKY44KS5oyB44Gj44Gm44GE44GT44GG44CC44GN44Gj44Go6Zuo44CCCuOCq+ODrOODvOODqeOCpOOCueOBruOBlOmjr+OBq+WPpOWPpOexs+OCkuS9v+eUqOOBmeOCi+OAguODqeODvOODoeODs+OBruODqeOCpOOCueOBq+aWsOexs+OCkuS9v+eUqOOBmeOCi+OAggrlpKnmsJfjga/ltKnjgozjgabjgYTjgovjga7jgaflgpjjgYzlo7LjgozjgovjgYvjgoLjgZfjgozjgarjgYTjgILmmbTjgozjgovjga7jga/lvZPliIblhYjjgafku4rml6Xjga/pm6jjga7jga/jgZrjgIIK5Y+k5Y+k57Gz44Gu5L6h5qC844GM5aSn5bmF5LiL6JC944CC44K544O844OR44O844Oe44O844Kx44OD44OI44Gr5q665Yiw44GZ44KL44Kr44Os44O844Op44Kk44K55aW944GN44CCCkJCUeODkeODvOODhuOCo+OBruaKvemBuOOBq+OBr+OBmuOCjOOBn+OBruOBp+S7iuaXpeOBr+OBteOBpuWvneOBmeOCi+OAggrlpKnmsJfjga7oia/jgYTml6Xjgavjgqvjg6zjg7zjgYzpo5/jgbnjgZ/jgYTjgILlhYjpgLHjga/ml6flnovjg4/jg7zjg4njgpLosrfjgYbjgbnjgY3jgaDjgaPjgZ/jgIIK5aSp5rCX44Gu6Imv44GE5pel44GrQkJR44OR44O844OG44Kj44KS6ZaL44GN44Gf44GE44CC5Y675bm044Gv44Os44OI44Ot44K944OV44OI44KS6LK344GG44G544GN44Gg44Gj44Gf44CCCuWkqeawl+OBruaCquOBhOaXpeOBq+OCq+ODrOODvOOCkumjn+OBueOCi+OBquOAguadpeW5tOOBr+acgOaWsOapn+eoruOCkuiyt+OBhuOBueOBjeOAggrlpKnmsJfjga7mgqrjgYTml6Xjgavjgqvjg6zjg7zjg6njgqTjgrnjgYzpo5/jgbnjgZ/jgYTjgILku4rpgLHjga/jgqLjg4rjg63jgrDmqZ/nqK7jgpLosrfjgYbjgbnjgY3jgII="
}
}
レスポンス
{
"id": "1234-1",
"jsonrpc": "2.0",
"error": {
"code": -32600,
"message": "Invalid request"
}
}
例3:存在しないmethodを指定した場合
リクエスト
{
"id": "1234-1",
"method": "invalid.method.name",
"jsonrpc" : "2.0",
"params" : {
"q" : "5aSp5rCX5LqI5aCx44Gv5pm044KM44Gg44GR44Gp44CB5LuK5pel44Gv5YKY44KS5oyB44Gj44Gm44GE44GT44GG44CC44GN44Gj44Go6Zuo44CCCuOCq+ODrOODvOODqeOCpOOCueOBruOBlOmjr+OBq+WPpOWPpOexs+OCkuS9v+eUqOOBmeOCi+OAguODqeODvOODoeODs+OBruODqeOCpOOCueOBq+aWsOexs+OCkuS9v+eUqOOBmeOCi+OAggrlpKnmsJfjga/ltKnjgozjgabjgYTjgovjga7jgaflgpjjgYzlo7LjgozjgovjgYvjgoLjgZfjgozjgarjgYTjgILmmbTjgozjgovjga7jga/lvZPliIblhYjjgafku4rml6Xjga/pm6jjga7jga/jgZrjgIIK5Y+k5Y+k57Gz44Gu5L6h5qC844GM5aSn5bmF5LiL6JC944CC44K544O844OR44O844Oe44O844Kx44OD44OI44Gr5q665Yiw44GZ44KL44Kr44Os44O844Op44Kk44K55aW944GN44CCCkJCUeODkeODvOODhuOCo+OBruaKvemBuOOBq+OBr+OBmuOCjOOBn+OBruOBp+S7iuaXpeOBr+OBteOBpuWvneOBmeOCi+OAggrlpKnmsJfjga7oia/jgYTml6Xjgavjgqvjg6zjg7zjgYzpo5/jgbnjgZ/jgYTjgILlhYjpgLHjga/ml6flnovjg4/jg7zjg4njgpLosrfjgYbjgbnjgY3jgaDjgaPjgZ/jgIIK5aSp5rCX44Gu6Imv44GE5pel44GrQkJR44OR44O844OG44Kj44KS6ZaL44GN44Gf44GE44CC5Y675bm044Gv44Os44OI44Ot44K944OV44OI44KS6LK344GG44G544GN44Gg44Gj44Gf44CCCuWkqeawl+OBruaCquOBhOaXpeOBq+OCq+ODrOODvOOCkumjn+OBueOCi+OBquOAguadpeW5tOOBr+acgOaWsOapn+eoruOCkuiyt+OBhuOBueOBjeOAggrlpKnmsJfjga7mgqrjgYTml6Xjgavjgqvjg6zjg7zjg6njgqTjgrnjgYzpo5/jgbnjgZ/jgYTjgILku4rpgLHjga/jgqLjg4rjg63jgrDmqZ/nqK7jgpLosrfjgYbjgbnjgY3jgII="
}
}
レスポンス
{
"id": "1234-1",
"jsonrpc": "2.0",
"error": {
"code": -32601,
"message": "Method not found"
}
}
利用制限
テキストクラスタリングでは、1リクエストの最大サイズを 100KB に制限しています。また、利用回数の制限については利用回数の制限についてをご参照ください。
補足情報
技術詳細については以下をご参照ください。
Renga Block: Q-grams Blocking を用いた 高速名寄せ・高速テキストクラスタリングの実装