Как можно в Python разбить текст на отдельные предложения, при этом игнорируя точки, стоящие после сокращений и инициалов?

Какое регулярное выражение следует использовать для разделения текста на предложения, как указано в задании?
  • 5 декабря 2023 г. 14:20
Ответы на вопрос 2
Разбиение текста на отдельные предложения в Python может быть достаточно сложной задачей, если нам нужно игнорировать точки после сокращений и инициалов, так как это требует понимания контекста и возможно использование более сложной логики, чем простая регулярка.

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

Вот один из подходов, чтобы попытаться решить эту задачу:

```python
import re

def split_into_sentences(text):
    # Список сокращений
    abbreviations = {'др', 'г', 'т.д', 'т.п', 'etc', 'т.е', 'н.э', 'до н.э', 'ул', 'пр', 'зам', 'замест', 'проф', 'акад', 'и.о', 'канд', 'науч'}
    pattern = r"\b(?<!\.\b)(?<![" + "".join({char for a in abbreviations for char in a if char.isalpha()}) + r"])(?<=\w\w\w)(?<!\bst|Mr|Mrs|Dr|Jr|Sr|vs)\.\s"
    sentences = re.split(pattern, text)
    return sentences

text = "Уважаемый А.С. Пушкин! Приглашаем вас на вечер. Тема: лит. традиции 19 в. будет интересна всем. Мы начнём в 17 ч. Не опоздайте."
print(split_into_sentences(text))
```

В этом примере мы пытаемся исключить сокращения, состоящие из одной или двух букв, а также некоторые общие исключения, такие как "vs", "Mr", "Mrs", и т.д.

Следует учесть, что более сложные тексты с различными и нестабильными сокращениями потребуют более детального и индивидуализированного подхода, возможно с использованием NLP библиотеки, например `nltk`.

В примере используется негативная lookbehind (например, `(?<!\.\b)`) конструкция регулярного выражения для исключения точек, следующих за определенными символами.

Помните, что это регулярное выражение не идеально, и в зависимости от стиля и особенностей текста, вам может потребоваться его доработать. Для решения задачи на самом высоком уровне вероятно потребуется использование NLP технологий с более сложной логикой обработки текста.
каким-то регулярным выражениемЧитаем, просвещаемся.А вообще без примера текста не очень-то порешаешь. Вот, скажем: "Он родился в 1986 г." - точка после сокращения, но она значима. Или, скажем, "Джон Ф. Кеннеди" - после точки идёт длинное слово с заглавной буквы, но точка не значима.В принципе, если первый приведённый случай не считается, то можно сказать, что за разделители предложений принимаются только точки, перед которыми идёт более двух букв, а также многоточия, знаки вопроса и восклицания, после которых идёт пробел. Для начала сойдёт, дальше можно уточнять.
Похожие вопросы