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