Ma chaîne principale est dans le dataframe et les sous-chaînes sont stockées dans des listes. Ma sortie souhaitée est de trouver la sous-chaîne correspondante. Voici le code que j'utilise.

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)

Cela me donne le résultat en tant que chaîne qui n'est pas une correspondance réelle. La sortie doit être "segmentectomie". Mais j'obtiens [0,'lobectomie']. S'il vous plaît aider !!. J'ai essayé de m'aider de la réponse postée ici. Vérifiez si plusieurs chaînes existent dans une autre chaîne Veuillez aider à trouver dehors qu'est-ce que je fais mal?

0
pari 10 mars 2019 à 11:46

2 réponses

Meilleure réponse

Je n'utilise pas vraiment TextBlob, mais j'ai deux méthodes qui pourraient vous aider à atteindre votre objectif. Essentiellement, je divise la phrase par un espace et je l'itère pour voir s'il y a des correspondances. Une méthode renvoie une liste et l'autre un dictionnaire de valeurs d'index et le mot.

### 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]

Alors:

find_keyword_matches(sentence2, comorbidity_keywords)

Production:

['segmentectomy']

Pour un dictionnaire:

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

Production:

{17: 'segmentectomy'}

Enfin, un itérateur qui affichera également où dans la phrase se trouve un mot, le cas échéant:

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

Faites ensuite une compréhension de liste imbriquée pour vous débarrasser des valeurs None:

found_words = [x for x in [word_range(sentence2, i) for i in comorbidity_keywords] if not x is None]
1
Mark Moretto 10 mars 2019 à 13:10

Il devrait y avoir un moyen plus efficace de le faire. Mais c'est ce que j'ai trouvé en utilisant deux boucles pour deux listes.

for ckeyword in comorbidity_keywords:
   for keyword in df1.values.tolist():
     if any(ckeyword in key for key in keyword):
        matches.append(ckeyword)
0
pari 10 mars 2019 à 12:26