регулярное выражение для возврата первого предложения из большего текста Python3 - PullRequest
0 голосов
/ 27 апреля 2020

Я хочу получить первое предложение из текста. Я сталкиваюсь с различными текстовыми форматами.
Использование Python3 re.split ()
. Регулярное выражение, которое я написал: '.*\. [A-Z]' означает, что принимайте все, пока не появится формат.
Это работает форма 90% случаев, случай с доктором Имя Фамилия »в первом предложении нарушает шаблон, оно получает первое предложение до имени.
Я думал о попытке исключить подстроки типа« Доктор [А-Я] ', но не могу придумать, как это сделать.
Есть идеи? Спасибо
Образец: Д-р Мартин Лоранс исследует дождь в США и Испании. Это последнее исследование США. Все остальное будет просто проигнорировано.

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

Не изобретайте велосипед, проблема была решена ранее.
При использовании Python (что предлагает ваша ссылка), попробуйте nltk. :

from nltk import sent_tokenize

string = "The rain in U.S.A. and Spain is researched by Dr. Martin Laurance. This is the latest U.S.A. study. Anything else will just be ignored."
for sent in sent_tokenize(string):
    print(sent)

Это дает

The rain in U.S.A. and Spain is researched by Dr. Martin Laurance.
This is the latest U.S.A. study.
Anything else will just be ignored.
0 голосов
/ 27 апреля 2020

Хотел убить минуту или две (или 25;)), поэтому я придумал это (совсем не надежное) решение:

(?i).*?\b((?=[a-z']*[aoueiy])(?=[a-z']*[^aoueiy])\w{2,}\.)

Что он делает, это идентифицирует слово, за которым следует полная остановка. Чтобы отделить это слово от любых сокращений, он ищет последовательность символов ({2,} = более 1), которая содержит хотя бы одну гласную и одну согласную. Это достигается с помощью двух «смотреть головы» до сопоставления слова.

Посмотрите голову, чтобы найти гласный в слове: (?=[a-z]*[aoueiy])

[a-z]* = любое количество букв сопровождаемый классом символов [aoueiy] - гласная.

Согласный тот же, только с отрицанным символьным классом [^aoueiy], соответствующим любому согласному (а также любому другому, не являющемуся букве, но так как совпадение - буквы только это не имеет значения;)

Обратите внимание, что это, конечно, совсем не похоже на полный синтаксический анализатор языка, но он может работать во многих случаях. Одна вещь, которую это пропустило бы, - предложения заканчиваются однобуквенным словом «я». Как "Мы хорошо вместе, вы и я".

Смотрите здесь на regex101

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...