По вашему определению я написал что-то, что ищет близкие строки, содержащие определенные символы. Для начала нужно вычислить два списка "resa" и "rese". Они сообщают, содержится ли данная строка в вашем списке. Например, если вы ищете «a» в списке [«ab c», «ccd», «efg», «agf»], результирующий список будет [1,0,0,1]. Вы должны рассчитать их для «aanhangwagens» и символа евро. С помощью этих списков вы можете проверить расстояния между 1 в списке евро и 1 в списке «aanhangwagens».
В вашем примере поиск «aanhangwagens» дает: [0, 1, 0, 0 , 0, 1, 0, 0, 0, 0, 0, 0, 0, 0] и евро дает: [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1 , 0, 0]
Алгоритм, который я написал, сохраняет самую близкую строку, НО, если две строки имеют одинаковое расстояние, он поместит их в список результатов обоих. Пожалуйста, перед использованием этого кода запустите несколько тестов, я не могу заверить вас, что он будет работать в любом случае.
resa=[]
rese=[]
for t in listTxt:
if 'aanhangwagens' in t:
resa.append(1)
else:
resa.append(0)
if '€' in t:
rese.append(1)
else:
rese.append(0)
def close_line(aliste, alista, alistTxt):
all_closest_lines=[]
for i in range(len(aliste)):
if(aliste[i]==0):
continue
else:
closest_line=[]
amin=max(len(aliste), len(alista))
for j in range(len(alista)):
if(alista[j]==0):
continue
else:
if(abs(i-j)<amin):
amin=abs(i-j)
closest_line=[]
closest_line.append([alistTxt[j], "Closest to € in position{}".format(i)])
elif(abs(i-j)==amin):
closest_line.append([alistTxt[j], "Closest to € in position{}".format(i)])
all_closest_lines+=closest_line
return(all_closest_lines)
print(close_line(rese, resa, listTxt))
Результаты:
[['aanhangwagens die in uw woonhuis, schuur of garage op ', 'Closest to € in position2'], ['aanhangwagens die niet kapot zijn verzekerd', 'Closest to € in position11']]