我有一個文本文件,我的腳本正在閱讀並從中獲取最頻繁的單詞。然而,在這樣做的過程中,在清理源文本時,它無法處理重音字符(在這種情況下,它們是áéíóöőúüű)。如何獲得此正則表達式以忽略重音字符?
這是我目前所擁有的。
str = re.sub(r'\W+', ' ', str)
這只是刪除重音字符。我曾嘗試加入flags=re.U
,但它以不同的方式混淆了結果。我懷疑有一種簡單的方法可以解決我的問題,並且我已經找到了它,但還沒有成功,所以我轉向你。提前致謝。
我有一個文本文件,我的腳本正在閱讀並從中獲取最頻繁的單詞。然而,在這樣做的過程中,在清理源文本時,它無法處理重音字符(在這種情況下,它們是áéíóöőúüű)。如何獲得此正則表達式以忽略重音字符?
這是我目前所擁有的。
str = re.sub(r'\W+', ' ', str)
這只是刪除重音字符。我曾嘗試加入flags=re.U
,但它以不同的方式混淆了結果。我懷疑有一種簡單的方法可以解決我的問題,並且我已經找到了它,但還沒有成功,所以我轉向你。提前致謝。
您需要使用正確的修改:
str = re.sub(ur'\W+', u' ', s, flags=re.UNICODE)
^^^^^^^^^^
使依賴於統一的
\w
,\W
,\b
,\B
,\d
,\D
,\s
和\S
序列字符屬性數據庫。還可以爲IGNORECASE啓用非ASCII匹配。
這是一個在線Python 2.7 demo:
import re
s = u"characters (in this case, they are áéíóöőúüű)."
res = re.sub(ur'\W+', u' ', s, flags=re.UNICODE).encode("utf8")
print(res) # => characters in this case they are áéíóöőúüű
感謝您的回覆。我已經嘗試過,並且確實解決了重音符號的問題,但是它似乎並未刪除其他非字母字符,如標點符號。 – samuset
@samuset如果你只是想要字母字符,使用'str.isalpha()' –
@samuset:看看[這個演示](https://ideone.com/iAqnLN)。它會考慮到所有Unicode字母,刪除所有非字詞字符。並刪除標點符號。 –
什麼Python版本您使用的? – DSLima90
@ DSLima90 2.7.10 – samuset
不是清潔解決方案,但我的任務是完成類似的工作。您可以使用unidecode.unidecode(text)將這些字符轉換爲其邏輯標準ascii。 https://pypi.python.org/pypi/Unidecode這可能比剝離它們更好。 – sniperd