Я работаю над удалением похожих фраз из списка, но я столкнулся с небольшим препятствием.
У меня есть предложения и фразы, фразы связаны с предложением. Все фразы предложения находятся в одном списке.
Пусть список фраз будет: p=[['This is great','is great','place for drinks','for drinks'],['Tonight is a good','good night','is a good','for movies']]
Я хочу, чтобы мой вывод был [['This is great','place for drinks'],['Tonight is a good','for movies']]
По сути, я хочу получить все самые длинные уникальные фразы в списке.
Я взглянул на библиотеку fuzzywuzzy, но не могу найти хорошее решение.
вот мой код:
def remove_dup(arr, threshold=80):
ret_arr =[]
for item in arr:
if item[1]<threshold:
ret_arr.append(item[0])
return ret_arr
def find_important(sents=sents, phrase=phrase):
import os, random
from fuzzywuzzy import process, fuzz
all_processed = [] #final array to be returned
for i in range(len(sents)):
new_arr = [] #reshaped phrases for a single sentence
for item in phrase[i]:
new_arr.append(item)
new_arr.sort(reverse=True, key=lambda x : len(x)) #sort with highest length
important = [] #array to store terms
important = process.extractBests(new_arr[0], new_arr) #to get levenshtein distance matches
to_proc = remove_dup(important) #remove_dup removes all relatively matching terms.
to_proc.append(important[0][0]) #the term with highest match is obviously the important term.
all_processed.append(to_proc) #add non duplicates to all_processed[]
return all_processed
Может кто-нибудь указать, что мне не хватает, или как лучше это сделать? Заранее спасибо!