一般的なパターン認識について学びたい場合、何から始めるのが良いでしょうか (本をお勧めします)?
また、これらのアルゴリズムを適用してプログラム内の抽象化パターンを見つける方法について、経験や知識を持っている人はいますか? (繰り返されるコード、同じことを行うがわずかに異なる方法で行われるコードのチャンクなど)
ありがとう
編集: 数学の集中的な本は気にしません。実際、それは良いことです。
一般的なパターン認識について学びたい場合、何から始めるのが良いでしょうか (本をお勧めします)?
また、これらのアルゴリズムを適用してプログラム内の抽象化パターンを見つける方法について、経験や知識を持っている人はいますか? (繰り返されるコード、同じことを行うがわずかに異なる方法で行われるコードのチャンクなど)
ありがとう
編集: 数学の集中的な本は気にしません。実際、それは良いことです。
コンパイル中に生成された解析ツリーにアクセスできると役立ちます。このようにして、見ているものよりも深いノードを無視して、類似したツリーの断片を探すことができます。このようにして、たとえば、サブ式の内容を無視して、2 つのサブ式を乗算するノードを選択できます。式。同じロジックをノードのコレクションに適用できます。たとえば、2 つの部分式がさらに部分式の加算である 2 つの部分式の乗算を見つけたいとします。最初に乗算を探し、次に乗算の下にある 2 つのノードが加算であるかどうかを確認し、それ以上深いものは無視します。
パターンの 1 つは、コピー アンド ペースト メソッドによって複製されたコードです。問題の言語の抽象構文ツリーを比較することにより、レイアウトのバリエーションやクローンの本体の変更にも関わらず、そのようなコードを自動的に検出するツールについては、 CloneDRを参照してください。
CloneDR は、C、C++、C#、Java、JavaScript、PHP、COBOL、Python など、さまざまな言語で動作します。Web サイトには、さまざまなプログラミング言語のクローン検出レポートが表示されます。
あなたが話しているようなことを行うオープンソースプロジェクト(FindBugsやSIMなど)のコードを見ることをお勧めします。
サポートされている言語のいずれかで作業している場合、IntelliJ のアイデアには、問題に適合する非常にスマートな構造検索と置換があります。
これは .Net および Visual Studio に固有のものですが、プロジェクト内で重複するコードが検出されます。私が見つけたいくつかの誤検出が報告されていますが、始めるには良い場所かもしれません.
調べることができるもう 1 つのプロジェクトはDuploです。これはオープン ソース/GPL プロジェクトであるため、SourceForgeからコードを取得することで、彼らのアプローチを詳しく調べることができます。