Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 19, 2017 20:06:51

Advenche
Зарегистрирован: 2017-01-16
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Анализ списка питон

Помогите пожалуйста , я считал предложения из файла и запихал их в список посимвольно. Мне нужно посчитать количество предложений . Можно ли как то написать кусок кода который будет проверять список и допустим если 3 точки подряд(Троеточие) , то прибавлять +1 к предложениям и если одна точка , тоже +1 к предложениям , так же если перед точкой стоит большая буква , то ничего не делать , допустим такое предложение : Михаил В.А. гулял по парку и хорошо проводил время. Это 1 предложение , а не как может посчитать питон Хееелп


p.s. если можете , то без импорта библиотек

Отредактировано Advenche (Янв. 19, 2017 20:10:36)

Офлайн

#2 Янв. 19, 2017 20:56:29

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Анализ списка питон

мне кажется что проще по знакам препинания обозначающим конец предложения разбивать (. ? ! ) и при этом проверять что за этим знаком следующий символ пробел а второй символ после знака это заглавная и при этом не выходит за пределы длины текста чтобы а если выходит то это конец текста

 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)
ваш пост вышел на 4 предложения

Отредактировано marvellik (Янв. 19, 2017 21:12:14)

Офлайн

#3 Янв. 19, 2017 21:02:35

Advenche
Зарегистрирован: 2017-01-16
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Анализ списка питон

marvellik
а как это реализовать , поможете с кодом?

Офлайн

#4 Янв. 19, 2017 21:13:47

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Анализ списка питон

уточни только по знакам препинания а то я подзабыл все и так что первое пришло то и написал остальное тестируй сам и исправляй

Отредактировано marvellik (Янв. 19, 2017 21:15:27)

Офлайн

#5 Янв. 19, 2017 21:28:16

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

Анализ списка питон

 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)

Офлайн

#6 Янв. 19, 2017 21:35:37

Advenche
Зарегистрирован: 2017-01-16
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Анализ списка питон

marvellik
Ошибка
if x in sumbol and text.isupper() :
IndexError: string index out of range


Или я что то не понимаю?

Офлайн

#7 Янв. 19, 2017 21:45:47

Advenche
Зарегистрирован: 2017-01-16
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Анализ списка питон

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)



Прикреплённый файлы:
attachment 33Безымянный.png (77,4 KБ)

Офлайн

#8 Янв. 19, 2017 21:50:12

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Анализ списка питон

нет все правильно я же сказал надо дорабатывать. у меня просто лишние пробелы были после текста и ошибку не дало а когда просмотрел все внимательно и убрал пробелы то тоже увидел. теперь надо проверять символ на его расположение и если он последний то просто прибавить в счетчик не проверяя следущие за символом буквы

Офлайн

#9 Янв. 19, 2017 22:56:46

old_monty
Зарегистрирован: 2015-09-27
Сообщения: 238
Репутация: +  20  -
Профиль   Отправить e-mail  

Анализ списка питон

Advenche
old_monty
Огромное спасибо .
Можете подсказать в чем ошибка ? Почему выводит 0 ? И как убрать пробелы в перед нулем (т.к. текст большой считываю построчно) Мог в чем то ошибиться (

Рад быть полезным! Конечно, моя функция сделана очень на скорую руку, она не претендует на универсальность. Она не будет правильно работать, например, если встретятся сокращения типа “Лекцию о здоровом образе жизни прочтет доктор мед. наук, зав. кафедрой обл. мединститута, проф. Дж. Хачикян.”

Но в вашем примере из “Войны и мира” нет таких сокращений. Текст задан согласно условию (предложения заканчиваются точкой или многоточием, допускаются также инициалы имен из одиночных букв с точкой - например, “Л. Н. Толстой”). Поэтому у меня в этом примере получается правильный результат. Прилагаю скриншот:

Отредактировано old_monty (Янв. 19, 2017 23:21:25)

Офлайн

#10 Янв. 20, 2017 12:40:23

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Анализ списка питон

попробуй так

 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)

но как уточнил old_monty для предложения “Лекцию о здоровом образе жизни прочтет доктор мед. наук, зав. кафедрой обл. мединститута, проф. Дж. Хачикян.” это тоже не сработает

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version