PowerCMS X ブログ
2021-12-25
PowerCMS X では ver.2.2 で自動要約機能を実装しました。要約には「LexRank」というアルゴリズムを利用していますが、私たちが開発したやさしい日本語化エンジンの「伝えるウェブ」の日本語テキスト処理のいくつかのロジックも活用しており、独自のものとなっています。
LexRankとは、平たく言えば、文章全体の各文の各々の関連性をスコアにして、関連性の高いものが重要な文章であるという判断をして重要文を抽出する要約アルゴリズムです。
LexRankは、Webページの重要度をはかるPageRankに着想を得た抽出型の要約アルゴリズムで文書からグラフ構造を作り出して要約を行います。
また、対象となるのが HTML文書であることから、マークアップによるテキストや文章の重要度の反映などの工夫を行っています。
カテゴリはまだいいんです。「概要」とか「タグ」とか、入力しない人がとても多い。「タグ」もそうです。ネットメディアや新聞社のサイトなら別でしょうが、我々が運用しているウェブサイトやお客様のウェブサイトでは心当たりのある方、多いと思います。
meta descriptionが Googleの検索結果にそのまま使われることは少なくなったかもしれませんが、SNSなどでシェアした時に og:description が利用されるとか、指定できるものであればちゃんと指定してほしいところです。
そこで、自動タグ付け機能を開発することにしました。ついでといってはなんですが、概要文も自動生成できないか? と思い、LexRankアルゴリズムを使用してやってみることにしました。
LexRankアルゴリズムにかかる部分は Hyper Estraier アイコン別ウィンドウで開きます に任せることにしました。Hyper Estraier には文書間の類似性を計算してくれる機能があります。
1文を1文書としてインデックスすることで、すべての文書間の関連性を計算して文書をスコアリングします。その前処理と後処理で、HTML文書であることの考慮、伝えるウェブで開発した表記揺れの調整や短文化などのノウハウを利用することにしました。
※この記事執筆時の確認で、この部分は不十分だったので次のバージョンで修正します。
"/usr/local/bin/estcmd gather -il ja -um /path/to/casket {$tmp_dir}";
// 文章を各々1ファイルとして $tmp_dir に保存してインデックスを生成
"/usr/local/bin/estcmd gather extkeys -um /path/to/casket";
// extkeys, -um(Use MeCab)を指定してキーワードを抽出
"/usr/local/bin/estcmd list /path/to/casket";
// すべての文書のIDを得る
"/usr/local/bin/estcmd search -vx -max 15 -sk 1 -sim {$id} /path/to/casket";
// すべての文書の類似文をスコアリングする(ループですべての文書の類似文書を抽出)
この後、HTMLや文書の先頭、末尾に近いものなどを考慮してスコアの調整を行います。
この記事の要約結果を確認しながら少し調整しました(次のバージョンアップでこの調整は反映します)。この記事の自動要約の結果は以下のようになりました(200文字を指定)。
初めての PowerCMS X Advent Calendar アイコン別ウィンドウで開きます でしたが、無事に完走することができました。記事を書いていただいた皆様、本当にありがとうございました。それでは、最後になりましたが、今年も大変お世話になりました。良いお年をお迎えください。
カテゴリー:技術情報
投稿者:Junnama Noda