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


p.s. если можете , то без импорта библиотек
marvellik
мне кажется что проще по знакам препинания обозначающим конец предложения разбивать (. ? ! ) и при этом проверять что за этим знаком следующий символ пробел а второй символ после знака это заглавная и при этом не выходит за пределы длины текста чтобы а если выходит то это конец текста
 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 предложения
Advenche
marvellik
а как это реализовать , поможете с кодом?
marvellik
уточни только по знакам препинания а то я подзабыл все и так что первое пришло то и написал остальное тестируй сам и исправляй
old_monty
 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)
Advenche
marvellik
Ошибка
if x in sumbol and text.isupper() :
IndexError: string index out of range


Или я что то не понимаю?
Advenche
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)



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

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

Но в вашем примере из “Войны и мира” нет таких сокращений. Текст задан согласно условию (предложения заканчиваются точкой или многоточием, допускаются также инициалы имен из одиночных букв с точкой - например, “Л. Н. Толстой”). Поэтому у меня в этом примере получается правильный результат. Прилагаю скриншот:
marvellik
попробуй так
 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 для предложения “Лекцию о здоровом образе жизни прочтет доктор мед. наук, зав. кафедрой обл. мединститута, проф. Дж. Хачикян.” это тоже не сработает
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB