Поиск длинного слова, разбитого на новую строку

#python #regex #python-3.x #nlp

#python #регулярное выражение #python-3.x #nlp

Вопрос:

Я пытаюсь выполнить поиск по списку слов, и поэтому я сгенерировал этот код:

 narrative = "Lasix 40 mg b.i.d., for three days along with potassium chloride slow release 20 mEq b.i.d. for three days, Motrin 400 mg q.8h"

meds_name_final_list = ["lasix", "potassium chloride slow release", ...]


def all_occurences(file, str):
    initial = 0
    while True:
        initial = file.find(str, initial)
        if initial == -1:
            return
        yield initial
        initial  = len(str)
    offset = []
    for item in meds_name_final_list:
        number = list(all_occurences(narrative.lower(), item))
        offset.append(number)
  

Желаемый результат: список начального индекса / indexes в корпусах слова, для которого выполняется поиск, например:

 offset = [[1], [3, 10], [5, 50].....]
  

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

Нужное слово: potassium chloride slow release

Есть предложения по решению этой проблемы?

Комментарии:

1.Можете ли вы отредактировать свой фрагмент кода, чтобы показать нам, какие именно входные данные вы предоставляете функции, каков результат и каким вы хотите, чтобы результат был? Является str "potassium chloride slow release" ?

2. Вы могли бы просто сделать file.replace("n", " ") в начале.

Ответ №1:

Как насчет этого?

 def all_occurences(file, str):
    initial = 0
    file = file.replace('n', ' ')
    while True:
      initial = file.find(str, initial)
      if initial == -1: return
      yield initial
      initial  = len(str)