Difflib sequencematcher с предложениями

У меня есть следующий датафрейм

Column1         Column2
tomato fruit    tomatoes are not a fruit
potato la best  potatoe are some sort of fruit
apple           there are great benefits to appel
pear            peer

и я хотел бы посмотреть слово / предложение слева с предложениями справа, и если есть совпадение на максимуме первых двух слов (например, "картошка ла" и пропустить "лучше"), то это даст Гол.

Я уже использовал два разных метода:

for i in range(0, len(Column1)):
     store_it = SM(None, Column1[i], Column2[i]).get_matching_blocks()
     print(store_it)

А также

df['diff'] = df.apply(lambda x: diff.SequenceMatcher(None, x[0].strip(), x[1].strip()).ratio(), axis=1) 

который я нашел в интернете.

Второй работает нормально, за исключением того, что он пытается соответствовать всей фразе. Как я могу сопоставить слова в первом столбце с предложениями во втором столбце, чтобы в конечном итоге дать мне "Да", они есть в предложении (или частично) или "Нет", а они нет.

2 ответа

У меня был лучший успех, используя частичное соотношение FuzzyWuzzy на этом. Это даст вам соотношение частичного совпадения в процентах между Column1 "помидор" и Column2 "помидор не фрукт" и остальной частью пути вниз по столбцам. Посмотреть результаты:

from fuzzywuzzy import fuzz
import difflib

df['fuzz_partial_ratio'] = df.apply(lambda x: fuzz.partial_ratio(x['Column1'], x['Column2']), axis=1)

df['sequence_ratio'] = df.apply(lambda x: difflib.SequenceMatcher(None, x['Column1'], x['Column2']).ratio(), axis=1)

Вы можете считать любое значение FuzzyWuzzy> 60 хорошим частичным соответствием, т. Е. Да, слова в столбце 1 наиболее вероятны в предложении в столбце 2.

строка 1- оценка 67, строка 2- оценка 71, строка 3- оценка 80, строка 4- оценка 75

Использование set():

Python "Документация
issubset(other)
установить <= другое
Проверьте, является ли каждый элемент в наборе другим.

Например:

c_set1 = set(Column1[i])
c_set2 = set(Column2[i])
if  c_set1.issubset(c_set2):
    # every in  c_set1 is in  c_set2
Другие вопросы по тегам