У меня есть программа, которая захватывает сокращения (то есть ищет слова, заключенные в скобки), а затем, основываясь на количестве символов в сокращении, возвращает столько слов и определяет их. До сих пор он работает для определений, подобных предыдущим словам, которые начинаются с заглавных букв или когда большинство предыдущих слов начинаются с заглавных букв. Для последнего он пропускает строчные буквы, такие как «in», и переходит к следующему. Тем не менее, моя проблема заключается в том, когда количество соответствующих слов в нижнем регистре.
Токовый выход:
Все удивительные парни (AAD)
Инициатива по методам, измерениям и оценке боли в клинических испытаниях (IMMPACT)
Испытания (IMMPACT). Некоторые пациенты предпочитают обычный уход (UC)
Желаемый вывод:
Все удивительные парни (AAD)
Инициатива по методам, измерениям и оценке боли в клинических испытаниях (IMMPACT)
обычный уход (UC)
import re
s = """Too many people, but not All Awesome Dudes (AAD) only care about the
Initiative on Methods, Measurement, and Pain Assessment in Clinical
Trials (IMMPACT). Some patient perfer the usual care (UC) approach of
doing nothing"""
allabbre = []
for match in re.finditer(r"\((.*?)\)", s):
start_index = match.start()
abbr = match.group(1)
size = len(abbr)
words = s[:start_index].split()
count=0
for k,i in enumerate(words[::-1]):
if i[0].isupper():count+=1
if count==size:break
words=words[-k-1:]
definition = " ".join(words)
abbr_keywords = definition + " " + "(" + abbr + ")"
pattern='[A-Z]'
if re.search(pattern, abbr):
if abbr_keywords not in allabbre:
allabbre.append(abbr_keywords)
print(abbr_keywords)