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)
4

1 に答える 1

3

数字を検索するには、代わりにまたはr'[0,9]'を使用する必要があります。'[0-9]''\d'

( [0,9]'0' または ',' または '9' に一致しますが、これは意図したものではありません)

編集: \wと同等です[a-zA-Z0-9_][a-zA-Z']代わりに使用しないのはなぜですか?

于 2012-07-14T15:41:44.650 に答える