2011-04-26 26 views
3

我開始編寫的代碼可以捕獲句子「類型」的一部分,如果它們符合條件,啓動特定的python腳本來處理與「類型」。我在「發現」 :)說的FindAll一種適用於我在做什麼,因此更好:蟒蛇重新匹配,findall或搜索,然後NLP(如何處理它?)

m = re.compile(r'([0-9] days from now)') 
m.match("i think maybe 7 days from now i hope") 
print m.match("i think maybe 7 days from now i hope") 
None 
f= m.findall("i think maybe 7 days from now i hope") 
print f[0] 
7 days from now 

這似乎給我一句話,我一直在尋找的一部分。然後我可以舉個例子 - pyparsing模塊使用其示例日期時間轉換腳本,它從類似的NL語句(我知道還有其他模塊,但它們可以處理的輸入語句中是嚴格的)返回日期時間。
然後,我可以做一個數據庫插入我的在線日記,例如或託管的Web應用程序,如果句子的其他部分匹配另一個「類型」即。約會,截止日期等
我只是在這裏修補,但慢慢地我正在建立一些有用的東西。這個結構/過程是否合乎邏輯,或者是否有更好的方法/方法:這就是我現在要問的問題。任何反饋讚賞

回答

12

m.match()失敗的原因是它期望匹配在字符串的開始處開始。

findall()如果您希望字符串中有多個(不重疊)匹配,這就很有意義。否則,使用search()方法(它將返回它找到的第一個匹配項)。

這一切都涵蓋in the docs

0

根據我對搜索界面的瞭解,您似乎需要大量的正則表達式來捕捉人們表達自己的各種方式。有關多少的感覺,請參閱this writeup關於「詞彙問題」。因此,如果你只是在做日期/時間的事情,並且將特定的行爲與他們綁在一起,那麼他們會覺得錯誤,那麼RE似乎是一個好方法。另一方面,如果您只是試圖檢測「日期」表達式與例如一個「電子郵件」表達式或一個「註釋」表達式,那麼可能值得一試POS-tag使用NLTK的句子以及語段級別上的匹配模式。