V tuto chvíli probíhá čištění textu odebíráním nechtěných znaků. Je to však vhodný přístup? Nabízí se místo seznamu vyřazovaných znaků naopak mít seznam povolených. Jenže které to jsou? S českými znaky si nevystačíme. Ale snad bychom mohli ponechat tzv. znaky slov (word characters). Tuto třídu znaků používá Python, aby určil jaké znaky se mohou vyskytovat v názvech proměnných.
Za tímto účelem bychom mohli použít již přítomné volání re.sub.
text = re.sub(r"([^\w\s]|[\d])+", "", text)
[^\w\s] znamená „všechny znaky, jež nejsou (^) ani znaky slov (\w), ani bílé znaky (\s). Číslice jsem nahradil za \d, neboť do této kategorie spadají všechny číslice, nejen ty arabské. Též je to sémantičtější: říkáme tím, že nechceme číslovky, a ne, že nechceme konkrétní znaky.
Celý výraz tedy říká: nahraď mezerou všechny řady (+) znaků sestávajících se z těchto vyloučených. Číslice tam musejí být zvlášť, neboť se považují za znaky slov.
>>> text = "proč. ne? protože, proto! kö'bliha 100dola ar٦ab"
>>> print(re.sub(r"([^\w\s]|[\d])+", "", text))
proč ne protože proto köbliha dola arab
Pokud se rozhodneme jít touto cestou, nepotřebujeme #37.
V tuto chvíli probíhá čištění textu odebíráním nechtěných znaků. Je to však vhodný přístup? Nabízí se místo seznamu vyřazovaných znaků naopak mít seznam povolených. Jenže které to jsou? S českými znaky si nevystačíme. Ale snad bychom mohli ponechat tzv. znaky slov (word characters). Tuto třídu znaků používá Python, aby určil jaké znaky se mohou vyskytovat v názvech proměnných.
Za tímto účelem bychom mohli použít již přítomné volání
re.sub
.[^\w\s]
znamená „všechny znaky, jež nejsou (^
) ani znaky slov (\w
), ani bílé znaky (\s
). Číslice jsem nahradil za\d
, neboť do této kategorie spadají všechny číslice, nejen ty arabské. Též je to sémantičtější: říkáme tím, že nechceme číslovky, a ne, že nechceme konkrétní znaky.Celý výraz tedy říká: nahraď mezerou všechny řady (
+
) znaků sestávajících se z těchto vyloučených. Číslice tam musejí být zvlášť, neboť se považují za znaky slov.Pokud se rozhodneme jít touto cestou, nepotřebujeme #37.