Поиск ключевых слов в текстовом столбце фрейма данных с помощью словаря

#python #dataframe #dictionary #nlp #keyword-search

Вопрос:

Я новичок в python, и это очень специфическое требование, на котором я застрял из-за ограниченных знаний, я буду признателен, если кто-нибудь сможет помочь с этим

Я создал словарь с помощью excel, который выглядит следующим образом

 dict = {'Fruit' : {'Comb Words' : ['yellow',
                                   'elongated',
                                   'cooking'],
                   'Mandatory Word' : ['banana',
                                       'banana',
                                       'banana']},
       'Animal' : {'Comb Words' : ['mammal',
                                   'white'
                                   'domestic'],
                  'Mandatory Word' : ['cat',
                                      'cat',
                                      'cat']}}
 

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

             Text                     Mandatory      Comb            Final
A white domestic cat is playing        cat       domestic,white     Animal
yellow banana is not available        banana       yellow           Fruit

 

Этот словарь-всего лишь идея, я могу изменить его, так как это входные данные из excel. Таким образом, любой другой формат или способ, который может привести к вышеуказанному результату, является здесь единственной целью.

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

1. Это единственные 3 столбца, которые вы хотите создать?

2. В идеале, но я больше сосредоточен на решении. Если для этого требуется более 3 столбцов, даже тогда все в порядке

Ответ №1:

Использование определяемой пользователем функции:

 import pandas as pd

Dict = {'Fruit' : {'Comb Words' : ['yellow',
                                   'elongated',
                                   'cooking'],
                   'Mandatory Word' : ['banana',
                                       'banana',
                                       'banana']},
       'Animal' : {'Comb Words' : ['mammal',
                                   'white',
                                   'domestic'],
                  'Mandatory Word' : ['cat',
                                      'cat',
                                      'cat']}}
                                      
df = pd.DataFrame({'Text':['A white domestic cat is playing',
                            'yellow banana is not available']})

def findMCF(sentence):
    for mand in sentence.split():
        for final in Dict:
            wordtypeDict = Dict[final]
            mandList = wordtypeDict['Mandatory Word']
            if mand in mandList:
                C = [wrd for wrd in sentence.split() if word in wordtypeDict['Comb Words']]
                return (mand,','.join(C),final)

df['Mandatory'],df['Comb'],df['Final'] = zip(*df['Text'].map(findMCF))

print(df)
 

Выход:

                               Text Mandatory            Comb   Final
0  A white domestic cat is playing       cat  white,domestic  Animal
1   yellow banana is not available    banana          yellow   Fruit