PowerCMS X ブログ

2021-12-25

LexRankによるWebコンテンツの自動要約機能の実装

PowerCMS X では ver.2.2 で自動要約機能を実装しました。要約には「LexRank」というアルゴリズムを利用していますが、私たちが開発したやさしい日本語化エンジンの「伝えるウェブ」の日本語テキスト処理のいくつかのロジックも活用しており、独自のものとなっています。

概要やタグを自動生成

LexRankとは、平たく言えば、文章全体の各文の各々の関連性をスコアにして、関連性の高いものが重要な文章であるという判断をして重要文を抽出する要約アルゴリズムです。

LexRankは、Webページの重要度をはかるPageRankに着想を得た抽出型の要約アルゴリズムで文書からグラフ構造を作り出して要約を行います。

また、対象となるのが HTML文書であることから、マークアップによるテキストや文章の重要度の反映などの工夫を行っています。

着想 : コンテンツ投稿者はCMS管理画面に概要やタグを入れない

カテゴリはまだいいんです。「概要」とか「タグ」とか、入力しない人がとても多い。「タグ」もそうです。ネットメディアや新聞社のサイトなら別でしょうが、我々が運用しているウェブサイトやお客様のウェブサイトでは心当たりのある方、多いと思います。

meta descriptionが Googleの検索結果にそのまま使われることは少なくなったかもしれませんが、SNSなどでシェアした時に og:description が利用されるとか、指定できるものであればちゃんと指定してほしいところです。

そこで、自動タグ付け機能を開発することにしました。ついでといってはなんですが、概要文も自動生成できないか? と思い、LexRankアルゴリズムを使用してやってみることにしました。

処理の流れ

LexRankアルゴリズムにかかる部分は Hyper Estraier 別ウィンドウで開きます に任せることにしました。Hyper Estraier には文書間の類似性を計算してくれる機能があります。

1文を1文書としてインデックスすることで、すべての文書間の関連性を計算して文書をスコアリングします。その前処理と後処理で、HTML文書であることの考慮、伝えるウェブで開発した表記揺れの調整や短文化などのノウハウを利用することにしました。

  • 不要なフレーズを削除する
  • 表記揺れを吸収して統一する
  • ul、ol、dt、table、blockquote要素を対象外とする※
  • 見出しなどのブロックレベル要素が日本語で書かれていて「。」で終わっていないときは「。」を補完する
  • 「。」で区切って文章単位に分割する
  • Hyper Estraierを使い、1文を1文書としてインデックスを作成する
  • 各文書の類似性を計算して、スコアの高い順に並べる
  • HTMLや特定のフレーズの有無によって調整する
  • 特定のフレーズを含む文章の優先度を下げる(季節の挨拶文のようなもの)
  • 見出しやstrong要素などの中の文章のスコアを上げる
  • 先頭付近の文章と末尾の文章のスコアを上げる

※この記事執筆時の確認で、この部分は不十分だったので次のバージョンで修正します。

estcmd を利用して関連性をスコアリングする流れ

"/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 では ver.2.2 で自動要約機能を実装しました。要約には「LexRank」というアルゴリズムを利用していますが、私たちが開発したやさしい日本語化エンジンの「伝えるウェブ」の日本語テキスト処理のいくつかのロジックも活用しており、独自のものとなっています。その前処理と後処理で、HTML文書であることの考慮、伝えるウェブで開発した表記揺れの調整や短文化などのノウハウを利用することにしました。

初めての PowerCMS X Advent Calendar 別ウィンドウで開きます でしたが、無事に完走することができました。記事を書いていただいた皆様、本当にありがとうございました。それでは、最後になりましたが、今年も大変お世話になりました。良いお年をお迎えください。

カテゴリー:技術情報

投稿者:Junnama Noda

ブログ内検索

アーカイブ