Как проверить, содержит ли строка подстроку, когда оба хранятся в списках в Python? - PullRequest
0 голосов
/ 10 марта 2019

Моя основная строка находится в кадре данных, а подстроки хранятся в списках. Мой желаемый результат - найти подходящую подстроку. Вот код, который я использую.

sentence2 = "Previous study: 03/03/2018 (other hospital)  Findings:   Lung parenchyma: The study reveals evidence of apicoposterior segmentectomy of LUL showing soft tissue thickening adjacent surgical bed at LUL, possibly post operation." 
blob_sentence = TextBlob(sentence2)
noun = blob_sentence.noun_phrases
df1 = pd.DataFrame(noun)
comorbidity_keywords = ["segmentectomy","lobectomy"]
matches =[]
for comorbidity_keywords[0] in df1:
    if comorbidity_keywords[0] in df1 and comorbidity_keywords[0] not in matches:
       matches.append(comorbidity_keywords)

Это дает мне результат в виде строки, которая не соответствует действительности. На выходе должна быть "сегментэктомия". Но я получаю [0, «лобэктомия»]. Пожалуйста помоги!!. Я попытался получить помощь от ответа, размещенного здесь. Проверьте, существует ли несколько строк в другой строке Пожалуйста, помогите узнать, что я делаю неправильно?

Ответы [ 2 ]

1 голос
/ 10 марта 2019

Я на самом деле не использую TextBlob, но у меня есть два метода, которые могут помочь вам достичь вашей цели.По сути, я разделяю предложение пробелом и перебираю его, чтобы увидеть, есть ли совпадения.Один метод возвращает список, а другой - словарь значений индекса и слова.

### If you just want a list of words
def find_keyword_matches(sentence, keyword_list):
    s1 = sentence.split(' ')
    return [i for i in  s1 if i in keyword_list]

Затем:

find_keyword_matches(sentence2, comorbidity_keywords)

Вывод:

['segmentectomy']

Длясловарь:

def find_keyword_matches(sentence, keyword_list):
    s1 = sentence.split(' ')
    return {xyz.index(i):i for i in xyz if i in comorbidity_keywords}

Вывод:

{17: 'segmentectomy'}

Наконец, итератор, который также выведет, где в предложении найдено слово, если оно вообще есть:

def word_range(sentence, keyword):
    try:
        idx_start = sentence.index(keyword)
        idx_end = idx_start + len(keyword)
        print(f'Word \'{keyword}\' found within index range {idx_start} to {idx_end}')
        if idx_start > 0:
            return keyword
    except ValueError:
        pass

Затем выполните понимание вложенного списка, чтобы избавиться от значений None:

found_words = [x for x in [word_range(sentence2, i) for i in comorbidity_keywords] if not x is None]
0 голосов
/ 10 марта 2019

Должен быть более эффективный способ сделать это. Но это то, что я придумал, используя два цикла for для двух списков.

for ckeyword in comorbidity_keywords:
   for keyword in df1.values.tolist():
     if any(ckeyword in key for key in keyword):
        matches.append(ckeyword)
...