Мне нужно сопоставить ключевые слова, перечисленные в столбце панд, с ключевыми словами из списка и создать новый столбец, который состоит из совпадающих слов. Пример:

my_list = ['machine learning', 'artificial intelligence', 'lasso']

Данных:

listing                                         keyword_column
I am looking for machine learning expert        machine learning
Machine learning expert that knows lasso        machine learning, lasso
Need a web designer                              
Artificial Intelligence application on...       artificial intelligence
1
edyvedy13 25 Июн 2019 в 13:53

3 ответа

Лучший ответ

Используйте Series.str.findall чтобы получить все значения в списке, присоединитесь к тегу Series.str.join и при необходимости преобразуйте в нижний регистр с помощью Series.str.lower:

Также здесь используются границы слов с \b для правильного соответствия целых слов из my_list.

my_list = ['machine learning', 'artificial intelligence', 'lasso']

import re

pat = '|'.join(r"\b{}\b".format(x) for x in my_list)
df['new'] = df['listing'].str.findall(pat, flags=re.I).str.join(', ').str.lower()

Или же:

df['new'] = df['listing'].str.lower().str.findall(pat).str.join(', ')

print (df)
                                    listing           keyword_column  \
0  I am looking for machine learning expert         machine learning   
1  Machine learning expert that knows lasso  machine learning, lasso   
2                      Need a web designer                       NaN   
3    Artificial Intelligence application on  artificial intelligence   

                       new  
0         machine learning  
1  machine learning, lasso  
2                           
3  artificial intelligence  
2
jezrael 25 Июн 2019 в 11:01

Вы также можете использовать str.lower + str.findall + str.join для решения вашей проблемы:

df['keyword_column'] = df['listing'].str.lower().str.findall('|'.join(my_list)).str.join(', ')

И сейчас:

print(df)

Является:

                                     listing           keyword_column
0   I am looking for machine learning expert         machine learning
1   Machine learning expert that knows lasso  machine learning, lasso
2                        Need a web designer                         
3  Artificial Intelligence application on...  artificial intelligence
1
U10-Forward 25 Июн 2019 в 10:59

Flashtext также может быть использован для извлечения ключевого слова

import pandas as pd
from flashtext import KeywordProcessor

data = ['I am looking for machine learning expert','Machine learning expert that knows lasso ','Need a web designer','Artificial Intelligence application on...' ]

df = pd.DataFrame(data, columns = ['listing'])
my_list = ['machine learning', 'artificial intelligence', 'lasso']

kp = KeywordProcessor()
kp.add_keywords_from_list(my_list)

df['keyword_columns'] = df['listing'].apply(lambda x: kp.extract_keywords(x))

#op
df['keyword_columns']
Out[68]: 
0           [machine learning]
1    [machine learning, lasso]
2                           []
3    [artificial intelligence]
1
qaiser 25 Июн 2019 в 12:37