2011-05-16 84 views
3

使用正則表達式計算文檔中英文單詞的正確方法是什麼?Python中使用正則表達式計算字數

我試着用:

words=re.findall('\w+', open('text.txt').read().lower()) 
len(words) 

但似乎我的思念幾句話(比較到word中的gedit計數)。 我在做對吧?

非常感謝!

+3

我建議你試着找出哪些是你錯過的單詞。你應該能夠改進你的正則表達式來包含那種類型的單詞。 – davidshen84 2011-05-16 13:14:55

+0

不應該是'\\ w +'還是這是故意的? – Constantinius 2011-05-16 13:15:55

+2

@Constantinius:它可能應該是''\\ w +''或'r'\ w +''清楚,但'\ w'不是Python字符串中已知的轉義序列,所以''\ w +' '被解釋爲字面反斜槓-W-plus。 – 2011-05-16 13:37:08

回答

1

這似乎按預期工作。

>>> import re 
>>> words=re.findall('\w+', open('/usr/share/dict/words').read().lower()) 
>>> len(words) 
234936 
>>> 
bash-3.2$ wc /usr/share/dict/words 
    234936 234936 2486813 /usr/share/dict/words 

你爲什麼低估你的話?這與計數有什麼關係?

我提交以下會更有效:

words=re.findall(r'\w+', open('/usr/share/dict/words').read()) 
+0

是的,這是完全沒有必要的。我剛從程序中得到這段代碼,在程序中找到文檔中最常用的單詞,然後他們使用它,以便將「Hello」和「hello」視爲同一個單詞。 – 2011-05-28 08:11:28

+0

@Zhe:降價不會對此代碼產生影響。如果你想要統計**獨特**詞的數量,那麼它會有所作爲。我建議爲此使用'set'。 – Johnsyweb 2011-05-28 08:23:53

3

使用\ w +不會正確計算包含撇號或連字符,如詞「不能」將被計爲2個字。它也會統計數字(數字串); 「12,345」和「6.7」將分別計爲2個字(「12」和「345」,「6」和「7」)。

+0

謝謝!我應該考慮一下:)它在python文檔中說得非常清楚... – 2011-05-28 08:15:03

+0

但是等等,這隻會讓我的號碼少一些...... :( – 2011-05-28 08:16:42