我需要計算一個句子中的單詞。例如,「我遛狗」。會是4個單詞,但「我走3只狗」只會是4個單詞,因爲數字不是單詞。該代碼只能計算字母詞。我明白如何通過簡單地使用以下數字來計算單詞:。分裂python字數
len(string.split)
但是這不佔數字。是否有簡單的方法(對於初學者)來解釋數字,符號等?謝謝。
我需要計算一個句子中的單詞。例如,「我遛狗」。會是4個單詞,但「我走3只狗」只會是4個單詞,因爲數字不是單詞。該代碼只能計算字母詞。我明白如何通過簡單地使用以下數字來計算單詞:。分裂python字數
len(string.split)
但是這不佔數字。是否有簡單的方法(對於初學者)來解釋數字,符號等?謝謝。
totalWords = sum(1 for word in line.split() if word.isalpha())
您可以使用split
函數根據空格拆分它。然後檢查每個單詞是否只有使用isalpha
函數的字母。如果它是真的,那麼包括1.最後總結所有這些。
如果無論如何不使用可以想到的.isalpha做到這一點?以某種方式列出你的字符串或其他東西? – jerry2144
@ jerry2144你是否考慮了分詞標記以及單詞分隔符? – thefourtheye
'如果不是word.isdigit()'將允許''不要''和''背對背''被計爲單詞。當然,「3rd」和「3.145」會算作單詞。也許'如果不是word [0] .isdigit()'會更好。但是你仍然會在''''3'中出現問題''''3只貓缺失,'她說,'如果有的話(c.isalpha()for c in word)''最少有問題。 –
您可以在字符串上使用.isalpha()
。
len([word for word in sentence.split() if word.isalpha()])
如果你不想使用.isalpha
sum(not word.isdigit() for word in line.split())
這將返回True
爲每個不是一個數字的話,和False
每個這是一個數字。這段代碼利用了這個事實,在python中,True == 1
和False == 0
,所以你會得到非數字的數量。
如果您是使用-ness的bool
int
的S,你可以把它明確你的代碼中加入了int
功能,讀者不舒服(這是沒有必要100%,但是可以使代碼更清晰,如果你喜歡這種方式)
sum(int(not word.isdigit()) for word in line.split())
)如果你的需求不僅僅是數字,讓我知道,我可以根據你的需要進行修改。我將這段代碼作爲你的例子。如果你有類似「I <3 U」的事情怎麼辦?「<3」不計爲數字。 – SethMMorton
這裏的另一種選擇:
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']
因爲,由於它的意見看起來他想要的東西不使用.isalpha,我們可以在try/except中運行。
count = 0
for word in line.split():
try:
int(word)
except ValueError:
count += 1
我知道這不是很漂亮,但它正確處理它。
或者'float(word)'也可以擺脫浮點。你的try-except有類似的行爲來檢查'not word.isdigit()'。 –
我認爲,因爲op不想要.isalpha,所以他不想要他那種風格的任何其他人。 –
「我走過我的小獵犬Har」怎麼樣?這是一個可能的四個單詞的句子? (我問,因爲它會打破一些'isalpha()'的方法。) – DSM
我會提交一個句子中的數字*是*字。 –
如果我將'4'拼寫成'four'會怎麼樣?這句話的含義並沒有改變! '4'也是你的句子中的一個詞。 –