読者です 読者をやめる 読者になる 読者になる

IMUZA.com

Joomla!によるウェブ制作, PHP, Javascript, CSS

はてなブログ

はてなブログ テーマ制作
・とことこ with Menubar
・Simple Responsive with Menubar
・Mobile-First Responsive
・Hyperspace

Joomla!

Joomla! によるウェブ制作
・テンプレート自作
・モジュール自作
・Joomla!でサイト構築

Web Tips

ウェブサイトづくりに役立つかも
・Javascript
・CSS

Windows, Linux

Windows10
Plamo Linux

Yahoo! API を使って「漢字仮名交じり文」を「ひらがな」に変換する

Web Tips はてなブログ

別ブログ「そんなには褒めないよ。映画評」でミニシアター系の映画レビューを書いているのですが、続けているうちに500本くらいになっていますので、タイトルの五十音順で検索したり、一覧で見ることは出来ないかと考えてみました。

まず、今後のことを考えれば、カテゴリー「あ」「か」~「わ」で登録していくくらいしか方法はなさそうですが、問題は過去記事です。

  • いまさら500本の記事に新しくカテゴリーをふるのは現実的ではない
  • 全記事をテキストファイルで書き出せるが、全削除や上書きができないのでカテゴリーを一括でふることが出来ない
  • そもそもタイトル自体が漢字仮名交じり文の上に英数字を含んでいて五十音で管理できない

ということですので、今後書く記事についてはカテゴリー分けし、過去記事については五十音順の一覧ページを作ることにしました。

はてなブログの記事の五十音順タイトル一覧を作る

流れはこんな感じです。

  1. 全記事をテキストファイルに書き出す
  2. TITLE と BASENAME を抜き出す
  3. TITLE の漢字仮名交じり文をひらがなに変換する
  4. 五十音順でソートし、リンク付き一覧ファイルを作成する

1, 2, 4 は php で簡単にできますが、問題は 3 のひらがな変換です。ググりますと、次の方法があるようです。

  1. MeCab(めかぶ)という形態素解析エンジンを使う
    形態素解析とは、文章を対象言語の文法や辞書から最小単位に分解し、対象が何であるか品詞などを解析していくことのようです。つまり、漢字仮名交じり文をひらがなに変換するためには、品詞や記号に分解し、前後の関係を見ながら漢字であればその読みを解析していくということになります(多分)。
    php_mecab というモジュールがあるようです。
  2. igo-php という「Igo - Java形態素解析器」の PHP 実装版を使う
  3. Yahoo! API の「ルビ振り」という Webサービスを使う

どう考えてもこの場合、3 ですね。

Yahoo! デベロッパーネットワーク

developer.yahoo.co.jp

アプリケーション ID の取得

  1. メニュー「アプリケーションの管理」 > ログインしていなければログイン
  2. 右上「新しいアプリケーションを開発」
  3. アプリケーションの種類 → サーバーサイド
    アプリケーション名、サイトURLは、公開しなければそのままでよさそう。
  4. 同意して確認ボタン
  5. アプリケーションID が表示される
    以後、「アプリケーションの管理」で確認できる

「ルビ振り」を試してみる

メニュー「サービス一覧」 > テキスト解析 > ルビ振り に仕様があり、GETリクエストのサンプルがあります。

php には、file_get_contents という HTTPリクエストにも使える関数がありますが、cURL 関数の方がずいぶん早いそうですので、Yahoo! のサンプルも cURL を使っています。

サンプルそのままですが、パースして文章に戻しています。

<?php
/**
 * ルビ振りAPIへのリクエストサンプル(GET)
 *
 */
$api = 'http://jlp.yahooapis.jp/FuriganaService/V1/furigana';
$appid = '取得したアプリケーション ID';
$params = array(
    'sentence' => 'ルビ振りAPIへのリクエストサンプル'
);
 
$ch = curl_init($api.'?'.http_build_query($params));
curl_setopt_array($ch, array(
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERAGENT      => "Yahoo AppID: $appid"
));
 
$result = curl_exec($ch);
curl_close($ch);

$xml = simplexml_load_string($result);
$furigana = '';
foreach ($xml->Result->WordList as $WordList) {
    foreach ($WordList->Word as $Word) {
        if (isset($Word->Furigana)) {
            $furigana .= (string)$Word->Furigana;
        } else {
            $furigana .= (string)$Word->Surface;
        }
    }
}

print $params['sentence'] . '<br>' . $furigana;

出力

ルビ振りAPIへのリクエストサンプル
るびぶりAPIへのりくえすとさんぷる

使えそうです。

はてなブログのタイトルにふりがなを振り、php 配列に格納するに続く。