Форум сайта python.su
Помогите пожалуйста , я считал предложения из файла и запихал их в список посимвольно. Мне нужно посчитать количество предложений . Можно ли как то написать кусок кода который будет проверять список и допустим если 3 точки подряд(Троеточие) , то прибавлять +1 к предложениям и если одна точка , тоже +1 к предложениям , так же если перед точкой стоит большая буква , то ничего не делать , допустим такое предложение : Михаил В.А. гулял по парку и хорошо проводил время. Это 1 предложение , а не как может посчитать питон Хееелп
p.s. если можете , то без импорта библиотек
Отредактировано Advenche (Янв. 19, 2017 20:10:36)
Офлайн
мне кажется что проще по знакам препинания обозначающим конец предложения разбивать (. ? ! ) и при этом проверять что за этим знаком следующий символ пробел а второй символ после знака это заглавная и при этом не выходит за пределы длины текста чтобы а если выходит то это конец текста
with open('input.txt') as inp: text = ' '.join(inp.readlines()).replace('\n','') sumbol = ('.','?','!',':') rez = 0 for i,x in enumerate(text): if x in sumbol and text[i+2].isupper() : rez += 1 print(rez)
Отредактировано marvellik (Янв. 19, 2017 21:12:14)
Офлайн
marvellik
а как это реализовать , поможете с кодом?
Офлайн
уточни только по знакам препинания а то я подзабыл все и так что первое пришло то и написал остальное тестируй сам и исправляй
Отредактировано marvellik (Янв. 19, 2017 21:15:27)
Офлайн
def analyze(s): count = 0 for word in s: if word.endswith('...') or word.endswith('.') and len(word) > 2: # Конец предложения count += 1 elif word.endswith('.') and len(word) == 2: # Инициалы длиной 2 символа, например, Михайлов В. А. pass # ничего не делать return count s = 'Михайлов В. А. гулял по парку... Он хорошо проводил время.' s1 = s.split() result = analyze(s1) print(result)
Офлайн
marvellik
Ошибка
if x in sumbol and text.isupper() :
IndexError: string index out of range
Или я что то не понимаю?
Офлайн
old_monty
Огромное спасибо .
Можете подсказать в чем ошибка ? Почему выводит 0 ? И как убрать пробелы в перед нулем (т.к. текст большой считываю построчно) Мог в чем то ошибиться (
def analyze(s):
count = 0
for word in s:
if word.endswith('…') or word.endswith('.') and len(word) > 2: # Конец предложения
count += 1
elif word.endswith('.') and len(word) == 2: # Инициалы длиной 2 символа, например, Михайлов В. А.
pass # ничего не делать
return count
f = open('INPUT.TXT')
for a in f.readlines():
print (a)
s = a
s1 = s.split()
result = analyze(s1)
print(result)
Прикреплённый файлы: 33Безымянный.png (77,4 KБ)
Офлайн
нет все правильно я же сказал надо дорабатывать. у меня просто лишние пробелы были после текста и ошибку не дало а когда просмотрел все внимательно и убрал пробелы то тоже увидел. теперь надо проверять символ на его расположение и если он последний то просто прибавить в счетчик не проверяя следущие за символом буквы
Офлайн
Advenche
old_monty
Огромное спасибо .
Можете подсказать в чем ошибка ? Почему выводит 0 ? И как убрать пробелы в перед нулем (т.к. текст большой считываю построчно) Мог в чем то ошибиться (
Отредактировано old_monty (Янв. 19, 2017 23:21:25)
Офлайн
попробуй так
with open('input.txt') as inp: text = ' '.join(inp.readlines()).replace('\n','').rstrip() # убираем символы конца строки и пробелы в конце rez = 0 for i in range(len(text)): try: # пока text[i+2] не выходит за пределы текста считаем предложения if text[i] in ('.','?','!',':'): if text[i+1] == ' ' and text[i+2].isupper(): rez += 1 except IndexError : # выход за предел считается конец текста добавляем последнее предложение rez += 1 print(rez)
Офлайн