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

#python #dataframe #string-matching #fuzzy-comparison

Вопрос:

У меня есть этот список:

 the_list = ['3D Sensing camera', '4D printing', '5G', '6G', 'adaptive security architecture', 'ai', 'AI', 'AI-', 'AR Cloud', 'Army_Intelligence', 'Artificial general intelligence', 'Artificial tissue', 'artificial_insemination', 'artificial_intelligence', 'augmented intelligence', 'augmented reality', 'authentification', 'automaton', 'Autonomous driving', 'Autonomous vehicles', 'bidirectional brain-machine interfaces', 'big data', 'biodegradable', 'Biodegradable', 'Biotech', 'biotech', 'biotechnology', 'Bitcoin', 'Blockchain', 'BMI', 'body_mass_index', 'bourdon', 'Bradypus_tridactylus', 'cognitive computing', 'commercial UAVs', 'Composite AI', 'connected home', 'conversational systems']  

Моя цель состоит в том, чтобы сравнить КАЖДОЕ из слов этого списка с 2 существующими столбцами DF, которые содержат заголовки и сообщения сообщений с нечетким соответствием. Я не хочу, чтобы только оценка совпадения 2 совпадающих слов/предложений, но, что более важно, отображала в новом столбце все совпадающие слова, которые составляют более 80% от оценки совпадения.

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

До сих пор это то, что я сделал:

 the_list = ['3D Sensing camera', '4D printing', '5G', '6G', 'adaptive security architecture', 'ai', 'AI', 'AI-', 'AR Cloud', 'Army_Intelligence', 'Artificial general intelligence', 'Artificial tissue', 'artificial_insemination', 'artificial_intelligence', 'augmented intelligence', 'augmented reality', 'authentification', 'automaton', 'Autonomous driving', 'Autonomous vehicles', 'bidirectional brain-machine interfaces', 'big data', 'biodegradable', 'Biodegradable', 'Biotech', 'biotech', 'biotechnology', 'Bitcoin', 'Blockchain', 'BMI', 'body_mass_index', 'bourdon', 'Bradypus_tridactylus', 'cognitive computing', 'commercial UAVs', 'Composite AI', 'connected home', 'conversational systems']  df['new_column'] = "" for s in df['title_lemmatized']:   for i in the_list:  df['new_column'] = fuzz.token_set_ratio(df['title_lemmatized'], the_list)  df  gt;gt; outpout:   title_lemmatized text_lemmatized Fuzzy_mached(s) 0 Title1 'AI claim that Iot devises...' 6 1 Title2 'The claim story about...' 6 2 Title3 'augmented reality and ai are...' 6 3 Title4 'AI ai or artificial intelligence' 6   

В результате я получил 6 везде, где хотел бы иметь что-то в этом роде:

 gt;gt; outpout:   title_lemmatized text_lemmatized matched_word(s) 0 Title1 'AI claim that Iot devises...' 'AI', 'IoT' 1 Title2 'The claim story about...' 2 Title3 'augmented reality and ai are...' 'augmented reality', 'ai' 3 Title4 'AI ai or artificial intelligence' 'AI', 'ai', 'artificial intelligence'  

Последний вопрос: как я могу определить, какой нечеткий модуль лучше всего подходит для моих данных?

Большое спасибо 🙂