plugins:roughlyread

NP_RoughlyRead.php

nakahara21さんのNP_ChoppedDiscにインスパイアされて作ったプラグイン。1)

検索結果画面において、本文から検索文字列を含む文を要約して表示します。
タイトルと本文の検索文字列のハイライトが行えます。

至る所の英語は 日→英 翻訳したものです。変な英語があるかもしれません。

General Plugin info
作者: Reine
最新のバージョン: v1.21(2012/10/6)
入手先: NP_RoughlyRead_121.zip
動作サンプル: (なし)
フォーラム参照先: NP_RoughlyRead - Google風検索結果表示
セキュリティチェック:

注意事項

  • PHP5.2/Nucleus CMS v3.41の環境で動作確認しています。
    少なくともPHPのバージョンは5以上でないと動かない関数を使ったかもしれません。

このプラグインについて

簡単な疑問などはここで解決できたらいいな。

どんな時に使うの?

ブログ内検索を行った際に、検索文字列を含む文をある程度要約して表示させたい時に使用します。
v1.1でタイトルのハイライトもできるようになりました。

どんな風に動いてるの?

以下のようなアルゴリズムで動いています。(それなりにコメント打ったので追いかけられると思います)

  1. アイテム本文からタグを除去する
  2. アイテム本文を改行コードと終端文字で文にバラす
  3. 検索文字列が含まれる文を抽出し、連結していき最大文字数を超えた時点で超えた分を切り捨てて完成
  4. 検索文字列が含まれる文を抽出しつくしても最大文字数に満たない場合、最後に抽出した文の後ろの文を繋げていき、最大文字数を超えた時点で超えた分を切り捨てて完成
  5. 後ろの文がない場合は最初に抽出した文の前の文を繋げていき、文を繋ぐことによって最大文字数を超えそうならやめて完成(この場合、最大文字数より結果文字数が少なくなります)
  • 3.の文抽出について
    複数の検索文字列が指定されている場合、いずれかの検索文字列が含まれれば抽出対象となります。
    特定の検索文字列を含む文が偏って抽出されて、最大文字数を超えた場合、一部の検索文字列が検索結果表示に含まれない場合が往々にしてあります。
    (検索自体はNucleusがやってくれているので問題ありません)

インストール方法

  1. 『ここ』からzipファイルを取得し解凍後、サーバーのプラグインディレクトリにアップロードする
  2. 管理画面からプラグインをインストールする
  3. 適当にオプションを変更して、検索結果を表示するテンプレートの
    「アイテムの本体」セクションの本文表示箇所に“<%RoughlyRead([表示する最大文字数],[ハイライト有無])%>”を記入する
  4. 同じく「ハイライト表示」セクションに“<span class="highlight">$0</span>”を記入する
    (タグやスタイル定義は利用環境に合わせて適宜変更してください)

テンプレートへの記述

検索結果を表示するために使うテンプレートの『アイテムの本文』から呼び出します。

本文要約とハイライト表示

<%RoughlyRead(最大文字数,ハイライト表示)%>
  • 最大文字数
    本文から検索語句を含む文節を抜き出した後の文字数を指定します。(デフォルト:250文字)
  • ハイライト表示
    ハイライト表示をしない場合は"0"、する場合は"1"を指定します。(デフォルト:ハイライト表示なし)

タイトルのハイライト表示

<%title%>

を、以下に書き換える事で

<%RoughlyRead(title)%>

ハイライトタグを付与したタイトルを出力することができます。

オプション

  • (1) 改行コードで分割された行を文節に分けるために使用する終端文字
    本プラグインは基本的に改行単位で文を切り出しますが、改行せずにダラダラ書いてある場合に一文が長くなってしまいます。
    その場合、検索結果に表示される文章が局所的なものになってしまわないように、改行が無くても、特定の文字を目安に一文として切り出してしまうためのオプションです。
    デフォルトでは"。"が設定されます。(文字コードが日本語系でない場合は"."が設定されます)
    :!:一組の終端文字しか指定できません
  • (2) 文節を省略する場合に使用する文字
    検索結果表示において、文頭や文末、文と文の間が省略されている場合に挟み込む文字列です。
    デフォルトでは"…"が設定されます。
  • (3) 隣接する文節を接続する場合に、文節間に挿入する文字
    検索結果表示において、隣接する文が連結される場合に挟み込む文字列です。
    デフォルトでは空文字が設定されます。

要約イメージ

(1)に「。」、(2)に「…」、(3)に「_」が設定されている場合(表示文字数は十分にとってあるとします)
の検索結果表示において、元の文が以下のものだとして

おはようございます。[改行]
[改行]
今日はとてもいい天気ですね。こんな日はちょっとお散歩したいと思います。[改行]
みんなもそう思いますよね?[改行]

「ます」で検索した場合、まず以下のように文章が分割されます。

1)おはようございます。(複数の改行はまとめられます)
2)今日はとてもいい天気ですね。(「。」で一行に収まっている文が分割されます)
3)こんな日はちょっとお散歩したいと思います。
4)みんなもそう思いますよね?

ここから「ます」を含む文を抜き出して連結していきます。
(下の例では検索文字列をわかりやすくするために「[]」で囲います)

おはようござい[ます]。...こんな日はちょっとお散歩したいと思い[ます]。_みんなもそう思い[ます]よね?
 (2文目を飛ばしたため、「...」が1文目と3文目の間に挿入される)
 (3文目と4文目は隣り合う文の為、「_」が挿入される)

希望事項・バグ報告

フォーラムへお寄せください。

開発履歴

  • Version 1.21 リリース [2012/10/6]
    • バグ修正
    • オプションの設定項目を日本語化
  • Version 1.2 リリース [2009/12/24]
    • 隣接する文を連結する文字を指定するオプションを追加
    • オプションの追加によって見つかった不具合の修正&コードリファクタリング
  • Version 1.1 リリース [2009/12/13]
    • <%RoughlyRead(title)%>でタイトルのハイライトを行う機能を追加
  • Version 1.01 リリース [2009/12/12]
    • 最大文字列に10以下を設定し、なおかつオプションの省略文字列が3文字を超えていた場合に要約後の文字列が指定文字数を超える不具合を修正
  • Version 1.0 リリース [2009/12/9]
    • 取りあえず出来たので公開
1) だいぶ中身は変わってしまいましたが…
 
plugins/roughlyread.txt · 最終更新: 2012/11/18 17:38 (外部編集)