たつをの ChangeLog

26 件 見つかりました。

1 2 3 4 5 6 [ 次へ ]

先日の記事「【WebAPI】住所の一部を検索キーワードとして緯度経度を得る【Perl】」[2016-01-13-1]の続きです。

「ジオコーダAPI」では住所の一部に対してのみ情報を返しますが、「コンテンツジオコーダAPI」はランドマーク名も返します。


しかし、その結果は微妙です。複数の結果が返ってくるときに、どんぴしゃのが1位じゃないことがあるのです。なので、ランドマーク等のキーワードから緯度経度を得るというタスクでは、返ってきた全結果をチェックする必要があります。たぶん。

メモ:
  • パラメータ category を "landmark,address" にすると住所の一部とランドマーク名のどちらにもマッチする。
  • 複数のマッチ結果が返ってきますが順番が謎。
    • なので、全結果をスキャンする。
  • Genre フィールドが 80 だと住所の一部。
    • これを最優先とする。
  • それ以外は、Name フィールドと検索キーが完全にマッチするかどちらか一方が完全に含まれるかチェックして判断。

■コード (word2latlong.pl)
#!/usr/bin/env perl
use strict;
use warnings;
use LWP::Simple;
use URI::Escape;
use utf8;
use open ':utf8';
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";
my $appid = "THISISAPEN";
while (<>) {
    chomp;
    my @r = word_to_latlong({key => $_, appid => $appid});
    print join("\t", @r, $_)."\n";
}
sub word_to_latlong {
    my ($args_ref) = @_;
    my $key = $args_ref->{key};
    my $ek = URI::Escape::uri_escape_utf8($key);
    my $murl =
        "http://contents.search.olp.yahooapis.jp/OpenLocalPlatform/V1/contentsGeoCoder"
        ."?appid=$args_ref->{appid}&query=$ek&category=landmark,address";
    my $r = get($murl);
    my ($lat, $long, $name) = ("", "", "");
    while ($r =~ m{<Feature>(.+?)</Feature>}gsm) {
        my $i = $1;
        my ($genre) = $i =~ m{<Genre>(.+?)</Genre>};
        my ($name_tmp) = $i =~ m{<Name>(.+?)</Name>};
        if ($genre == 80 # 住所の一部
            or $key =~ /\Q$name_tmp\E/
            or $name_tmp =~ /\Q$key\E/
            ) {
            $name = $name_tmp;
            ($lat, $long) = $i =~ m{<Coordinates>(.+?),(.+?)</Coordinates>};
            last;
        }
    }
    return ($lat, $long, $name);
}

■実行例
% cat word2latlong-test.txt
東京都渋谷区
東京都港区
神奈川県横浜市中区
神奈川県足柄上郡山北町
こんにちは
東京タワー
東京ミッドタウン
タワー
ミッドタウン
% ./word2latlong.pl word2latlong-test.txt
139.69822020	35.66403830	東京都渋谷区	東京都渋谷区
139.75160740	35.65807070	東京都港区	東京都港区
139.64218630	35.44470240	神奈川県横浜市中区	神奈川県横浜市中区
139.08383880	35.36060800	神奈川県足柄上郡山北町	神奈川県足柄上郡山北町
			こんにちは
139.7454106	35.6586309	東京タワー	東京タワー
139.7310060	35.6657215	東京ミッドタウン	東京ミッドタウン
139.7454106	35.6586309	東京タワー	タワー
139.7310060	35.6657215	東京ミッドタウン	ミッドタウン

ミッドタウンといえば東京ミッドタウン、これは納得。
タワーといえば東京タワー、ううむどうかなあ。

なんにせよアドホックなロジックなのでご了承ください。

あとは、この緯度経度を「スタティックマップAPI」で地図画像に変換したりします。


以上、気をつけながらご利用ください。

なお、アプリケーションID (appid) の取得は下記からどうぞ:
http://e.developer.yahoo.co.jp/webservices/register_application

かなり前に作った、キーワード(住所の一部)を入れると緯度経度を返すコマンドラインスクリプトを整理して公開しときます。YOLPのジオコーダAPIを叩いているだけのサンプルプログラムです。実行にはアプリケーションIDが必要です。

こちらの「ジオコーダAPI」では住所の一部に対してのみ情報を返します。

- YOLP(地図):Yahoo!ジオコーダAPI - Yahoo!デベロッパーネットワーク
http://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/geocoder.html

「コンテンツジオコーダAPI」はそれにプラスしてランドマーク名にも対応しています。

- YOLP(地図):コンテンツジオコーダAPI - Yahoo!デベロッパーネットワーク
http://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/contentsgeocoder.html

後者の「コンテンツジオコーダAPI」の方が良さそうですが、意図しない結果が出ることがあり調整が必要なのが難点。説明が面倒なのでまた別途記事を書きますね。

今回は前者の「ジオコーダAPI」を使い、キーワードを住所の一部に限定したバージョンをのせておきます。

■コード (address2latlong.pl)
#!/usr/bin/env perl
use strict;
use warnings;
use LWP::Simple;
use URI::Escape;
my $appid = "(YOUR APP ID)";
while (<>) {
    chomp;
    my @r = address_to_latlong({key => $_, appid => $appid});
    print join("\t", @r, $_)."\n";
}
sub address_to_latlong {
    my ($args_ref) = @_;
    my $ek = URI::Escape::uri_escape($args_ref->{key});
    my $murl =
        "http://geo.search.olp.yahooapis.jp/OpenLocalPlatform/V1/geoCoder"
        ."?appid=$args_ref->{appid}&query=$ek&datum=tky";
    my $r = get($murl);
    my ($lat, $long) = $r =~ m{<Coordinates>(.+?),(.+?)</Coordinates>};
    return ($lat||"", $long||"");
}

■実行例
% cat address2latlong-test.txt
東京都渋谷区
東京都港区
神奈川県横浜市中区
神奈川県足柄上郡山北町
こんにちは
東京タワー
東京ミッドタウン
% ./address2latlong.pl address2latlong-test.txt
139.69822020	35.66403830	東京都渋谷区
139.75160740	35.65807070	東京都港区
139.64218630	35.44470240	神奈川県横浜市中区
139.08383880	35.36060800	神奈川県足柄上郡山北町
		こんにちは
		東京タワー
		東京ミッドタウン
(「住所の一部」でないクエリは、結果が返って来ません)

以上、どうぞご利用ください。

なお、アプリケーションID (appid) の取得は下記からどうぞ:
http://e.developer.yahoo.co.jp/webservices/register_application

ブログ記事メンテナンスのメモ。

Yahoo!ウェブ検索APIなど終わって久しいので、それがらみの記事については下記の注意書きを足した。

使用している Web API の提供が終了となったため、現在動作しません。ご了承ください。


例:Yahoo! ウェブ検索 API で単語同士の近さを総当たりで調べる[2009-02-26-2]

あと、日本語形態素解析APIの記事でAPIのURLが古いままだったのがあったので変更。
- 旧:api.jlp.yahoo.co.jp
- 新:jlp.yahooapis.jp

以上。

「第一回集合知シンポジウム」でプレゼンしたのですが、そのときデモしたり言及したりしたURLのリストです。

第一部 ウェブサービス(Web API)の基礎知識


- [を] ウェブサービス(Web API)とは?[2009-12-24-1]

- [を] ウェブサービス(Web API)をプログラムから使う[2009-12-26-2]

- MECAPI - MeCab Web Service (MeCab API)
ttp://mimitako.net/api/mecapi.cgi
ttp://yapi.ta2o.net/apis/mecapi.cgi
追記180618: 負荷が厳しいため何年か前から停止中)

- Yahoo!デベロッパーネットワーク
http://developer.yahoo.co.jp/

- Yahoo!デベロッパーネットワーク - アプリケーションIDの登録
http://e.developer.yahoo.co.jp/webservices/register_application

第二部 Web API を使ったテキストマイニング


- Y!API demo forms
http://yapi.ta2o.net/demos/yapis.html

- 頻度君(hindokun)
http://yapi.ta2o.net/hindokun/
(解説→[2010-01-13-2]

- なんでも比較
http://chalow.net/misc/plothikaku.cgi
(解説→[2008-03-19-4]

- 安藤 進 / 翻訳に役立つGoogle活用テクニック


- Yahoo!デベロッパーネットワーク - 検索 - ウェブ検索
http://developer.yahoo.co.jp/webapi/search/websearch/v1/websearch.html

- Y!API demo forms - ウェブ検索
http://yapi.ta2o.net/demos/yapis.html#ws

- 英語例文検索 EReK
http://erek.ta2o.net/

- 日本語例文検索 JReK
http://jrek.ta2o.net/

- 英文校正サイト [NativeChecker]
http://native-checker.com/

- [を] Yahoo! ウェブ検索 API で単語同士の近さを総当たりで調べる[2009-02-26-2]

- kanren five
http://yapi.ta2o.net/k5/
(整備中)

- 高校で授業してきました(2009/11)[2009-11-11-2]

- Web関連語抽出
http://yapi.ta2o.net/kanrenp/ 

- Web単語共起
http://yapi.ta2o.net/tangokyouki/

- Yahoo!デベロッパーネットワーク - 検索 - 関連検索ワード
http://developer.yahoo.co.jp/webapi/search/assistsearch/v1/webunitsearch.html

- Y!API demo forms - 関連検索ワード
http://yapi.ta2o.net/demos/yapis.html#as

- コトバつながル!
http://kotoba.tsunaga.ru/
(動かない)

- 発想支援ナビ
http://navi.ta2o.net/

- Yahoo!ブログ検索 http://blog-search.yahoo.co.jp/
(関連語抽出結果→ブログ検索の「似たものワード」)

- Yahoo!人物名鑑
http://talent.yahoo.co.jp/
(人物間関連度の抽出結果→人物名鑑の「関係ありそうな人物名」)

- 人物情報検索のトレンドご紹介 part3 テキストマイニング技術について (Yahoo! JAPAN Tech Blog)
http://techblog.yahoo.co.jp/cat207/cat214/part3/

- 有名人身長推定サイト SETAKE
ttp://setake.net/

- uroboe うろぼえ
http://uroboe.seewee.net/
(例:アンブレラ, 解説→http://blog.overlasting.net/2007-06-13-1.html

- 買ったら検索
http://kattara.ta2o.net/

- 簡易好き嫌い判定
http://sukikirai.ta2o.net/

第三部 Web API で自然言語処理


- Yahoo!デベロッパーネットワーク - テキスト解析 - 日本語形態素解析
http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html

- Y!API demo forms - 日本語形態素解析
http://yapi.ta2o.net/demos/yapis.html#ma

- テキスト変換(笑)
http://yapi.ta2o.net/wara/

- Yahoo!デベロッパーネットワーク - テキスト解析 - キーフレーズ抽出
http://developer.yahoo.co.jp/webapi/jlp/keyphrase/v1/extract.html

- Y!API demo forms - キーフレーズ抽出
http://yapi.ta2o.net/demos/yapis.html#kp

- キーフレーズ抽出タグクラウド風
http://yapi.ta2o.net/demos/kp.html
(解説→[2009-07-09-3]

- YeNikki - Yahoo! JAPAN API を利用した自動絵日記システム
http://yapi.ta2o.net/yenikki/
(解説→[2009-07-05-3]

- Yahoo!デベロッパーネットワーク - テキスト解析 - 日本語係り受け解析
http://developer.yahoo.co.jp/webapi/jlp/da/v1/parse.html

- Y!API demo forms - 日本語係り受け解析
http://yapi.ta2o.net/demos/yapis.html#da

- [を] ヤフーの日本語係り受け解析APIとサンプルプログラム「なんちゃって文章要約」[2008-08-21-1]

- Kutter::Web
http://kutter.pulpsite.net/
(係り受けAPI使用。解説記事あり→[2010-01-20-4]

- 文で検索
http://yapi.ta2o.net/bundekensaku/

- Yahoo!デベロッパーネットワーク - ショッピング - コンテンツマッチアイテム
http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/contentmatchitem.html

- Y!API demo forms - コンテンツマッチアイテム
http://yapi.ta2o.net/demos/yapis.html#scmi

- [を] Yahoo!ショッピングのコンテンツマッチAPIが登場![2008-08-28-1]

関連記事


他のプレゼンにおけるURLのリスト記事:
- 高校での授業(2009/11)[2009-11-11-2]
- MA5 Mashup Caravan in GINZA/2[2009-10-26-2]
- Yahoo! JAPAN × ロクナナワークショップ クリエイティブカレッジ[2009-07-10-2]
- 筑波大学コンテンツ工学セミナー[2009-05-26-2]

第一回集合知シンポジウム:
- 1日目[2010-01-25-1]
- 2日目[2010-01-26-1]

頻度を調べるだけのネットサービス「頻度君」をリリースしました。

使用している Web API の提供が終了となったため、現在動作しません。ご了承ください。


頻度君(hindokun)
http://yapi.ta2o.net/hindokun/
画像

ネットサービスというよりも、
Yahoo!API の使い方のサンプル、デモですね。

キーワードを入力し、
改行またはボタンをクリックすると、
その検索結果数(頻度)が Ajax で動的に表示されます。
結果は行として追加されていきます。
左の「x」をクリックするとその行を消すことができます。

§

JavaScript から呼び出している CGI (webfreq.cgi)は、YDN のウェブ検索APIを呼び出して検索結果数(totalResultsAvailable)を JSONP 形式で返しています。

webfreq.cgi のソース:
#!/usr/bin/perl -T
use strict;
use warnings;
use LWP::Simple;
use URI::Escape;
use CGI;
use Encode;
use utf8;
binmode STDOUT, ":utf8";
my $q = new CGI;
my $query = $q->param('q') || "";
my $callback = $q->param('cb') || "f";
my $ueq = URI::Escape::uri_escape($query);
my $url = "http://search.yahooapis.jp/WebSearchService/V1/webSearch"
   ."?appid=THISISAPEN&query=$ueq&results=1";
my $res = get($url);
my $num = ($res =~ /totalResultsAvailable="(\d+)"/) ? $1 : 0;
print "Content-Type: text/javascript; charset=UTF-8\n\n";
my $qe = CGI::escapeHTML(decode("utf8", $query));
print qq($callback({"q":"$qe", "n":$num})\n);
パラメータの results=1 がポイントです(ref. [2009-02-26-1])。
なお、appid の取得は下記からどうぞ:
http://e.developer.yahoo.co.jp/webservices/register_application

ref.
- [を] Yahoo! ウェブ検索 API で検索ヒット数を取り出す簡単な方法[2009-02-26-1]
- [を] 削除ボタンで箱ごと消すイデオム?[2006-10-25-6]

1 2 3 4 5 6 [ 次へ ]

たつをの ChangeLog
Powered by chalow