Программа для захвата сокращений и определений - проблемы с получением всех строчных сокращений - PullRequest
1 голос
/ 04 июня 2019

У меня есть программа, которая захватывает сокращения (то есть ищет слова, заключенные в скобки), а затем, основываясь на количестве символов в сокращении, возвращает столько слов и определяет их. До сих пор он работает для определений, подобных предыдущим словам, которые начинаются с заглавных букв или когда большинство предыдущих слов начинаются с заглавных букв. Для последнего он пропускает строчные буквы, такие как «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)

1 Ответ

1 голос
/ 04 июня 2019

Флаг используется для редких случаев, таких как All are Awesome Dudes (AAD)

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=size-1
    flag=words[-1][0].isupper()
    for k,i in enumerate(words[::-1]):
        first_letter=i[0] if flag else i[0].upper()
        if first_letter==abbr[count]:count-=1
        if count==-1: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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...