Как посчитать количество слов в предложении, игнорируя цифры, знаки препинания и пробелы?
Как мне подсчитать слова в предложении? Я использую Python.
Например, у меня может быть строка:
string = "I am having a very nice [email protected]$ day. "
Это будет 7 слов. У меня возникают проблемы со случайным количеством пробелов после/перед каждым словом, а также при использовании чисел или символов.
Ответы
Ответ 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)