4

イントロ

私は顕微鏡のある施設で働いています。これらの人は、サンプルの4Dムービーを生成するように依頼できます。たとえば、異なるZ位置で10枚の写真を撮り、一定時間(次の時点)待ってから、もう一度10枚のスライスを撮ります。スライスごとにファイルを保存するように依頼でき、のような明示的な命名パターンを使用します2009-11-03-experiment1-Z07-T42.tif。ファイル名には、Z位置と時点を反映するように番号が付けられています

質問

これらのファイル名をすべてregex取得したら、ファイル名のバックボーンパターンがわかっている場合は、パターンを使用してZ値とT値を抽出できます。これは私が行う方法を知っています。

私が持っている質問は、ファイル名リストから正規表現パターンを自動的に生成する方法を知っていますか?たとえば、同様のことを行う素晴らしいツールがネット上にあります:txt2re

すべてのファイル名リストを解析し、最も可能性の高い正規表現パターンを生成するために、どのアルゴリズムを使用しますか?

4

3 に答える 3

2

String :: Diffと呼ばれるPerlモジュールがあり、2つの異なる文字列の正規表現を生成する機能があります。それが与える例は

my $diff = String::Diff::diff_regexp('this is Perl', 'this is Ruby');
print "$diff\n";

出力:

this \ is \(?:Perl | Ruby)

たぶん、ファイル名のペアをこの種のものにフィードして、最初の正規表現を取得することができます。ただし、これでは数字などを取得できないため、完全に自動化されるわけではありません。差分を取得した後、機能する最終正規表現を取得するには、手動で編集するか、何らかの置換を行う必要があります。

于 2009-11-03T14:04:15.547 に答える
1

まず第一に、あなたはこれを難しい方法でやろうとしています。これは不可能ではないかもしれませんが、人工知能技術を適用する必要があり、それが価値があるよりもはるかに複雑になるでしょう。Z[0-9]+との形式T[0-9]+が常に正規表現のどこかで使用されていると仮定すると、ニューラルネットワークまたは遺伝的アルゴリズムシステムのいずれかをトレーニングして、Z番号とT番号を認識することができます。

この問題で私がすることは、すべてのファイル名を処理するPythonスクリプトを書くことです。このスクリプトでは、ファイル名に対して2回照合します。1回はを検索し、もう1回はZ[0-9]+を検索しT[0-9]+ます。毎回、Z番号とT番号の一致を数えます。

他に4つのカウンターを合計で保持します。2つはZ番号用、2つはT番号用です。各ペアは、一致が1つあるファイル名と、一致が複数あるファイル名の数を表します。そして、処理されたファイル名の総数を数えます。

最後に、私は次のように報告します:

nnnnnnnnnn filenames processed

Z-numbers matched only once in nnnnnnnnnn filenames.
Z-numbers matched multiple times in nnnnnn filenames.

T-numbers matched only once in nnnnnnnnnn filenames.
T-numbers matched multiple times in nnnnnn filenames.

運が良ければ、複数の一致はまったくありません。上記の正規表現を使用して番号を抽出できます。ただし、複数の一致が多数ある場合は、いくつかのprintステートメントを使用してスクリプトを再実行し、複数の一致を引き起こすファイル名の例を示すことができます。これにより、正規表現の簡単な調整が機能するかどうかがわかります。

たとえば、T番号に23,768の複数の一致がある場合、スクリプトに500番目のファイル名ごとに複数の一致を出力させます。これにより、47のサンプルを調べることができます。

おそらく[ -/.=]T[0-9]+[ -/.=]、複数の一致をゼロにするのに十分であると同時に、すべてのファイル名に対して1回限りの一致を与えるようなもので十分です。または最悪の場合、[0-9][ -/.=]T[0-9]+[ -/.=]

于 2009-11-03T14:07:31.420 に答える
0

Pythonについては、 TemplateMakerに関するこの質問を参照してください。

于 2009-11-03T14:08:12.840 に答える