Python посчитать количество знаков препинания

Подсчет пунктуации в тексте с использованием Python и регулярных выражений

Я пытаюсь посчитать, сколько раз знаки препинания появляются в романе. Например, я хочу найти вхождения вопросительных знаков и периодов вместе со всеми другими не алфавитно-цифровыми символами. Затем я хочу вставить их в CSV-файл. Я не уверен, как сделать регулярное выражение, потому что у меня нет такого большого опыта работы с Python. Кто-нибудь может мне помочь?

texts=string.punctuation counts=dict(Counter(w.lower() for w in re.findall(r"\w+", open(cwd+"/"+book).read()))) writer = csv.writer(open("author.csv", 'a')) writer.writerow([counts.get(fieldname,0) for fieldname in texts]) 

4 ответа

In [1]: from string import punctuation In [2]: from collections import Counter In [3]: counts = Counter(open('novel.txt').read()) In [4]: punctuation_counts =
from string import punctuation from collections import Counter with open('novel.txt') as f: # closes the file for you which is important! c = Counter(c for line in f for c in line if c in punctuation) 

Это также позволяет избежать загрузки всего романа в память сразу.

Кстати, вот как string.punctuation выглядит так:

Вы можете добавить или убрать символы отсюда в зависимости от ваших потребностей.

Также Counter определяет __missing__ с помощью простого return 0 . Поэтому вместо того, чтобы инициализировать его в словарь, а затем вызывать .get(x, 0) . Просто оставьте его как счетчик и получите доступ к нему как c[x] , если он не существует, его счет равен 0. Я не уверен, почему у всех возникает внезапное желание понизить все свои Counter в dict просто из-за страшного вида Counter([. ]) , который вы видите, когда печатаете его, хотя на самом деле Counter тоже являются словарями и заслуживают уважения.

writer.writerow([counts.get(c, 0) for c in punctuation]) 

Если вы оставите свой счетчик, вы можете просто сделать это:

writer.writerow([counts[c] for c in punctuation]) 

Код, который у вас есть, очень близок к тому, что вам нужно, если вы будете считать слова. Если вы пытаетесь считать слова, единственное изменение, которое вам нужно будет сделать, это, вероятно, изменить последнюю строку на эту:

writer.writerows(counts.items()) 

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

book_text = open(cwd+"/"+book).read() counts = <> for character in texts: counts[character] = book_text.count(character) writer.writerows(counts.items()) 

Как вы могли бы сказать, это делает словарь с символами в качестве ключей и количеством раз, когда этот символ появляется в тексте в качестве значения. Затем мы пишем это так, как сделали бы для подсчета слов.

import curses.ascii str1 = "real, and? or, and? what." t = (c for c in str1 if curses.ascii.ispunct(c)) d = dict() for p in t: d[p] = 1 if not p in d else d[p] + 1 for p in t 

Источник

Читайте также:  Таблицы

Подсчет букв цифр и знаков препинания в строке

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

5 ответов

Для немного более сжатой / более быстрой версии, также есть

count = lambda l1,l2: sum([1 для x в l1, если x в l2])

count = lambda l1,l2: sum([1 for x in l1 if x in l2]) In [11]: s = 'abcd. ' In [12]: count(s,set(string.punctuation)) Out[12]: 3 

использование набора должно немного повысить скорость.

также, в зависимости от размера строки, я думаю, что вы должны получить выгоду от памяти по сравнению с фильтром.

import string a = "I'm not gonna post my homework as question on OS again, I'm not gonna. " count = lambda l1, l2: len(list(filter(lambda c: c in l2, l1))) a_chars = count(a, string.ascii_letters) a_punct = count(a, string.punctuation) 
count_chars = ".arPZ" string = "Phillip S. is doing a really good job." counts = tuple(string.count(c) for c in count_chars) print counts 
>>> import string >>> import operator >>> import functools >>> a = "This, is an example string. 42 is the best number!" >>> letters = string.ascii_letters >>> digits = string.digits >>> punctuation = string.punctuation >>> letter_count = len(filter(functools.partial(operator.contains, letters), a)) >>> letter_count 36 >>> digit_count = len(filter(functools.partial(operator.contains, digits), a)) >>> digit_count 2 >>> punctuation_count = len(filter(functools.partial(operator.contains, punctuation), a)) >>> punctuation_count 3 

Чтобы зациклить строку, вы можете использовать цикл for:

for c in "this is a test string with punctuation ,.;!": print c 

Теперь все, что вам нужно сделать, это считать события.

Источник

Подсчет букв цифр и знаков препинания в строке

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

5 ответов

Для немного более сжатой / более быстрой версии, также есть

count = lambda l1,l2: sum([1 для x в l1, если x в l2])

count = lambda l1,l2: sum([1 for x in l1 if x in l2]) In [11]: s = 'abcd. ' In [12]: count(s,set(string.punctuation)) Out[12]: 3 

использование набора должно немного повысить скорость.

Читайте также:  Gson from file java

также, в зависимости от размера строки, я думаю, что вы должны получить выгоду от памяти по сравнению с фильтром.

import string a = "I'm not gonna post my homework as question on OS again, I'm not gonna. " count = lambda l1, l2: len(list(filter(lambda c: c in l2, l1))) a_chars = count(a, string.ascii_letters) a_punct = count(a, string.punctuation) 
count_chars = ".arPZ" string = "Phillip S. is doing a really good job." counts = tuple(string.count(c) for c in count_chars) print counts 
>>> import string >>> import operator >>> import functools >>> a = "This, is an example string. 42 is the best number!" >>> letters = string.ascii_letters >>> digits = string.digits >>> punctuation = string.punctuation >>> letter_count = len(filter(functools.partial(operator.contains, letters), a)) >>> letter_count 36 >>> digit_count = len(filter(functools.partial(operator.contains, digits), a)) >>> digit_count 2 >>> punctuation_count = len(filter(functools.partial(operator.contains, punctuation), a)) >>> punctuation_count 3 

Чтобы зациклить строку, вы можете использовать цикл for:

for c in "this is a test string with punctuation ,.;!": print c 

Теперь все, что вам нужно сделать, это считать события.

Источник

Как посчитать в Python количество символов в строке

Обложка к записи

В этой статье мы рассмотрим один из базовых навыков программирования на языке Python — подсчет количества символов в строке. Этот навык часто используется при работе с текстовыми данными, поэтому является необходимым для начинающих и опытных программистов.

Подсчёт символов в строке может быть полезным во многих случаях, например:

  • Проверка ограничений на длину вводимого текста в веб-формах, где ограничено количество символов, которые можно ввести в определенное поле.
  • Подсчет количества букв или цифр в тексте для анализа текстовых данных или статистики.
  • Анализ и обработка текстовых файлов.

Основные способы подсчёта символов в строке

В Python существует несколько способов подсчета количества символов в строке. Один из самых простых и распространенных способов — использование функции len() , которая возвращает количество символов в строке. Этот метод может использоваться для подсчета любых символов, включая буквы, цифры, знаки препинания и пробелы. Кроме того, для подсчета символов в строке, можно использовать циклы.

Читайте также:  Where java is installed on windows

Подсчёт символов в строке с помощью встроенной функции len()

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

my_string = "Hello, World!" length = len(my_string) print("Длина строки: ", length)

В этом примере мы создали переменную my_string , содержащую строку «Hello, World!», а затем использовали функцию len() для подсчета количества символов в этой строке. Результат, возвращаемый функцией len() , присваивается переменной length . Наконец, мы выводим сообщение на экран, которое сообщает нам длину строки. В этом случае, результатом будет «Длина строки: 13», так как в строке «Hello, World!» содержится 13 символов.

Ручной подсчет символов с помощью цикла

Если вам нужно подсчитать количество символов в строке без использования встроенных функций, вы можете воспользоваться циклом. Для этого можно создать переменную, которая будет увеличиваться на единицу при каждой итерации цикла. Внутри цикла нужно пройтись по каждому символу строки и увеличивать значение переменной на единицу. В конце цикла значение переменной будет равно количеству символов в строке. Например, для строки «Hello, world!» можно использовать следующий код:

string = "Hello, world!" count = 0 for char in string: count += 1 print("Количество символов в строке:", count)

Этот код пройдется по каждому символу в строке «Hello, world!» и увеличит значение переменной count на единицу при каждой итерации цикла. После того, как цикл завершится, в переменной count будет храниться количество символов в строке.

Источник

Оцените статью