2009-11-03 73 views
4

介紹自動查找文件名中

我在一個工廠,我們有顯微鏡的工作編號模式。可以要求這些人生成一個樣本的4D電影:他們需要在不同的Z位置拍攝10張照片,然後等待一定的時間(下一個時間點)並再次拍攝10張。 可以要求他們爲每個片保存文件,並且他們使用明確的命名模式,如2009-11-03-experiment1-Z07-T42.tif。文件名編號,以反映Z位置和時間點

問題

一旦你把所有這些文件的名稱,你可以使用一個regex模式提取在Z和T值,如果你知道文件名的骨幹模式。這我知道該怎麼做。

我的問題是:你知道一種方法來從文件名列表中自動生成正則表達式模式嗎?例如,網絡上有一個很棒的工具可以做類似的事情:txt2re

你會用什麼算法來分析所有的文件名列表並生成最可能的正則表達式模式?

+0

真的很有趣的問題。每當我必須做regexing,我想這個,但從來不敢問,或人們可能會認爲我瘋了!因爲我認爲這不會是遠程可能的,直到我看到你發佈的鏈接:) – 2009-11-03 13:58:53

+0

據我所知,這是_exactly_什麼RegexMagic是:http://www.regexmagic.com/ – Huppie 2009-11-03 14:15:09

回答

1

首先,你試圖做到這一點很難。我懷疑這可能不是不可能的,但你將不得不應用一些人工智能技術,這將比它的價值複雜得多。假設Z[0-9]+T[0-9]+的格式總是在正則表達式的某個地方使用,神經網絡或遺傳算法系統可以被訓練識別Z數和T數。

我會用這個問題做的是編寫一個Python腳本來處理所有的文件名。在這個腳本中,我會匹配兩次文件名,一次尋找Z[0-9]+,一次尋找T[0-9]+。每次我都會計算Z值和T值的匹配。

我會保持其他四個計數器的運行總數,兩個Z值和兩個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. 

如果你是幸運的,不會有多個匹配的一切,你可以使用上面的正則表達式來提取你的號碼。但是,如果有多個匹配的數目很大,則可以使用一些打印語句再次運行該腳本,以顯示引發多重匹配的示例文件名。這會告訴你是否可以對正則表達式進行簡單的調整。例如,如果您有多個T編號匹配的23,768個匹配項,則使腳本每隔500個文件名打印多個匹配項,這會給您47個要檢查的樣本。

也許像[ -/.=]T[0-9]+[ -/.=]這樣的東西就足以讓多個匹配降到零,同時也給每個文件名一次匹配。或者在最壞的情況下,[0-9][ -/.=]T[0-9]+[ -/.=]

2

有一個名爲String::Diff的Perl模塊,它能夠爲兩個不同的字符串生成正則表達式。它給人的例子是

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

輸出:

 
this\ is\ (?:Perl|Ruby) 

也許你可以養活對文件名到這種事情得到一個初始正則表達式。但是,這不會讓你捕獲數字等,所以它不會是完全自動的。獲得差異後,您將不得不手動編輯或進行某種替換以獲得最終的正則表達式。

0

對於Python,請參閱this有關TemplateMaker的問題。

+0

我只記得,LOCI人們做了類似的事情,這是針對這種圖像編號(其中,他們開發了一個庫來導入/導出顯微鏡圖像)。看看這裏: 2009-11-03 16:18:46