Питонская фильтрация метасимволов при сохранении целостности слов - PullRequest
0 голосов
/ 31 января 2019

Здравствуйте, мне нужно выяснить, как посчитать количество слов в предложении, но теперь я застрял.Проблема с моим текущим кодом заключается в том, что он не отфильтровывает метасимволы, поэтому строка типа «...» создает ошибку.

   print(len(input().split()))

был еще один метод, который я пытался использовать (это использование регулярных выражений для фильтрации метасимволов. Но это привело только к тому, что функция len считала все символы, а не слова:

   import re

   print(len(re.sub('[^a-zA-Z]+',' ',input())))

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Ниже приведены группы буквенных символов.Раньше я пытался использовать пару различных выражений, но такие комбинации символов, как '-', считались бы словами.Используя только квантификатор \ w, он подсчитывает все группы слов и добавляет их в список.Если вы хотите увидеть слова вместо этого, удалите len quantifier.Я попробовал это на всех примерах, и это сработало на всех!

import re

def getWordCount(value):
    list = re.findall('([\w]+)',value)
    return len(list)

value = 'A very nice, and simple, example.'
print(getWordCount(value))
0 голосов
/ 31 января 2019

Вы можете использовать split, чтобы разделить в соответствии с разделителем (в вашем случае достаточно разделителя пробела по умолчанию), а затем посчитать длину списка:

In [49]: my_str = 'A very valid, and nice example.'

In [50]: len(my_str.split())
Out[50]: 6

Редактировать: Как у вас естьЗнаки препинания в вашем примере, вы можете сначала удалить их:

In [59]: my_str
Out[59]: 'A very valid, and nice example.'

In [60]: len(re.sub('[^\w\s]', '', my_str).split())
Out[60]: 6

In [61]: len(re.sub('[^\w\s]', '', '...').split())
Out[61]: 0

Таким образом, будут удалены все символы, которые не являются буквенно-цифровыми и не являются пробелами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...