Я хочу подсчитать количество вхождений слова «люди» в текст с помощью Python. Для этого я использую регулярное выражение Counter и Python:
for j in range(len(paragraphs)):
text = paragraphs[j].text
count[j] = Counter(re.findall(r'\bpeople\b' ,text))
Тем не менее, здесь мой код не учитывает вхождения людей. люди! люди? Как я могу изменить его, чтобы также подсчитывать случаи, когда за словом следует определенный символ?
Спасибо за помощь,






Вы можете использовать необязательную группу символов в своем регулярном выражении:
r'\bpeople[.,!?]?\b'
? указывает, что это может произойти 0 или 1 раз - [] указывает, какие символы разрешены. Нет необходимости экранировать . (или, например, ()*+?) внутри [], хотя они имеют особое значение для регулярных выражений. Если вы хотите использовать - внутри [], вам нужно будет экранировать его, поскольку он используется для обозначения диапазонов в наборах [1-5] == 12345.
См .: https://docs.python.org/3/library/re.html#regular-expression-syntax
[] Used to indicate a set of characters. In a set:
Characters can be listed individually, e.g. [amk] will match 'a', 'm', or 'k'. Ranges of characters can be indicated by giving two characters and separating them by a '-', for example [a-z] will match any lowercase ASCII letter, [0-5][0-9] will match all the two-digits numbers from 00 to 59, and [0-9A-Fa-f] will match any hexadecimal digit. [...]
people[?.!]
Это позволит вам совпадать только с людьми? люди. и / или люди!
Итак, если вы добавите еще несколько Counter(re.finall(, вы сможете сделать что-то вроде этого
#This will only match people
count[j] = Counter(re.findall(r'people\s' ,text))
#This will only match people?
count[j] = Counter(re.findall(r'people\?' ,text))
#This will only match people.
count[j] = Counter(re.findall(r'people\.' ,text))
#This will only match people!
count[j] = Counter(re.findall(r'people\!' ,text))
Вам необходимо использовать \ для экранирования специальных символов.
Также это хороший ресурс, когда вы экспериментируете с регулярными выражениями Python: https://pythex.org/ На сайте также есть шпаргалка по регулярным выражениям.
нет необходимости помещать | в [], если вы не хотите разрешить его также как символ
Вы можете использовать оператор-модификатор в конце части «люди» вашего шаблона Regex. Попробуйте следующее:
for j in range(len(paragraphs)):
text = paragraphs[j].text
count[j] = Counter(re.findall('r\bpeople[.?!]?\b', text)
? для ноль или более кванторов. Вышеупомянутый шаблон, похоже, работает на regex101.com, но я еще не пробовал использовать оболочку Python.
Я пошел головой и отредактировал свой ответ, чтобы удалить лишние обратные косые черты.
Обязательно ли использовать регулярное выражение? Почему не просто:
len(text.split("people"))-1
Ваше регулярное выражение выглядит правильно (и работает для моих тестов). Думаю ваша ошибка -
Counter(). Какую ошибку вы видите?