View in Telegram
O(n^2) – побеждаем сложность #АнатомияФункций – приёмы Всем привет! В чат прилетела задачка на поиск пар подобных текстов (сразу обращаю внимание – не кластеризация, а именно расчёт подобия и вынимание избранных, причём с линейной метрикой). Соответственно на больших данных это очень ресурсозатратно. Что смог – сократил, по этому поводу код:
let
    from = List.Distinct(Excel.CurrentWorkbook(){[Name="база"]}[Content][Наименование]),
    lst = List.Buffer(List.Transform(List.Zip({from,{1..List.Count(from)}}),(x)=>{x{0},Text.ToList(Text.Upper(x{0})),Text.Length(x{0}),x{1}})),

    g=(x,y)=>2*List.Count(List.Intersect({x{1},y{1}}))/(x{2}+y{2}),
    f=(x)=>List.Select(List.Transform(List.Skip(lst,x{3}),(y)=>{x{0},y{0},g(x,y)}),(z)=>z{2}>0.86),
    tr = List.TransformMany(lst,f,(x,y)=>y),
    to = Table.FromList(tr,(x)=>x,{"Наименование","Похожее","Подобие"})
in
to
Ну а что тут к чему смотрим - С исходниками на sponsr - там же и курс по языку М На дзен и если повезет на ютуб Лайки, комменты, подписки приветствуются ))) Надеюсь, было полезно. Всех благ! @buchlotnik
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Love Center - Dating, Friends & Matches, NY, LA, Dubai, Global
Find friends or serious relationships easily