2013-10-16 71 views
1

我需要計算一個句子中的單詞。例如,「我遛狗」。會是4個單詞,但「我走3只狗」只會是4個單詞,因爲數字不是單詞。該代碼只能計算字母詞。我明白如何通過簡單地使用以下數字來計算單詞:。分裂python字數

len(string.split) 

但是這不佔數字。是否有簡單的方法(對於初學者)來解釋數字,符號等?謝謝。

+2

「我走過我的小獵犬Har」怎麼樣?這是一個可能的四個單詞的句子? (我問,因爲它會打破一些'isalpha()'的方法。) – DSM

+2

我會提交一個句子中的數字*是*字。 –

+0

如果我將'4'拼寫成'four'會怎麼樣?這句話的含義並沒有改變! '4'也是你的句子中的一個詞。 –

回答

3
totalWords = sum(1 for word in line.split() if word.isalpha()) 

您可以使用split函數根據空格拆分它。然後檢查每個單詞是否只有使用isalpha函數的字母。如果它是真的,那麼包括1.最後總結所有這些。

+0

如果無論如何不使用可以想到的.isalpha做到這一點?以某種方式列出你的字符串或其他東西? – jerry2144

+0

@ jerry2144你是否考慮了分詞標記以及單詞分隔符? – thefourtheye

+0

'如果不是word.isdigit()'將允許''不要''和''背對背''被計爲單詞。當然,「3rd」和「3.145」會算作單詞。也許'如果不是word [0] .isdigit()'會更好。但是你仍然會在''''3'中出現問題''''3只貓缺失,'她說,'如果有的話(c.isalpha()for c in word)''最少有問題。 –

1

您可以在字符串上使用.isalpha()

len([word for word in sentence.split() if word.isalpha()]) 
0

如果你不想使用.isalpha

sum(not word.isdigit() for word in line.split()) 

這將返回True爲每個不是一個數字的話,和False每個這是一個數字。這段代碼利用了這個事實,在python中,True == 1False == 0,所以你會得到非數字的數量。


如果您是使用-ness的boolint的S,你可以把它明確你的代碼中加入了int功能,讀者不舒服(這是沒有必要100%,但是可以使代碼更清晰,如果你喜歡這種方式)

sum(int(not word.isdigit()) for word in line.split()) 
+0

)如果你的需求不僅僅是數字,讓我知道,我可以根據你的需要進行修改。我將這段代碼作爲你的例子。如果你有類似「I <3 U」的事情怎麼辦?「<3」不計爲數字。 – SethMMorton

2

這裏的另一種選擇:

import re 

lines = [ 
    'I walk by dog', 
    'I walk my 3 dogs', 
    'I walk my Beagle-Harrier' # DSM's example 
] 

for line in lines: 
    words = re.findall('[a-z-]+', line, flags=re.I) 
    print line, '->', len(words), words 

# I walk by dog -> 4 ['I', 'walk', 'by', 'dog'] 
# I walk my 3 dogs -> 4 ['I', 'walk', 'my', 'dogs'] 
# I walk my Beagle-Harrier -> 4 ['I', 'walk', 'my', 'Beagle-Harrier'] 
0

因爲,由於它的意見看起來他想要的東西不使用.isalpha,我們可以在try/except中運行。

count = 0 
for word in line.split(): 
    try: 
     int(word) 
    except ValueError: 
     count += 1 

我知道這不是很漂亮,但它正確處理它。

+0

或者'float(word)'也可以擺脫浮點。你的try-except有類似的行爲來檢查'not word.isdigit()'。 –

+0

我認爲,因爲op不想要.isalpha,所以他不想要他那種風格的任何其他人。 –