1

我需要数一个句子中的单词。例如,“我遛狗”。将是 4 个单词,但“我遛 3 条狗”只有 4 个单词,因为数字不是单词。该代码只能计算字母单词。我了解如何通过简单地使用以下内容来计算单词:

len(string.split)

但这不考虑数字。有没有一种简单的方法(对于初学者)来解释数字、符号等?谢谢你。

4

5 回答 5

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

您可以使用split行上的函数根据空格将其拆分。isalpha然后使用函数检查每个单词是否只有字母。如果为真,则包括 1。最后将所有这些相加。

于 2013-10-16T19:12:53.893 回答
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']
于 2013-10-16T19:32:42.987 回答
1

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

len([word for word in sentence.split() if word.isalpha()])
于 2013-10-16T19:14:06.420 回答
0

因为,由于评论看起来他想要一些不使用 .isalpha 的东西,我们可以在 try/except 中运行它。

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

我知道它不漂亮,但它处理得当。

于 2013-10-16T19:32:59.650 回答
0

如果你不想使用.isalpha

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

这将为True每个不是数字False的单词和每个数字的单词返回。这段代码利用了在 python 中,True == 1and False == 0,所以你会得到非数字单词的数量。


int如果您对使用 s 的-ness感到不舒服bool,您可以通过添加该函数使其对代码的读者明确int(这 100% 不需要,但如果您喜欢这样可以使代码更清晰)

sum(int(not word.isdigit()) for word in line.split())
于 2013-10-16T19:23:34.473 回答