はてなキーワードの言葉を PC に覚えさせる前準備
既にAWK Users JP :: ニコニコ大百科の言葉を PC に覚えさせる前準備にて似たようなことを行っていますが、ここでは gawk の TCP/IP での通信を直接使います。 したがって、今回は gawk, xgawk のみ使えます。 404 Blog Not Found:tips - Mac OS X - には iconv も piconv も入っているやMeCabの辞書にはてなキーワードを追加しよう - 不可視点あたりにインスパイヤーされています。
#! /usr/local/bin/gawk -f
# hatena_words.awk
# はてなキーワードから辞書登録用ファイルを作成する
# usage: gawk -f hatena_words.awk
BEGIN {
FS = "\t"; # CSV なのに何故タブ区切り?
OFS = "\t"; # MS-IME のタブ区切り形式に変換するため
ORS = "\r\n"; # /inet を使うときのお約束
# はてなキーワードの URL
base_url = "d.hatena.ne.jp";
file_url = "/images/keyword/keywordlist_furigana.csv";
# リクエスト先のポート指定とリクエスト
http_service = "/inet/tcp/0/" base_url "/80";
http_request = "GET http://" base_url file_url " HTTP/1.0"
# TCP でのデータの取得
print http_request |& http_service;
print "" |& http_service;
while ((http_service |& getline) 0) {
# 読みと単語が両方存在する場合
if ($1 != "" && $2 != "" && NF == 2) {
yomi = iconv($1, "eucjp", "utf8");
word = iconv($2, "eucjp", "utf8");
print yomi, word, "名詞";
}
}
close(http_service);
}
# iconv コマンドを使って文字コードを変換する
# in: 文字列 (str), 変換前文字コード (from), 変換後文字コード (to)
# out: iconv コマンドを使って文字コードを変換された文字列 (str)
function iconv(str, from, to, iconv_cmd, iconv_exec) {
iconv_cmd = "/usr/bin/iconv";
iconv_exec = "echo '" str "' | " iconv_cmd " -f " from " -t " to;
iconv_exec | getline str;
close(iconv_exec);
return str;
}
iconv コマンドを使って gawk 内で処理をさせていますが、クローズ (close) するのを忘れないでください。 ファイルに関しては勝手にクローズしてくれるようですが、getline を使ったパイプはクローズしてくれません。
実行してみましょう。
$ gawk -f hatena_words.awk ーーー ○ー○ー○ー○ 名詞 ーーー ○ー○。 名詞 ぁ (ぁ 名詞 ぁみにぃ ぁみにぃ 名詞 ぁみみ ぁみみ 名詞 ぁゃゃ ぁゃゃ 名詞 あ 「あ」 名詞 あ 早川桂太郎 名詞 あ mari 名詞 あ baycanyons 名詞 あーう゛ぇう゛ぇ a.v.v 名詞 あーうーおじゃままん アーウー・オジャママン 名詞 あーういんしょう アーウィン・ショウ 名詞 あーえすもなこ ASモナコ 名詞 あーえぬあーまいれーじくらぶ ANAマイレージクラブ 名詞 あーかーげー AKG 名詞 あーかーと アーカート 名詞 あーかーど アーカード 名詞 あーかーよんなな AK47 名詞 あーかいう゛ アーカイヴ 名詞 あーかいば アーカイバ 名詞 <snip>
このように以前AWK Users JP :: ニコニコ大百科の言葉を PC に覚えさせる前準備で出力されたフォーマットと同じ形式で取得できます。
ニコニコ大百科より、はてなキーワードの方が IME に登録しておいて損がなさそうな気がするのは私だけでしょうか?


