|
住所文字列(位置表現)を含むテキストを入力すると、位置表現を抽出してそのテキストの主題位置に絞り込んだ結果を緯度経度情報付きでJSON形式で応答するAPIです。
LocoSticker賞は、「Nicon COOLPIX P6000」に決定! GPS情報付きの画像投稿に使ってください。 |
位置表現特定APIは、住所やスポット名の文字列を単純にすべてピックアップするものではなく、テキストの主題との関連の強さを判断し、関連の強いものだけを抽出します。
位置表現特定APIの体験や、位置表現特定APIの詳細は、locosticker.jp の LocoSticker 位置表現特定APIをご覧ください。







コメント (8)
PHPで位置表現特定APIを使用し、次のように書きましたが、
結果は、string(20) "{"result_select":[]}"となり、
何も得られません。
どこか間違っていますでしょうか?
//snoopyクラスのインクルード
include "snoopy.php";
//snoopyオブジェクトの生成とプロキシ設定
$snoopy=new Snoopy();
$snoopy->_isproxy = true;
$snoopy->proxy_host = "***.***.***.jp";
$snoopy->proxy_port = "*****";
//場所のサンプルをUTF-8に変換
$tT="名古屋市中区栄1丁目でイベントします。";
//文字コードの変換
$encode = mb_detect_encoding ( $tT, "ISO-8859-1, UTF-8, SJIS, EUC-JP" );
$tT = mb_convert_encoding ( $tT, "UTF-8", $encode );
//パラメータ設定と呼び出し
$postArray = array();
$postArray['text']= urlencode($tT);
$snoopy->submit("http://okilab.jp/project/location/api/v1/extract_place/",$postArray);
//別のやり方でやってみる
$proxy_server = "***.***.***.jp";
$proxy_port = ***;
//fsockopenを使いサーバに接続
$fp = fsockopen ($proxy_server,$proxy_port);
if ( !$fp ) {
echo ( "ERROR:".$proxy_server."に接続できませんでした" );
exit();
}
//HTTPのリクエスト・メッセージ
$url="http://okilab.jp/project/location/api/v1/extract_place/?text=";
$request = "GET ".$url.$postArray['text']."&callback=\"\" HTTP/1.0\n"; //GET
$request .= "Host: ".$proxy_server."\n"; //Host:
$request .= "User-Agent: Spider/1.0\n"; //User-Agent:
$request .= "\n";
fputs ( $fp, $request ); //リクエスト送信
while ( !feof ( $fp ) ) {
$html .= fgets ( $fp, 4096 );
}
fclose ( $fp );
//結果を出力
var_dump($result);
echo $html . "\n";
投稿者: Akira Tanaka | 2008年06月14日 10:44
お返事遅くなってすみません。
PHPは良く分からないのですが、文字コードの変換の辺りが悪いみたいです。
"名古屋市中区栄1丁目でイベントします。"をURLエンコードした結果である$postArray['text'] を echo で出力してみると
%C3%8C%C2%BE%C2%B8%C3%85%C2%B2%C2%B0%C2%BB%C3%94%C3%83%C3%A6%C2%B6%C3%A8%C2%B1%C3%89%C2%A3%C2%B1%C3%83%C3%BA%C3%8C%C3%9C%C2%A4%C3%87%C2%A5%C2%A4%C2%A5%C3%99%C2%A5%C3%B3%C2%A5%C3%88%C2%A4%C2%B7%C2%A4%C3%9E%C2%A4%C2%B9%C2%A1%C2%A3
となりました。(手元のEUC-JPな環境です)
UTF-8をURLエンコードすると
%E5%90%8D%E5%8F%A4%E5%B1%8B%E5%B8%82%E4%B8%AD%E5%8C%BA%E6%A0%84%EF%BC%91%E4%B8%81%E7%9B%AE%E3%81%A7%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%81%97%E3%81%BE%E3%81%99%E3%80%82
となるはずです。
とりあえず、
$tT = mb_convert_encoding ( $tT, "UTF-8", "EUC-JP" );
と決め打ちで書き換えてみたら
({"result_select":[[{"text":"名古屋市中区栄1","lat":"35.166841","weight":2,"type":"address","lng":"136.892241"}]]})
という結果が返るようになりました。
ご参考になれば。
投稿者: tfukui | 2008年06月16日 11:08
安全安心メール
http://anzen.m47.jp/
を制作しました。
ここで本サービスを利用させて頂いています。
http://anzen.m47.jp/mail-294.html
メールだけでは場所がピンと来ない場合が多かったので。
ありがとうございます!
投稿者: 安全安心メールポータル | 2008年06月16日 17:13
本サービスでリクエストパラメータとして与えるtextの長さはどの程度に制限されておりますでしょうか?
Javaから使用する際にパラメータが長すぎるとServer returned HTTP response code: 400 for URLというようなエラーを起こし、レスポンスを得ることができません。
また、重要度の計算方法について簡単にでよいので教えて下さりませんでしょうか?
上記の問題の対応策として、パラメータを分割して送信しようと考えているのですが、それだと文章全体でもっとも重要な位置情報が取れなくなってしまいますよね?
よろしくお願いいたします。
投稿者: hirakawa | 2008年08月04日 21:09
例えば、○○県△△市中央一丁目11-12などの住所の場合、○○県△△市中央一丁目11までしか取れないんじゃないでしょうか。最後まで取れると良かった。
投稿者: 石屋のまいく | 2008年08月18日 16:22
hirakawa さんへ
お返事が大変遅くなってしまい、申し訳ありません。
text で指定する文字列は10000文字以内です。それより長い場合でも10001文字目以降を切り捨てて処理します。400 のエラーになっているのは別の原因ではないでしょうか。
重要度に関しては、残念ながら内部での計算方法等についてはお答えできません。すみません。
投稿者: tfukui | 2008年08月26日 14:03
石屋のまいくさんへ
ご指摘の通り、現在の仕様では「○○県△△市中央一丁目11」までしか抽出できません。将来的にはデータを拡充して「○○県△△市中央一丁目11-12」のレベルにまで対応したいと考えています。
投稿者: tfukui | 2008年08月26日 14:17
ステキなAPIですね。
今度ぜひ使ってみたいです。
「○○県△△市中央一丁目11」までしか抽出できないようですが、
緯度経度がなくてもいいので「○○県△△市中央一丁目11-12」まで取得できるようになっていただけるとうれしいです。
緯度経度があるとうれしいのですが、他でも取得する手段がありますので。
でも、住所情報を抽出できるものは他にはないと思いますので、ぜひ対応をお願いします!
投稿者: 通りすがり | 2008年10月19日 07:33