Регулярное выражение Python, соответствующее полному предложению, включая ключевое слово, без разбиения на точки, которые не заканчивают предложение (.com, US и т. Д.) - PullRequest
0 голосов
/ 14 февраля 2019

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

"Уплаченные налоги за вычетом возмещений составили 412 млн. Долл. США в 2016 году. Закон о налогах США ввел обязательный единовременный налог на накопленную прибыль иностранных дочерних компаний и изменил порядок налогообложения иностранных доходов.в налог США. "

Я хочу сопоставить полные предложения, включающие ключевое слово" дочерние компании ".Для этого я использовал следующее регулярное выражение:

[^.]*?subsidiaries[^.]*\.

Однако это будет соответствовать только «Закону о налогах введен обязательный единовременный налог на накопленную прибыль иностранных дочерних компаний и изменен внешний доходпри условии U ", так как выражение начинается и заканчивается на". "в нас".Есть ли способ указать в выражении, что я не хочу останавливаться на определенных фразах, таких как "US" или ".com"?

1 Ответ

0 голосов
/ 14 февраля 2019

Я предлагаю разбить текст на предложения с помощью NLTK , а затем проверить, присутствует ли строка в каждом элементе или нет.

import nltk, re
text = "Cash taxes paid, net of refunds, were $412 million 2016. The U.S. Tax Act imposed a mandatory one-time tax on accumulated earnings of foreign subsidiaries and changed how foreign earnings are subject to U.S. tax."
sentences = nltk.sent_tokenize(text)
word = "subsidiaries"
print([sent for sent in sentences if word in sent])
# => ['The U.S. Tax Act imposed a mandatory one-time tax on accumulated earnings of foreign subsidiaries and changed how foreign earnings are subject to U.S. tax.']

Чтобы извлечь только утвердительные предложения (заканчивающиеся на .), добавьте and sent.endswith('.') условие:

print([sent for sent in sentences if word in sent and sent.endswith('.')])

Вы даже можете проверить, является ли слово, по которому вы фильтруете, целым словомпоиск по регулярному выражению:

print([sent for sent in sentences if re.search(r'\b{}\b'.format(word), sent)])
# => ['The U.S. Tax Act imposed a mandatory one-time tax on accumulated earnings of foreign subsidiaries and changed how foreign earnings are subject to U.S. tax.']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...