2012-07-14 25 views
0
def de_punctuate(xs): 
    return re.findall(r"[\w']+(?:-[\w']+)*", xs) 

numbers = partial(re.search, r'[0,9]') 

def no_numbers(xs): 
    return filterfalse(numbers, xs) 

def string2filter(xs): 
    return no_numbers(de_punctuate(xs)) 

for d in data: 
    print(d) 
    print(list(string2filter(d))) 

輸出:問題再和數字

Nordmann brukte mobilen i ett døgn i Afrika - må ut med 137.000 kroner 
['Nordmann', 'brukte', 'mobilen', 'i', 'ett', 'døgn', 'i', 'Afrika', 'må', 'ut', 'med', '137', 'kroner'] 

400.000 japanere evakueres fra flom 
['japanere', 'evakueres', 'fra', 'flom'] 

Utvist i 2009 - nå siktet for overfallsvoldtekt i 2011 
['Utvist', 'i', 'nå', 'siktet', 'for', 'overfallsvoldtekt', 'i'] 

Selvmordsangrep mot afghansk bryllupsfest - Minst 22 drepte 
['Selvmordsangrep', 'mot', 'afghansk', 'bryllupsfest', 'Minst', '22', 'drepte'] 

我感到困惑,爲什麼輸出是相對於數字並不一致。不應該有任何。在某些情況下,這是正確的,但對於其他情況,他們仍然存在。 看到輸出1和4.

有什麼想法嗎?

我想測試的情況下,每個word有喜歡的錯誤:this3

我可以包括在第一重新表述數值搜索,這樣我就可以不用做雙通?

的答案是:

def stripsplit(xs): 
    """ return a list, excluding numbers and punctuation (except joining hyphens) """ 
    return re.findall(r"[a-zA-ZåøæÅØÆ']+(?:-[a-zA-ZåøæÅØÆ']+)*", xs) 

回答

3

要搜索的數字,而不是r'[0,9]'你應該用'[0-9]''\d'

[0,9]在 '0' 或火柴 '' 或 '9',這是不是你的意思)

編輯:\w[a-zA-Z0-9_]等同。爲什麼不使用[a-zA-Z']來代替?

+0

那麼工作!你會推薦在第一個re.findall中包含這個嗎? – beoliver 2012-07-14 15:44:00

+0

as in,how to add this to're.findall(r「[\ w'] +(?: - [\ w'] +)*」,xs)' – beoliver 2012-07-14 15:45:08

+0

如果我使用a-zA-Z它exludeså,ø,æ... – beoliver 2012-07-14 15:51:19