Предварительное разделение приговора

Вопрос по Python!

Мне нужна помощь по разделению предложений в текстовом файле. Я не хочу создавать массивный цикл if, но мне нужно найти способ разбить текстовый файл на предложения. Я должен сделать это без .readlines ()

Я хотел бы разбить предложения, используя точки, цитаты и восклицательные знаки ... НО:

  1. Точки, за которыми следует пробел, за которым следует строчная буква, не разделяют предложение.
  2. Точки, за которыми следует цифра без пробелов, не разделяют предложение.
  3. Такие вещи, как мистер, миссис, доктор и т. Д., Конечно, НЕ разделят предложение.
  4. последовательности букв, например, www.website.com и т. д.)
  5. и, наконец, точки, за которыми следуют знаки препинания, такие как запятые и другие точки (многоточия)

Я хотел бы, чтобы эти разбитые предложения из текстового файла были распечатаны для пользователя. Как бы мне подойти к этому процессу? Я понимаю базовое форматирование строк и индексы, но добавление эллипсов, фамилий и т. Д. Усложнит мне задачу ...

** Также будет использоваться tkinter для создания кнопки открытия файла и раскрывающегося меню, которое позволяет пользователю создавать новый текстовый файл из вывода программы по одному предложению в строке в файле .txt.

Спасибо!

Вот что у меня есть

import re

punctuation = ['.', '?', '!']
exceptions = ['Mr.', 'Mrs.', 'Ms.', 'Sr.', 'e.g', '...']
lines = []

with open('myData.txt') as myFile:
    lines = re.split(punctuation, myFile)

person user3545800    schedule 17.04.2014    source источник
comment
Можете ли вы опубликовать код, который вы написали для этого?   -  person Leigh    schedule 17.04.2014
comment
что ты уже испробовал? Пометка как «слишком широкая», поскольку есть набор вопросов, и OP, по сути, просит написать код для них.   -  person Cory Kramer    schedule 17.04.2014
comment
Возможно, вам нужно будет проверить nltk, иначе это будет какое-то уродливое регулярное выражение.   -  person C.B.    schedule 17.04.2014
comment
Что ж, я могу сказать вам прямо сейчас, что вам не нужно беспокоиться о создании массивного if цикла, поскольку if не является циклической структурой.   -  person Two-Bit Alchemist    schedule 17.04.2014
comment
Вы должны разделить на полной остановке с последующим пробелом, а затем прописной буквой с правилом 3 в качестве исключения.   -  person Sionnach733    schedule 17.04.2014
comment
Да, я знаю, что if - это не цикл, но я говорю, что хочу избежать использования цикла while с кучей операторов if в нем.   -  person user3545800    schedule 17.04.2014


Ответы (1)


это мой код

import re

punctuation = re.compile(r"([^\d+])(\.|!|\?|;|\n|。|!|?|;|…| |!|؟|؛)+")
lines = []

with open('myData.txt','r',encoding="utf-8") as myFile:
    lines = punctuation.sub(r"\1\2<pad>", myFile.read())
    lines = [line.strip() for line in lines.split("<pad>") if line.strip()]
person mamtimen    schedule 13.05.2020
comment
Привет, я вижу, вы новый участник! Убедитесь, что всегда описываете, что вы сделали с кодом. Вопросы с наивысшим рейтингом в StackOverflow обычно содержат гораздо больше описательного текста, чем фактический код. Так держать ^^ - person finnmglas; 13.05.2020