このアプローチを改善する方法について何かアイデアはありますか?
アイデアは、結合ハイフンを維持することですが、それらがスタンドアロンの場合は削除します。サンプル出力が表示されます
def de_punctuate(xs):
reg = re.findall(r"[\w'-]+", xs)
#the pupose of `fun` is to only remove any hyphens that stand alone.
#i want to keep hyphens-as-joining
fun = functools.partial(operator.ne, '-')
return filter(fun, reg)
def no_numbers(xs):
isa = functools.partial(operator.contains, string.digits)
fn = lambda x: ''.join(itertools.filterfalse(isa, x))
return list(filter(fn, xs))
for d in data:
print(d)
print(no_numbers(de_punctuate(d)))
出力例:
Turistguide fikk 40.000 kroner i bot for smugling
['Turistguide', 'fikk', 'kroner', 'i', 'bot', 'for', 'smugling']
- Må kalles opp etter Dale Oen
['Må', 'kalles', 'opp', 'etter', 'Dale', 'Oen']
Kvinne skadet i MC-ulykke ved Haugastøl
['Kvinne', 'skadet', 'i', 'MC-ulykke', 'ved', 'Haugastøl']
出力は私が望む方法です。しかし、私は、改善された正規表現が役立つよりも感じています!
これは少しきれいに見えると思います:
def de_punctuate(xs):
return re.findall(r"[\w']+(?:-[\w']+)*", xs)
def no_numbers(xs):
return [ x for x in xs if not re.search(r'[0-9]', x) ]