Подтвердить что ты не робот

Как посчитать количество слов в предложении, игнорируя цифры, знаки препинания и пробелы?

Как мне подсчитать слова в предложении? Я использую Python.

Например, у меня может быть строка:

string = "I     am having  a   very  nice  [email protected]$      day. "

Это будет 7 слов. У меня возникают проблемы со случайным количеством пробелов после/перед каждым словом, а также при использовании чисел или символов.

4b9b3361

Ответ 1

str.split() без каких-либо аргументов разделяет пробелы пробельных символов:

>>> s = 'I am having a very nice day.'
>>> 
>>> len(s.split())
7

Из связанной документации:

Если sep не указан или None, применяется другой алгоритм разделения: пробеги последовательного пробела рассматриваются как один разделитель, и результат не будет содержать пустых строк в начале или конце, если строка имеет ведущие или конечные пробелы.

Ответ 2

Вы можете использовать regex.findall():

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

Ответ 3

Это простой счетчик слов, использующий регулярное выражение. script включает цикл, который вы можете завершить, когда закончите.

#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")

Ответ 4

s = "I     am having  a   very  nice  [email protected]$      day. "
sum([i.strip(string.punctuation).isalpha() for i in s.split()])

Вышеприведенное утверждение будет проходить через каждый фрагмент текста и удалять знаки препинания, прежде чем проверять, является ли этот фрагмент действительно строкой алфавитов.

Ответ 5

Хорошо, вот моя версия этого. Я заметил, что вы хотите, чтобы ваш вывод был 7, что означает, что вы не хотите считать специальные символы и цифры. Итак, вот шаблон регулярного выражения:

re.findall("[a-zA-Z_]+", string)

Где [a-zA-Z_] означает, что он будет соответствовать символу любой beetwen a-z (нижний регистр) и a-z (верхний регистр).


О пробелах. Если вы хотите удалить все лишние пробелы, просто выполните:

string = string.rstrip().lstrip() # Remove all extra spaces at the start and at the end of the string
while "  " in string: # While  there are 2 spaces beetwen words in our string...
    string = string.replace("  ", " ") # ... replace them by one space!

Ответ 6

Как насчет использования простого цикла для подсчета количества пробелов !?

txt = "Just an example here move along" 
count = 1
for i in txt:
if i == " ":
   count += 1
print(count)

Ответ 7

    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 [email protected]$      day."           

    print(wordCount(mystring))  

выводится 8

Ответ 8

import string 

sentence = "I     am having  a   very  nice  [email protected]$      day. "
# Remove all punctuations
sentence = sentence.translate(str.maketrans('', '', string.punctuation))
# Remove all numbers"
sentence = ''.join([word for word in sentence if not word.isdigit()])
count = 0;
for index in range(len(sentence)-1) :
    if sentence[index+1].isspace() and not sentence[index].isspace():
        count += 1 
print(count)