Как разделить строку на предложения, в том числе знаки препинания? - PullRequest
1 голос
/ 29 марта 2019

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

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

Вот как выглядит мой текущий код:

x = 'This is an example sentence. I want to include punctuation! What is wrong with my code? It makes me want to yell, "PLEASE HELP ME!"'
sentence = re.split('[\.\?\!]\s*', x)

Вывод, который я получаю:

['This is an example sentence', 'I want to include punctuation', 'What is wrong with my code', 'It makes me want to yell, "PLEASE HELP ME', '"']

1 Ответ

1 голос
/ 29 марта 2019

Попробуйте разделить взгляд назад:

sentences = re.split('(?<=[\.\?\!])\s*', x)
print(sentences)

['This is an example sentence.', 'I want to include punctuation!',
 'What is wrong with my code?', 'It makes me want to yell, "PLEASE HELP ME!"']

Этот трюк с регулярным выражением работает путем разделения, когда мы видим символ пунктуации сразу за нами. В этом случае мы также сопоставляем и потребляем любой пропущенный пробел перед тем, как мы продолжим вводную строку.

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

x = 'This is an example sentence. I want to include punctuation! "What is wrong with my code?"  It makes me want to yell, "PLEASE HELP ME!"'
sentences = re.split('((?<=[.?!]")|((?<=[.?!])(?!")))\s*', x)
print filter(None, sentences)

['This is an example sentence.', 'I want to include punctuation!',
 '"What is wrong with my code?"', 'It makes me want to yell, "PLEASE HELP ME!"']

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

...