Перейти к содержимому

Как разделить предложение на слова python

  • автор:

Python разделить строку на списки

В этой статье мы расскажем, как можно разбивать строки на списки. Вы узнаете, как при этом использовать разделители (в частности — как отделять часть строки только по первому разделителю и как быть с последовательно идущими разделителями) и регулярные выражения. Безусловно, эта информация будет особенно полезна начинающим питонистам, но, возможно, и более опытные найдут для себя кое-что интересное.

Простое разделение строки и получение списка ее составляющих

Если вы хотите разбить любую строку на подстроки и составить из них список, вы можете просто воспользоваться методом split(sep=None, maxsplit=-1) . Этот метод принимает два параметра (опционально). Остановимся пока на первом из них — разделителе ( sep ).

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

Пример использования метода split() без указания разделителя:

print("Python2 Python3 Python Numpy".split()) print("Python2, Python3, Python, Numpy".split())
['Python2', 'Python3', 'Python', 'Numpy'] ['Python2,', 'Python3,', 'Python,', 'Numpy']

Разделение строки с использованием разделителя

Python может разбивать строки по любому разделителю, указанному в качестве параметра метода split() . Таким разделителем может быть, например, запятая, точка или любой другой символ (или даже несколько символов).

Давайте рассмотрим пример, где в качестве разделителя выступает запятая и точка с запятой (это можно использовать для работы с CSV-файлами).

print("Python2, Python3, Python, Numpy".split(',')) print("Python2; Python3; Python; Numpy".split(';'))
['Python2', ' Python3', ' Python', ' Numpy'] ['Python2', ' Python3', ' Python', ' Numpy']

Как видите, в результирующих списках отсутствуют сами разделители.

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

import re sep = re.split(',', 'Python2, Python3, Python, Numpy') print(sep) sep = re.split('(,)', 'Python2, Python3, Python, Numpy') print(sep)
['Python2', ' Python3', ' Python', ' Numpy'] ['Python2', ',', ' Python3', ',', ' Python', ',', ' Numpy']

Если вы хотите, чтобы разделитель был частью каждой подстроки в списке, можно обойтись без регулярных выражений и использовать list comprehensions:

text = 'Python2, Python3, Python, Numpy' sep = ',' result = [x+sep for x in text.split(sep)] print(result)
['Python2,', ' Python3,', ' Python,', ' Numpy,']

Разделение многострочной строки (построчно)

Создать список из отдельных строчек многострочной строки можно при помощи того же метода split() , указав в качестве разделителя символ новой строки \n . Если текст содержит лишние пробелы, их можно удалить при помощи методов strip() или lstrip() :

str = """ Python is cool Python is easy Python is mighty """ list = [] for line in str.split("\n"): if not line.strip(): continue list.append(line.lstrip()) print(list)
['Python is cool', 'Python is easy', 'Python is mighty']

Разделение строки-словаря и преобразование ее в списки или словарь

Допустим, у нас есть строка, по сути являющаяся словарем и содержащая пары ключ-значение в виде key => value . Мы хотим получить эти пары в виде списков или настоящего словаря. Вот простой пример, как получить словарь и два списка:

dictionary = """\ key1 => value1 key2 => value2 key3 => value3 """ mydict = <> listKey = [] listValue = [] for line in dictionary.split("\n"): if not line.strip(): continue k, v = [word.strip() for word in line.split("=>")] mydict[k] = v listKey.append(k) listValue.append(v) print(mydict) print(listKey) print(listValue)
 ['key1', 'key2', 'key3'] ['value1', 'value2', 'value3']

Отделение указанного количества элементов

Метод split() имеет еще один опциональный параметр — maxsplit . С его помощью можно указать, какое максимальное число «разрезов» нужно сделать. По умолчанию maxsplit=-1 , это означает, что число разбиений не ограничено.

Если вам нужно отделить от строки несколько первых подстрок, это можно сделать, указав нужное значение maxsplit . В этом примере мы «отрежем» от строки первые три элемента, отделенные запятыми:

str = "Python2, Python3, Python, Numpy, Python2, Python3, Python, Numpy" data = str.split(", ",3) for temp in data: print(temp)
Python2 Python3 Python Numpy, Python2, Python3, Python, Numpy

Разделение строки при помощи последовательно идущих разделителей

Если вы для разделения строки используете метод split() и не указываете разделитель, то разделителем считается пробел. При этом последовательно идущие пробелы трактуются как один разделитель.

Но если вы указываете определенный разделитель, ситуация меняется. При работе метода будет считаться, что последовательно идущие разделители разделяют пустые строки. Например, ‘1,,2’.split(‘,’) вернет [‘1’, », ‘2’] .

Если вам нужно, чтобы последовательно идущие разделители все-таки трактовались как один разделитель, нужно воспользоваться регулярными выражениями. Разницу можно видеть в примере:

import re print('Hello1111World'.split('1')) print(re.split('1+', 'Hello1111World' ))
['Hello', '', '', '', 'World'] ['Hello', 'World']

Как разделить текст на предложения на Python?

В Питоне я полный новичок, поэтому прошу помочь и не ругаться.

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

Как бы мне грамотно поделить текст на предложения и получить их в массив?

Прошу не ругаться а дать пример кода, который работает, примеры которые я нагуглил работают некорректно, оставляя в некоторых элементах массива по 2-3 предложения вместо одного.

  • Вопрос задан более трёх лет назад
  • 17673 просмотра

4 комментария

Оценить 4 комментария

gim0

Кинь ссылки на примеры, которые не работают для тебя. На ум приходит сделать банальный «split» текста по точке и затем «trim» чтобы избавиться от лишних пробелов.

iwqn

Иван @iwqn Автор вопроса

gim0: я кинул ссылку выше — я пробую разделить на предложения текст книги

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

iwqn

Иван @iwqn Автор вопроса

Вот пример текста который тестировался:

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

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

А там, немножко дальше, два тигра — один на скале, другой внизу — оскалили зубы, — сейчас кинутся друг на друга… Мальчик, крадучись, прошёл мимо них. В страхе оглянулся. А вдруг кинутся? Нет, не кидаются, — так и остались…

Вот высоко в воздухе застыл без движения орёл. Вот взлетевшая утка замерла над гнездом; в гнезде — яйца. Мальчик быстро протянул руку за ними — и пальцы больно ударились о что-то крепкое, холодное…

Стекло. Все звери и птицы за стеклом!

Неужели они не живые? Тогда, наверно, они заколдованы, как в сказке. Узнать бы такое волшебное слово, чтобы разом всех оживить. Кто научит его этому слову?

Мальчик попал в Зоологический музей Академии наук. Здесь работал его отец — русский учёный-естествоиспытатель. В доме напротив родился в 1894 году мальчик — будущий писатель Виталий Валентинович Бианки.

С природой его познакомил отец. Он брал сына с собой на охоту и на прогулки. Называл ему каждую травку, каждую птицу и зверюшку. Научил его узнавать птиц по полёту, зверя — по следу и — самое главное — научил сына записывать свои наблюдения.

К двадцати семи годам жизни у Виталия Валентиновича Бианки накопились целые тома дневников. И опять, как в детстве, ему захотелось найти то волшебное слово, которое заставило бы ожить всех этих птиц и зверей.

Таким словом и стало художественное слово рассказчика-писателя.

Первая В. В. Бианки для детей — «Лесные домишки» — вышла в 1923 году. За двадцать пять лет своей литературной работы Бианки написал около двухсот сказок, рассказов, повестей. Юным читателям хорошо известны его сборники: «Сказки», «Лесная газета», «По следам», «Где раки зимуют», «Рассказы об охоте», «Последний выстрел» и многие другие.

На двадцати восьми языках народов нашей Родины издавались его произведения. На многие иностранные языки переведены его книги.

Прекрасно зная и горячо любя родную природу, большую часть своей жизни Бианки проводит в лесу с ружьём, биноклем, записной книжкой. И его рассказы, сказки, повести раскрывают перед юными читателями картины живой природы. В самом обыкновенном он умеет показать новое, незамеченное нами.

Бианки ведёт юного читателя по охотничьим тропам Алтая, поднимается с ним без дорог по горам Кавказа, бродит по тайге, тундре, степи…

Но больше всего Бианки любит рассказывать о тех животных и растениях, которых всякий может встретить у себя в саду, на берегу соседней речки, в лесах и полях северной и среднерусской полосы нашей Родины.

Писатель раскрывает своему юному читателю глаза на окружающий мир, отвечает на его вопросы.

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

И книги Бианки зовут юного читателя наблюдать, сравнивать, думать, быть хорошим следопытом, исследователем. Бианки не только показывает, — он учит юного читателя раскрывать тайны леса, разгадывать маленькие и большие загадки из жизни зверей и птиц.

Ведь только тот, кто хорошо знает природу, может ею управлять, обращая её богатства на пользу Родине.

Советский человек — хозяин своих лесов, полей, рек, озёр и он должен хорошо знать своё хозяйство.

Юный читатель многое узнает, прочитав рассказы и сказки Бианки. Он научится наблюдать, он станет бережливым хозяином богатств родной природы, он полюбит её.

Художественное слово писателя поможет ему в этом.

Как разделить строку по пробелам python

Такую задачу всегда можно решить с помощью цикла. Но в Python есть метод .split() . Именно его обычно используют для разделения строки на части. В качестве разделителя можно использовать любой символ: пробел, запятую, перенос строки ( \n ) и т.д.

На выходе мы получим список строк:

str = 'how are you' str.split(' ') # ['how', 'are', 'you'] 

Пробел как разделитель можно не указывать. Метод .split() будет использовать параметр по умолчанию:

str = 'how are you?' str.split() # ['how', 'are', 'you'] 

Иногда перед тем, как разделить строку, необходимо избавиться от лишних знаков препинания:

str = 'Hi, how are you?' str[:-1].replace(',', '').split() # ['Hi', 'how', 'are', 'you'] 

Метод str.split() в Python, делит строку по подстроке

Метод str.split() возвращает список слов (подстрок) в строке, используя sep в качестве разделителя строки str . Если задан maxsplit , то выполняется не более maxsplit разбиений, таким образом, список будет иметь не более maxsplit+1 элементов. Если maxsplit не указан или равен -1 , то делаются все возможные разделения строки str .

Если указан разделитель sep , то последовательные разделители в обрабатываемой строке не группируются вместе, а считаются разделителями пустых подстрок. Аргумент sep может состоять из нескольких символов. Разбиение пустой строки str с указанным разделителем возвращает значение [«] . Например:

# Последовательные разделители не группируются вместе. # и считаются разделителями пустых строк >>> '1,,2'.split (',') # ['1', ", '2']) #Аргумент 'sep' может состоять из нескольких символов. >>> '1<>2<>3'.split ('<>') # ['1', '2', '3']) # Разбиение пустой строки с указанным разделителем. >>> ''.split(';') [''] 

Если sep не указан или задан None , применяется другой алгоритм разбиения:

Последовательности пробелов рассматриваются как один разделитель и если строка имеет начальные или конечные пробелы, то результат не будет содержать пустых строк в начале или конце. Следовательно, разбиение пустой строки или строки, состоящей только из пробела с разделителем None , возвращает пустой список [] .

Смотрите так же метод str.rsplit() , который начинает деление строки справа.

Если необходимо разделить строку на список подстрок по регулярному выражению, то обратите внимание на функцию re.split() .

Примеры деления строки по подстроке/символу.

>>> '1,2,3'.split(',') # ['1', '2', '3'] >>> '1,2,3'.split(',', maxsplit=1) # ['1', '2,3'] >>> '1,2,,3,'.split(',') # ['1', '2', '', '3', ''] >>> '1 2 3'.split() # ['1', '2', '3'] >>> '1 2 3'.split(maxsplit=1) # ['1', '2 3'] >>> ' 1 2 3 '.split() # ['1', '2', '3'] >>> '--1-3--2'.split('-') # ['', '', '1', '3', '', '2'] 
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Метод str.capitalize(), первая буква в строке заглавная
  • Метод str.casefold(), сворачивает регистр строки
  • Метод str.center(), выравнивает строку по центру
  • Метод str.count(), считает совпадения в строке
  • Метод str.encode(), преобразует строку в байты
  • Метод str.endswith(), совпадение с концом строки
  • Метод str.expandtabs(), меняет табуляцию на пробел
  • Метод str.find(), индекс первого совпадения в строке
  • Метод str.format(), форматирует строку
  • Метод str.format_map()
  • Метод str.index(), индекс первого совпадения подстроки
  • Метод str.isalnum(), строка состоит из цифр и букв
  • Метод str.isalpha(), строка состоит только из букв
  • Метод str.isascii(), все символы в строке являются ASCII
  • Метод str.isdecimal(), проверяет строку на десятичное число
  • Метод str.isdigit(), строка состоит только из цифр
  • Метод str.isidentifier() проверяет строку на идентификатор Python
  • Метод str.islower( ), проверяет строку на нижний регистр
  • Метод str.isnumeric(), проверяет строку на числовые символы
  • Метод str.isprintable(), проверяет на доступность для печати
  • Метод str.isspace(), является ли строка пробелом
  • Метод str.istitle(), проверяет наличие заглавных букв в словах
  • Метод str.isupper(), проверяет строку на верхний регистр
  • Метод str.join(), объединяет список строк
  • Метод str.ljust(), ровняет строку по левому краю
  • Метод str.lower(), строку в нижний регистр
  • Метод str.lstrip(), обрезает символы в начале строки
  • Метод str.maketrans(), таблица символов для str.translate()
  • Метод str.partition(), делит строку по первому совпадению
  • Метод str.removeprefix(), удаляет префикс строки
  • Метод str.removesuffix(), удаляет суффикс строки
  • Метод str.replace(), меняет подстроку/символ в строке
  • Метод str.rfind(), индекс последнего совпадения подстроки
  • Метод str.rindex(), индекс последнего совпадения в строке
  • Метод str.rjust(), ровняет строку по правому краю
  • Метод str.rpartition(), делит строку по последнему совпадению
  • Метод str.rsplit(), делит строку справа
  • Метод str.rstrip(), обрезает символы на конце строки
  • Метод str.split(), делит строку по подстроке
  • Метод str.splitlines(), делит текст по символу ‘\n’
  • Метод str.startswith(), совпадение с началом строки
  • Метод str.strip(), обрежет строку с обоих концов
  • Метод str.swapcase(), сменит регистр символов в строке
  • Метод str.title(), каждое слово с заглавной буквы
  • Метод str.translate(), транслирование строки
  • Метод str.upper(), переведет строку в верхний регистр
  • Метод str.zfill(), дополнит строку нулями
  • Форматирование строк в стиле printf
  • F-string. Форматированные строки

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *