如何计算句子中的单词数,忽略数字,标点符号和空格?

jer*_*144 54 python text counter list python-textprocessing

我如何计算句子中的单词?我正在使用Python.

例如,我可能有字符串:

string = "I     am having  a   very  nice  23!@$      day. "
Run Code Online (Sandbox Code Playgroud)

这将是7个字.我在每个单词之后/之前以及涉及数字或符号时随机数量的空格都遇到了问题.

ars*_*jii 81

str.split() 没有任何参数拆分空格字符的运行:

>>> s = 'I am having a very nice day.'
>>> 
>>> len(s.split())
7
Run Code Online (Sandbox Code Playgroud)

从链接的文档:

如果未指定sep或者是None,则应用不同的拆分算法:连续空格的运行被视为单个分隔符,如果字符串具有前导或尾随空格,则结果将在开头或结尾处不包含空字符串.

  • 这个的一个(非常小的)缺点是你可以将标点符号组计为单词.例如,在''我有一个非常美好的一天 - 或者至少我是.'`,你会把` - `算作一个单词.我想,'isalnum`可能会有所帮助,这取决于OP对"单词"的定义. (8认同)
  • 没有,计算标点符号:''apple&orange'.split()`给`['apple','&','orange']` (2认同)

kar*_*ikr 48

你可以使用regex.findall():

import re
line = " I am having a very nice day."
count = len(re.findall(r'\w+', line))
print (count)
Run Code Online (Sandbox Code Playgroud)

  • +1使用`re`,它真的比`[i for i in string.split()if if.isalnum()] (4认同)
  • 我宁愿依靠计数`\ S +`来处理像"它快2.5倍"的小数字这样的东西 (3认同)

小智 7

s = "I     am having  a   very  nice  23!@$      day. "
sum([i.strip(string.punctuation).isalpha() for i in s.split()])
Run Code Online (Sandbox Code Playgroud)

上面的语句将遍历每个文本块并在验证块是否真的是字母串之前删除标点符号。

  • 1. 使用 `i` 作为非索引变量确实会产生误导;2.你不需要创建一个列表,它只是浪费内存。建议:`sum(word.strip(string.punctuation).isalpha() for word in s.split())` (2认同)

小智 5

这是一个使用正则表达式的简单单词计数器。该脚本包含一个循环,您可以在完成后终止它。

#word counter using regex
import re
while True:
    string =raw_input("Enter the string: ")
    count = len(re.findall("[a-zA-Z_]+", string))
    if line == "Done": #command to terminate the loop
        break
    print (count)
print ("Terminated")
Run Code Online (Sandbox Code Playgroud)


小智 5

    def wordCount(mystring):  
        tempcount = 0  
        count = 1  

        try:  
            for character in mystring:  
                if character == " ":  
                    tempcount +=1  
                    if tempcount ==1:  
                        count +=1  

                    else:  
                        tempcount +=1
                 else:
                     tempcount=0

             return count  

         except Exception:  
             error = "Not a string"  
             return error  

    mystring = "I   am having   a    very nice 23!@$      day."           

    print(wordCount(mystring))  
Run Code Online (Sandbox Code Playgroud)

输出为 8