nDiki : 2006年08月04日

2006年8月4日 (金)

Algorithm::RabinKarpソースコード中の重複を発見

blog.bulknews.net で紹介されていた、Algorithm::RabinKarp Perl モジュールを試してみた。

ハッシュを使って文字列検索を行う Rabin-Karp アルコリズムを実装しているモジュールで、モジュールをインストールすると rabin.pl というスクリプトが一緒にインストールされる。

これを使うと例えば

 rabin.pl '*.pm' lib > rabin.txt

で lib ディレクトリ内の *.pm ファイル全てのなかで重複する部分を発見してくれる(内部的には File::Find::Rule を使ってファイルを処理している)。 リファクタリング対象になりそうなところを探すのに便利そうだ。

実際使ってみると重複個所がいろいろ発見できて面白い。 ただ、

  • 文字単位で、行の途中から/行の途中までを抽出するため、ソースコードの重複表示としてはちょっとみにくい。
  • 出現回数が多い部分が先に表示される。

などちょっと出力が見にくい面がある(結果の上から見ているとなんだか気持ち悪くなる)。

とりあえず rabin.pl をいじって、最長文字列を先に表示するようにソートの条件を変えたりして遊んでみた。 モジュールの使い方を覚えてスクリプトを自前で書くと、自分好みの重複発見ツールが書けそうだ。

スポンサード リンク
[ 8月4日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.076501s / load averages: 1.03, 0.93, 0.96
nDiki by WATANABE Yoshimasa (Naney)
Powered by DiKicker