辞書DBサイト(itako999.com/dict-db/)をBloggerからWordPressに移行する際、420件以上の記事データを処理する必要があった。単純な移行だけでなく、メタデータの抽出と修復も必要だった。

第一段階は、BloggerのXMLエクスポートからWordPressへの投稿変換だった。migrate-posts.phpスクリプトを開発し、各記事を「Dictionary」という専用投稿タイプに変換した。同時に、日本語のカテゴリスラッグによる404エラーも修正した。

第二段階が最も困難だった。Bloggerの記事本文には、構造化されていない形で著者名、出版年、言語情報が含まれていた。これらを抽出し、WordPressのカスタムフィールドに保存する必要があった。

repair-metadata.php(v1.2)を開発し、「ファジースキャン」を実装した。このスクリプトは記事本文を解析し、以下の情報を抽出する:

  • 著者名:「編著者」を含む行を検出し、そこから名前を抽出
  • 出版年:「2000年」のようなパターンをパースして4桁の年を抽出
  • 言語:「Labels: mn, en」のような行から言語コードを分離し、タグ(通常のラベル)と言語(mn/en)を区別

正規表現だけでは不十分で、文脈を考慮した解析が必要だった。例えば、「編著者:山田太郎」という行があれば著者フィールドに保存するが、単に本文中に「山田太郎」と出てきても、それは著者ではないかもしれない。

第三段階は、テンプレートファイル(content-dictionary.php)の修正だった。当初、モックデータがハードコードされていたが、これを実際のカスタムフィールドから読み取るように変更した。PHPの変数スコープの問題(global $postの使用)も解決する必要があった。

興味深い発見は、一部の記事で書籍タイトルと著者名が逆になっていたことだ。タイトルフィールドに著者名が入り、著者フィールドに書籍名が入っている。これは手動で修正する必要がある。

現在、Dict-DBサイトは完全に機能している。420件以上の辞書記録が正しく表示され、著者名、出版年、言語でフィルタリングできる。クライアントサイドJavaScriptによるフィルタリングを実装したため、ページのリロードなしで即座に結果が更新される。