ideaman's
HOME > ツール > スペルミスチェックツール:typo.php

スペルミスチェックツール:typo.phpPHPのプログラム内で使用されている変数群から類似する変数名を抽出し、スペルミスをチェックするPHPクラスライブラリです


PHPのプログラム内で使用されている変数群をチェックし、類似度の高い変数名(即ちスペルミスしている確率が高い変数名)を抽出し、表示します。

従来、スペルミスを発見するためにはエラー出力レベルに E_NOTICE を加え、警告文を表示させる手法がとられてきました。しかし、E_NOTICE では初期化処理しかチェックされないためそれ以外の処理については見落とされてしまいます。

このライブラリでは初期化処理以外の処理も全て走査するため E_NOTICE よりも高い精度でスペルミスを検出出来ます。 また、閾値パラメータを変化させて検出精度を自由に調整する事ができます。

typo.phpで抽出出来るスペルミス
同一関数内で2回以上使用されている変数名またはインスタンス名
typo.phpで抽出できないスペルミス

  1. 関数名、クラス名、制御構文などの予約語
  2. 連想配列のキーの部分
  3. "->"の右の部分(例、$this->name とある場合、nameは抽出できない)
  4. 同一関数(メソッド)内で一度しか使用されていない変数名

使用例

下記のようにスペルミスを含むコードを仮定します。

//test.php <?php function test(){ //初期化 $one = $two = $three = ''; //改めて値を代入 $one = 'いーち!'; $two = 'にー!'; $tree = 'さーん!'; //スペルミス! return $one. $two. $three. "ダァー!!\n"; } // E_NOTICE では上記のスペルミスを発見できない error_reporting(E_NOTICE); print test(); ?>

実行結果

> php test.php いーち!にー!ダァー!!

このコードでは$threeを$treeと間違えていますが、「$tree = 'さーん';」が初期化とみなされるためE_NOTICEではスペルミスを抽出できません。typo.phpを用いると以下のようにスペルミスが抽出可能できます。

> php typo.php test.php ファイル名: test.php $threeはスペルミスの可能性があります 正しくは$tree? 関数: test テキスト間距離: 0.181818181818

typo.phpでは以下の様にディレクトリを指定すると、その配下の全ての.phpファイルのスペルミスを抽出することが出来ます。

> php typo.php ./lib

また、引数にテキスト間距離の閾値を与えることによって検出精度を調整できます。デフォルトは0.2です。

//検出精度を緩める > php typo.php test.php 0.3 //検出精度を絞る > php typo.php test.php 0.1

ダウンロード

インストールする環境に次のファイルをダウンロードしてください。

ダウンロードおよびインストールをしてライブラリを利用する前に、利用規約を必ずお読みください。インストールして利用を開始した際は利用規約に同意したものとみなされます。

ZIP版
メールアドレス:
(4.3K)

インストール

  1. ダウンロードしたファイルを解凍し、Typo.class.phpをinclude_pathで指定されたディレクトリに配置してください

使い方

  1. 以下のコマンドで実行してください

>php typo.php target <threshold>
target
対象となるファイル名またはディレクトリ名
threshold
テキスト間距離の閾値。この値が大きい程、検出されるスペルミス候補が多くなります。
※本プログラムはコマンドラインから実行される事を想定しております。Apache経由では正常に動作しない場合があります。

Typo.class.phpのクラスリファレンス

getTypo($filename, $threshold = 0.2)

$filename で指定したファイルに含まれるスペルミス候補一覧を取得します。

引数
$filename
対象のファイル
$threshold
テキスト間距離の閾値。デフォルトは0.2です。値が大きいほど検出されるスペルミス候補の数が多くなります。
戻り値
スペルミス候補の連想配列
戻り値の形式

array(
 array(
  'target'=> (対象となる変数名),
  'other'=> (それと似ている変数名),
  'distance'=> (テキスト間距離),
  'funcName'=> (変数が使われている関数・メソッド名)
 ),
 ...
)

getTypoFromDir($dirName, $threshold = 0.2)

$dirName で指定したディレクトリ配下の全ての.php ファイルに含まれるスペルミス候補一覧を取得します。

引数
$dirName
対象のディレクトリ
$threshold
テキスト間距離の閾値。デフォルトは0.2です。値が大きいほど検出されるスペルミス候補の数が多くなります。
戻り値
スペルミス候補の連想配列
戻り値の形式

array(
 array(
  'fileName' => (ファイル名),
  'typos' =>
   array(
    'target'=> (対象となる変数名),
    'other'=> (それと似ている変数名),
    'distance'=> (テキスト間距離),
    'funcName'=> (変数が使われている関数・メソッド名)
   ),
   ...
  )
 ),
 ...
)

利用規約

ソフトウェアを利用する前にアイデアマンズ株式会社のソフトウェア利用規約をお読みください。利用規約に同意した上でご利用ください。

「ソフトウェア利用規約」ページでは”改変をすることができません”と記載しておりますが、このソフトウェアに関してはソースコードは改変してご自由にお使い下さい。改変後のソースを公開する場合はご相談ください。

ソフトウェア利用規約


トラックバックURL

トラックバックURL