From 85dd0063910cd592d6bc15eba19cd3f6f43bd3b0 Mon Sep 17 00:00:00 2001 From: unwox Date: Thu, 17 Oct 2024 14:34:48 +0600 Subject: move spellfix.fnl to lib/spellfix.fnl --- bin/serve.fnl | 2 +- lib/spellfix.fnl | 312 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ spellfix.fnl | 312 ------------------------------------------------------- 3 files changed, 313 insertions(+), 313 deletions(-) create mode 100644 lib/spellfix.fnl delete mode 100644 spellfix.fnl diff --git a/bin/serve.fnl b/bin/serve.fnl index 9d83b10..aeea929 100644 --- a/bin/serve.fnl +++ b/bin/serve.fnl @@ -10,7 +10,7 @@ (local array (require :lib.array)) (local str (require :lib.string)) (local texts (require :texts)) -(local spellfix (require :spellfix)) +(local spellfix (require :lib.spellfix)) (local cache (require :lib.cache)) (local {: must : measure} (require :lib.utils)) diff --git a/lib/spellfix.fnl b/lib/spellfix.fnl new file mode 100644 index 0000000..2507fca --- /dev/null +++ b/lib/spellfix.fnl @@ -0,0 +1,312 @@ +(import-macros {: map : filter} :lib.macro) +(local array (require :lib.array)) +(local str (require :lib.string)) +(local {: must} (require :lib.utils)) + +(local vocabulary ["агар" "агарвуд" "агат" "агатис" "али" "алишань" "алтарь" + "альба" "амазонка" "аметист" "амино" "антивирус" + "антиквариат" "антикварный" "антилопа" "ань" "аньси" + "аньхуа" "аравана" "арахис" "арахисом" "арован" "арована" + "аромат" "ароматный" "архат" "асфальт" "атомы" "атрибуты" + "аура" "бабочка" "бабочки" "багрянник" "базальт" "базовая" + "бай" "бакелит" "баклажан" "бамбук" "бамбуковая" + "бамбуковые" "бамбуковый" "бан" "банвэй" "бандун" "банка" + "бань" "бао" "баоянь" "барабанчик" "баран" "бацзе" "бегемот" + "беззаботный" "бекас" "белая" "белые" "белый" "беседа" + "беседка" "бессмертие" "билочунь" "бин" "биндао" "бирюза" + "благовония" "благоденствие" "благопожелание" "ближе" "блик" + "блин" "блэк" "блюдо" "богатство" "богомол" "бодрящий" + "бодхи" "бодхидхарма" "боковая" "большая" "большеротая" + "большое" "большой" "борец" "бохун" "бочонка" "бочонок" + "браслет" "бронза" "бронзовая" "будда" "будды" "буйвол" + "булан" "бульдог" "буонарроти" "бусин" "бусина" "бусины" + "бутон" "бутылка" "бутылки" "бык" "быки" "быть" "бьянка" + "бэй" "бюрюза" "бяо" "ваджра" "ваза" "вазочка" "вальдшнеп" + "ван" "вань" "варки" "васнецов" "ведерко" "ведро" "великая" + "великий" "венге" "версия" "весеннее" "весенние" "весна" + "весны" "весы" "ветвях" "ветка" "ветке" "веточка" "вечным" + "вижу" "виктор" "винил" "винсент" "вишнвое" "вместе" + "внеземной" "вода" "водопад" "воды" "водяная" "водяной" + "волнам" "воробей" "воробьиные" "восемь" "восьми" "врата" + "встроенным" "выдвижным" "выдержанный" "выращивание" + "высокая" "высокий" "высокотемпературный" "высший" "вьюнки" + "вэй" "вэн" "вэнь" "габа" "габаулун" "габашен" "гайвань" + "галька" "гамма" "ган" "гань" "гао" "гаомиду" "гаошань" + "гармония" "гаруда" "гвоздика" "гейша" "геккон" + "гималайский" "гинкго" "главных" "гладкий" "глаз" "глазурь" + "глина" "глины" "глициния" "гог" "год" "годов" "гои" + "голова" "голубая" "голубой" "голубь" "гор" "гора" "горах" + "горизонтом" "горная" "горном" "горный" "горшок" "горшочек" + "горы" "гоу" "грамм" "гранат" "граненый" "графит" "грецкий" + "гриб" "грибной" "грибом" "грибы" "грин" "грифовая" "груша" + "грушевый" "гуа" "гуан" "гуанси" "гуань" "гуаньинь" "гуй" + "гун" "гунтин" "гунфу" "гуси" "густав" "гусь" "гушу" + "гэланхэ" "дабайхао" "дабайча" "дали" "дан" "дань" "дао" + "даос" "даоское" "дарума" "дарумы" "дарующий" "дары" + "дасюэшань" "дахунпао" "два" "двоих" "двойное" "дворянский" + "денежная" "день" "дерева" "деревня" "дерево" "деревьев" + "деревянная" "деревянном" "деревянный" "деревянным" + "дескрипторов" "дети" "джу" "джэй" "дикая" "дикие" "дикий" + "диких" "дикого" "дикой" "дин" "динь" "диск" "длинный" "для" + "дном" "добродушный" "долголетие" "долголетия" "дораэмон" + "доска" "достаток" "доу" "драгоценная" "дракон" "дракона" + "драконом" "драконхранитель" "драконы" "древа" "древесина" + "древний" "дровяной" "дуань" "дуаньни" "дун" "дух" "дымка" + "дьен" "дэхуа" "дянь" "дяньхун" "дяочань" "европейский" + "естественность" "жаба" "жабадракон" "жабе" "жан" "жаровня" + "жасминовый" "жезл" "жезлом" "железо" "желтая" "желтые" + "желтый" "жемчуг" "жемчужина" "жемчужиной" "жемчужины" "жен" + "жень" "жернов" "жертвенный" "жесть" "жестяная" "жидкое" + "жизнь" "жлтая" "жлтой" "жлтый" "жоу" "жуйтюань" "жунтянь" + "журавлей" "журавли" "журавль" "жэнь" "забором" "заваривай" + "заваривания" "заварочная" "заварочный" "завертка" "загадка" + "зайчик" "заря" "затерянные" "затеряться" "заяц" "звезда" + "зверк" "зеленая" "зеленый" "зелная" "зелное" "зелной" + "зелные" "зелный" "земли" "земляники" "земной" "зернами" + "зимний" "зимняя" "зимородок" "зип" "знакомства" + "знакомство" "значок" "золота" "золотая" "золоте" + "золотистая" "золотистый" "золото" "золотое" "золотой" + "золотом" "золотые" "золотым" "зрнах" "игла" "иглы" "игра" + "играют" "игрунка" "иероглиф" "иероглифы" "извергающая" + "изгиб" "изобилия" "изображением" "изогнутый" "изумрудная" + "изумрудные" "изящество" "или" "император" "императора" + "индэ" "инженерное" "инкрустацией" "инструмент" + "инструментов" "инструменты" "инь" "исинская" "исинский" + "исинской" "искусство" "истинная" "истинно" "история" + "йеллоу" "йон" "йоу" "каждый" "каи" "каллиграфии" + "каллиграфия" "камень" "камне" "камня" "камфара" "камфорный" + "камфоры" "као" "капля" "капюшоне" "карамель" "карамельный" + "карпы" "картина" "картины" "кашпо" "каштановая" "каштаны" + "квадрат" "квадратная" "квадратное" "квадратный" "кварц" + "кедр" "керамика" "керамики" "кибер" "киноварная" + "киноварный" "киноварь" "киноварьбхмм" "кипячения" "кирпич" + "кирпичик" "кисет" "кистей" "кисть" "китайский" "китайским" + "классика" "классическая" "клетка" "климт" "клипса" + "книгами" "кнопкой" "коала" "кобальт" "кобальтовая" + "кобальтовые" "кобальтовый" "ковка" "кожа" "колба" "колбы" + "коленце" "коллекционная" "колодец" "колокол" "колосья" + "колотый" "кольцами" "кольцо" "кольцом" "комбо" "комковой" + "комплект" "конверт" "консоль" "контур" "конусов" "коралл" + "корень" "корзина" "корзинка" "корица" "коричневая" + "коричневое" "коричневый" "кормилица" "коробка" "коробке" + "коробочка" "коробочке" "корпусе" "кости" "кость" "костяной" + "кот" "котелок" "котик" "котики" "котнок" "краб" "крабы" + "край" "красавица" "красная" "краснобелый" "красного" + "красное" "красной" "красносиний" "красные" "красный" + "красных" "кратер" "крафткартон" "креветка" "креветки" + "кристалл" "кровавый" "кровать" "кролик" "кролики" + "крольчонок" "круг" "круглая" "круглое" "круглый" "круглым" + "кружка" "крупная" "крыло" "крыса" "крыски" "крышки" + "крышкой" "крышку" "крышу" "куан" "кубок" "кувшин" + "кузнечик" "куй" "культура" "кун" "кунь" "купаж" + "курильница" "куропатка" "куропатки" "кучжушань" "кха" + "лабранг" "лавр" "лазуревая" "лазурит" "лазурь" "лак" + "лаконичная" "лаконичное" "лаконичный" "лампада" "лан" + "лань" "ланьбмм" "ланьянь" "лао" "лаодуань" "лаошу" "латунь" + "лев" "лед" "ледяная" "лежанка" "лепестки" "лепешка" "лес" + "леса" "лесная" "лесной" "летающая" "летний" "летучая" + "летучей" "летучие" "ликов" "лилия" "лимин" "лин" "линчжи" + "линь" "линьцан" "линьцана" "лист" "листве" "листе" + "листопад" "листья" "листьях" "личи" "лодка" "лопаточка" + "лоск" "лотос" "лотоса" "лотосе" "лотосовом" "лотосовый" + "лотосом" "лотосы" "лошадей" "лошадь" "лун" "луна" "лунная" + "лунный" "луны" "львов" "львы" "льду" "любимого" "люйтан" + "люкс" "люфа" "лягушка" "лягушки" "лян" "лянь" "магнолии" + "магнолия" "магритт" "май" "майтрейя" "малая" "маленькая" + "малые" "малый" "мальки" "мальчик" "мандарине" "мандаринки" + "маньлан" "маньно" "мао" "маофэн" "марка" "мастер" "маття" + "матура" "матча" "медитации" "медитирующий" "медная" + "медный" "медовые" "медь" "между" "мей" "менхай" + "менхайский" "меняющая" "металл" "металлик" "металлической" + "мешочек" "микеланджело" "микрофибра" "мин" "миндаль" "мини" + "мининабор" "миниточа" "минитун" "минцзян" "мир" "мира" + "мистер" "ммб" "мокрый" "моллюск" "молочная" "монах" + "монетами" "монете" "монетка" "монеты" "мопс" "море" "моша" + "мощный" "мощь" "мудрец" "мудрый" "мун" "муравей" "мушмула" + "мыши" "мышки" "мышонок" "мышь" "мышью" "мэй" "мэйхуа" "мэн" + "мэнку" "мэнсун" "мэнхай" "мэнхайская" "мэнхая" "мятный" + "набор" "награда" "нака" "наклейки" "нан" "нань" "наньно" + "наньтоу" "наполированный" "наработанный" "нарухина" + "нарцисс" "нарциссы" "наследие" "настроение" "натюрморт" + "наук" "начало" "небесной" "небесный" "небо" "неведомый" + "нежная" "нежный" "нектар" "нержавеющая" "нефрит" + "нефритовая" "нефритовое" "нижним" "низкий" "нитка" "нить" + "новая" "новый" "нож" "ножках" "ножке" "нос" "ночи" "ночь" + "нун" "нюгай" "оазис" "обеденный" "обезьян" "обезьянка" + "обезьянки" "обезьяны" "обжиг" "облака" "облаками" "облаках" + "облако" "ободком" "обратных" "обсидиан" "овал" "овальная" + "овальный" "огненная" "огнеупорная" "огнеупорного" + "огнеупорное" "одуванчик" "озера" "окаменелая" "океана" + "окихиро" "округлый" "олдскул" "олень" "олово" "оплетка" + "оранжевый" "органик" "органическая" "орех" "орехи" + "ореховый" "орнамент" "орнаментом" "орхидеи" "орхидея" + "осень" "осетр" "османтус" "основных" "особая" "отдых" + "охраняющий" "очиститель" "пабло" "павлин" "пакет" "пакетов" + "палисандр" "палисандра" "палочка" "палочки" "панда" + "панцирь" "пань" "пао" "пара" "парный" "пару" "парча" + "патра" "пачка" "пейзаж" "пейзажная" "пеликан" "первый" + "перепелиное" "перепрыгивают" "перламутром" "персик" + "персика" "персике" "персики" "персиковый" "персиком" + "персон" "персоны" "петух" "печать" "пиал" "пиала" "пиалу" + "пиалы" "пикассо" "пин" "пиньгэ" "пион" "пиона" "пионы" + "пирамида" "письмо" "пламя" "плант" "плантационный" + "плантация" "пластиковое" "пластиковым" "пластина" + "пластинки" "плато" "плетеное" "плетное" "плетной" "плитка" + "плоды" "пломбир" "плоская" "побеги" "погружение" "под" + "подарочная" "подарочной" "подачей" "подводный" "поддоном" + "поднос" "подносом" "подсвечник" "подставка" + "подставкаподогреватель" "подставке" "подставки" + "подставкой" "подушкой" "познания" "покой" "поколений" + "покров" "полной" "полный" "полотенце" "полотно" "полочка" + "полуавтоматическая" "полудикий" "полудиких" "полусладкий" + "помпа" "пороснок" "постижение" "посуды" "поталь" "походная" + "походный" "почка" "праздник" "предел" "предмет" "предметов" + "премиум" "пресс" "природе" "пробуждение" "прозрачная" + "прозрачный" "прохладе" "процветание" "прочность" "пруд" + "пруду" "пряжка" "прямоугольная" "прямоугольный" "прятки" + "птица" "птицы" "птички" "пурпур" "пурпурный" "путь" + "пушинка" "пуэр" "пуэрмобиль" "пчела" "пышная" "пяо" + "пятнистый" "пять" "работа" "работы" "радости" "разделки" + "размер" "размышлений" "райские" "раковина" "ранневесенний" + "распускающиеся" "распустившиеся" "расслабляющий" + "рассыпной" "растительный" "раухтопаз" "реактор" "ребенок" + "ребнок" "регион" "резвящихся" "резьба" "река" "реки" + "рельеф" "рене" "репа" "рецепт" "рештка" "риса" "рисовый" + "рисовыми" "рисовых" "рисунком" "ритуальный" "рог" + "рододендрон" "роза" "розовый" "розы" "ромашке" "роса" + "роспись" "россия" "руб" "рубин" "рудра" "рутилом" "ручка" + "ручками" "ручкой" "ручная" "рыба" "рыбадракон" "рыбаки" + "рыбка" "рыбки" "рыбой" "рыбы" "рыжая" "рыжий" "саванна" + "сад" "сакральной" "сакура" "саламандра" "салатовая" + "салфетница" "сандал" "сандала" "саоган" "сахарок" "сбор" + "сверчок" "свет" "светлая" "светлое" "светлорыжая" "светлые" + "светлый" "свинка" "свиньи" "свинья" "свитком" "связь" + "священного" "северный" "секции" "селадон" "семена" "семь" + "семян" "серая" "сердечки" "сердолик" "сердца" "сердце" + "серебре" "серебро" "серебряная" "серебряные" "серия" + "серое" "серый" "сиборидаси" "сигара" "сизоворонка" "сила" + "силу" "символы" "син" "синебежевый" "синее" "синей" "синие" + "синий" "синь" "синяя" "сипин" "сиреневый" "сито" "ситом" + "сифон" "сияние" "склада" "скоропись" "скрученный" + "скульптура" "сладкий" "сладость" "слив" "слива" "сливник" + "сливы" "слитке" "слитком" "слово" "сложная" "слон" + "слоновой" "слоном" "слоны" "смола" "сна" "снежная" + "снежный" "собака" "советский" "совок" "совочек" + "согревающий" "солнца" "солнце" "сорт" "сосна" "сосны" + "сосуд" "спирали" "спираль" "спиртовка" "спокойствие" + "спящий" "средняя" "стакан" "стакантермос" "сталь" "станция" + "старая" "старого" "старое" "старый" "старых" "статуэтка" + "стекла" "стекло" "стеклянная" "стекляный" "стикер" + "стикерпак" "стикеры" "стиле" "стилов" "стиль" "сто" "стол" + "столик" "столика" "стопы" "странствующий" "стрекоза" + "строк" "стул" "стула" "ступа" "суаньджи" "суй" "сумка" + "сумо" "сун" "сундук" "сунская" "сунском" "сунь" "суровая" + "сутра" "сутры" "сухого" "сухое" "сферы" "счастливая" + "счастливое" "счастливый" "счастье" "счастья" "сытый" + "сюань" "сюнь" "сюэ" "сягуань" "сян" "сянь" "сяньхуа" "сяо" + "тай" "тайванский" "тайвань" "тайваньская" "тайваньского" + "тайхэ" "такинава" "тан" "танская" "танские" "танцуют" + "тань" "тао" "тарелка" "тарзан" "творцы" "твоя" "тегуаньинь" + "телец" "темная" "темное" "темнокоричневая" "тентяо" + "термоз" "термос" "термоса" "термоскувшин" "тигр" "тигра" + "тигровый" "тин" "типот" "тираж" "тисбмм" "титан" + "титестера" "тишине" "ткань" "тмная" "тмное" "тмные" "тмный" + "тобой" "тонкое" "тоу" "точа" "трав" "травы" "трапеция" + "треножник" "трепет" "треугольная" "трехлапая" "три" "трио" + "трионикс" "троих" "трон" "трона" "трубками" "трубкой" + "трхлапая" "тулоу" "тун" "тунь" "тушечница" "тушью" "тхи" + "тыква" "тьен" "тюльпан" "тяван" "тян" "тянь" "тяоша" "угря" + "удачи" "узор" "улун" "улыбка" "уляншань" "упаковка" "уруши" + "уся" "утешения" "утнок" "уточки" "утро" "утун" "ухват" + "уцай" "учатся" "ушастый" "фан" "фаньгу" "фарфор" "фарфора" + "фарфоровая" "феникс" "фермерский" "фигурка" "фильтрпакеты" + "финиковый" "фиолетового" "фиолетовый" "фирма" "флакон" + "форма" "формикарий" "фосян" "фруктовый" "фугу" "фудин" + "фун" "футболка" "фуцзянь" "фуцзяньском" "фэй" "фэйчжоу" + "фэн" "фэнхуан" "фэнцин" "фэншуй" "хай" "хайвань" "халат" + "ханой" "хань" "ханьской" "хао" "хгр" "хищная" "хлопок" + "хлопушками" "хлоритом" "хмм" "хомяк" "хороший" "хотеи" + "хотей" "хотэй" "хоу" "хохин" "хранения" "хранящий" + "хризантема" "хризантемы" "хрусталь" "хсм" "хуа" "хуан" + "хуацзинань" "хун" "хунни" "хуолун" "хупитан" "хурма" + "хурмы" "хуэй" "ххсм" "хэй" "хэйтан" "хэйхуали" "хэйча" + "хэн" "хэтян" "хэхуань" "цан" "цаплей" "цапля" "царь" "цвет" + "цвета" "цветами" "цветов" "цветок" "цветочки" "цветочная" + "цветочный" "цветущие" "цветущий" "цветы" + "целеустремленность" "цельная" "церемонии" "цза" "цзао" + "цзе" "цзи" "цзин" "цзингу" "цзиндэчжень" "цзиндэчжэнь" + "цзиндэчжэньгоры" "цзинмай" "цзиношань" "цзинь" "цзиньгу" + "цзиньдечжень" "цзиньдэчжень" "цзиньдэчжэнь" "цзу" "цзун" + "цзы" "цзыни" "цзытан" "цзю" "цзюй" "цзюнь" "цзюэнь" "цзя" + "цзянь" "цзяньшуй" "цзяньшуйская" "цзяо" "цикада" "цикадки" + "цикады" "цикл" "цилиндр" "цилинь" "цимень" "цин" "цинния" + "цинхуа" "циньчжоу" "цуй" "цун" "цюй" "цюэ" "цяньлян" "цяо" + "чабань" "чаегуань" "чаем" "чаепития" "чай" "чайнатаун" + "чайная" "чайник" "чайника" "чайники" "чайником" + "чайниксифон" "чайница" "чайничек" "чайного" "чайное" + "чайной" "чайные" "чайный" "чайных" "чак" "чаньчжи" + "чаочжоу" "чато" "чахай" "чаху" "чахэ" "чацзя" "чаша" + "чашао" "чашек" "чашка" "чашкатермо" "чашке" "чашки" "чая" + "чен" "черенками" "черепаха" "черепахадракон" "черепаший" + "черный" "черпак" "четки" "четыре" "чехлом" "чжай" "чжан" + "чжанлан" "чжань" "чжаоцзюнь" "чжен" "чжень" "чжи" "чжима" + "чжу" "чжуань" "чжун" "чжуни" "чжэн" "чжэнь" "чизкейк" + "чилл" "чин" "чицзыму" "чоу" "чрная" "чрное" "чрный" "чтки" + "чток" "чугун" "чудо" "чун" "чунь" "чуньхуа" "чха" "чхан" + "чхин" "чхэн" "чхэнсян" "чэн" "чэнь" "чэньсян" "чэньсяо" + "шай" "шайхун" "шан" "шань" "шар" "шен" "шестиугольник" + "шило" "шипяо" "шисянь" "шиюань" "шкатулка" "шкаф" "шкафчик" + "школа" "шнурок" "шоколад" "шоу" "шрек" "шуй" "шуйпин" + "шуйсянь" "шумахер" "шупу" "шурикен" "шутливый" "шуэй" "шу" + "шэн" "шэнтай" "шэнши" "щипцы" "экстра" "электрический" + "электронные" "элементов" "юйчэн" "юлэ" "юндэ" "юнь" + "юньнань" "юпитер" "юэнань" "яблоко" "язычки" "яйцо" + "якотза" "яма" "янгуйфэй" "янтарь" "янь" + "японский" "яшма"]) + +(fn levenshtein [str1 str2] + (local len1 (must (luna.utf8.len str1))) + (local len2 (must (luna.utf8.len str2))) + (local matrix []) + (var cost 0) + (if + (= len1 0) len2 + (= len2 0) len1 + (= str1 str2) 0 + (< 2 (math.abs (- len2 len1))) (math.max len2 len1) + ;; else + (do + (for [i 0 len1] (tset matrix i {}) (tset (. matrix i) 0 i)) + (for [j 0 len2] (tset (. matrix 0) j j)) + (for [i 1 len1] + (for [j 1 len2] + (if (= (must (luna.utf8.sub str1 i 1)) + (must (luna.utf8.sub str2 j 1))) + (set cost 0) (set cost 1)) + (tset (. matrix i) j + (math.min (+ (. matrix (- i 1) j) 1) (+ (. matrix i (- j 1)) 1) + (+ (. matrix (- i 1) (- j 1)) cost))))) + (. matrix len1 len2)))) + +(fn guess [string] + (local result + (array.join + (map + (fn [_ token] + (local index + (map (fn [_ v] + {:word v :distance (levenshtein token v)}) + vocabulary)) + (local sorted-index + (array.sort index #(< $1.distance $2.distance))) + (local most-similar (. sorted-index 1)) + (if (< most-similar.distance 3) + most-similar.word + token)) + (str.split string " ")) + " ")) + (if (~= result string) + result + nil)) + +{: guess} diff --git a/spellfix.fnl b/spellfix.fnl deleted file mode 100644 index 2507fca..0000000 --- a/spellfix.fnl +++ /dev/null @@ -1,312 +0,0 @@ -(import-macros {: map : filter} :lib.macro) -(local array (require :lib.array)) -(local str (require :lib.string)) -(local {: must} (require :lib.utils)) - -(local vocabulary ["агар" "агарвуд" "агат" "агатис" "али" "алишань" "алтарь" - "альба" "амазонка" "аметист" "амино" "антивирус" - "антиквариат" "антикварный" "антилопа" "ань" "аньси" - "аньхуа" "аравана" "арахис" "арахисом" "арован" "арована" - "аромат" "ароматный" "архат" "асфальт" "атомы" "атрибуты" - "аура" "бабочка" "бабочки" "багрянник" "базальт" "базовая" - "бай" "бакелит" "баклажан" "бамбук" "бамбуковая" - "бамбуковые" "бамбуковый" "бан" "банвэй" "бандун" "банка" - "бань" "бао" "баоянь" "барабанчик" "баран" "бацзе" "бегемот" - "беззаботный" "бекас" "белая" "белые" "белый" "беседа" - "беседка" "бессмертие" "билочунь" "бин" "биндао" "бирюза" - "благовония" "благоденствие" "благопожелание" "ближе" "блик" - "блин" "блэк" "блюдо" "богатство" "богомол" "бодрящий" - "бодхи" "бодхидхарма" "боковая" "большая" "большеротая" - "большое" "большой" "борец" "бохун" "бочонка" "бочонок" - "браслет" "бронза" "бронзовая" "будда" "будды" "буйвол" - "булан" "бульдог" "буонарроти" "бусин" "бусина" "бусины" - "бутон" "бутылка" "бутылки" "бык" "быки" "быть" "бьянка" - "бэй" "бюрюза" "бяо" "ваджра" "ваза" "вазочка" "вальдшнеп" - "ван" "вань" "варки" "васнецов" "ведерко" "ведро" "великая" - "великий" "венге" "версия" "весеннее" "весенние" "весна" - "весны" "весы" "ветвях" "ветка" "ветке" "веточка" "вечным" - "вижу" "виктор" "винил" "винсент" "вишнвое" "вместе" - "внеземной" "вода" "водопад" "воды" "водяная" "водяной" - "волнам" "воробей" "воробьиные" "восемь" "восьми" "врата" - "встроенным" "выдвижным" "выдержанный" "выращивание" - "высокая" "высокий" "высокотемпературный" "высший" "вьюнки" - "вэй" "вэн" "вэнь" "габа" "габаулун" "габашен" "гайвань" - "галька" "гамма" "ган" "гань" "гао" "гаомиду" "гаошань" - "гармония" "гаруда" "гвоздика" "гейша" "геккон" - "гималайский" "гинкго" "главных" "гладкий" "глаз" "глазурь" - "глина" "глины" "глициния" "гог" "год" "годов" "гои" - "голова" "голубая" "голубой" "голубь" "гор" "гора" "горах" - "горизонтом" "горная" "горном" "горный" "горшок" "горшочек" - "горы" "гоу" "грамм" "гранат" "граненый" "графит" "грецкий" - "гриб" "грибной" "грибом" "грибы" "грин" "грифовая" "груша" - "грушевый" "гуа" "гуан" "гуанси" "гуань" "гуаньинь" "гуй" - "гун" "гунтин" "гунфу" "гуси" "густав" "гусь" "гушу" - "гэланхэ" "дабайхао" "дабайча" "дали" "дан" "дань" "дао" - "даос" "даоское" "дарума" "дарумы" "дарующий" "дары" - "дасюэшань" "дахунпао" "два" "двоих" "двойное" "дворянский" - "денежная" "день" "дерева" "деревня" "дерево" "деревьев" - "деревянная" "деревянном" "деревянный" "деревянным" - "дескрипторов" "дети" "джу" "джэй" "дикая" "дикие" "дикий" - "диких" "дикого" "дикой" "дин" "динь" "диск" "длинный" "для" - "дном" "добродушный" "долголетие" "долголетия" "дораэмон" - "доска" "достаток" "доу" "драгоценная" "дракон" "дракона" - "драконом" "драконхранитель" "драконы" "древа" "древесина" - "древний" "дровяной" "дуань" "дуаньни" "дун" "дух" "дымка" - "дьен" "дэхуа" "дянь" "дяньхун" "дяочань" "европейский" - "естественность" "жаба" "жабадракон" "жабе" "жан" "жаровня" - "жасминовый" "жезл" "жезлом" "железо" "желтая" "желтые" - "желтый" "жемчуг" "жемчужина" "жемчужиной" "жемчужины" "жен" - "жень" "жернов" "жертвенный" "жесть" "жестяная" "жидкое" - "жизнь" "жлтая" "жлтой" "жлтый" "жоу" "жуйтюань" "жунтянь" - "журавлей" "журавли" "журавль" "жэнь" "забором" "заваривай" - "заваривания" "заварочная" "заварочный" "завертка" "загадка" - "зайчик" "заря" "затерянные" "затеряться" "заяц" "звезда" - "зверк" "зеленая" "зеленый" "зелная" "зелное" "зелной" - "зелные" "зелный" "земли" "земляники" "земной" "зернами" - "зимний" "зимняя" "зимородок" "зип" "знакомства" - "знакомство" "значок" "золота" "золотая" "золоте" - "золотистая" "золотистый" "золото" "золотое" "золотой" - "золотом" "золотые" "золотым" "зрнах" "игла" "иглы" "игра" - "играют" "игрунка" "иероглиф" "иероглифы" "извергающая" - "изгиб" "изобилия" "изображением" "изогнутый" "изумрудная" - "изумрудные" "изящество" "или" "император" "императора" - "индэ" "инженерное" "инкрустацией" "инструмент" - "инструментов" "инструменты" "инь" "исинская" "исинский" - "исинской" "искусство" "истинная" "истинно" "история" - "йеллоу" "йон" "йоу" "каждый" "каи" "каллиграфии" - "каллиграфия" "камень" "камне" "камня" "камфара" "камфорный" - "камфоры" "као" "капля" "капюшоне" "карамель" "карамельный" - "карпы" "картина" "картины" "кашпо" "каштановая" "каштаны" - "квадрат" "квадратная" "квадратное" "квадратный" "кварц" - "кедр" "керамика" "керамики" "кибер" "киноварная" - "киноварный" "киноварь" "киноварьбхмм" "кипячения" "кирпич" - "кирпичик" "кисет" "кистей" "кисть" "китайский" "китайским" - "классика" "классическая" "клетка" "климт" "клипса" - "книгами" "кнопкой" "коала" "кобальт" "кобальтовая" - "кобальтовые" "кобальтовый" "ковка" "кожа" "колба" "колбы" - "коленце" "коллекционная" "колодец" "колокол" "колосья" - "колотый" "кольцами" "кольцо" "кольцом" "комбо" "комковой" - "комплект" "конверт" "консоль" "контур" "конусов" "коралл" - "корень" "корзина" "корзинка" "корица" "коричневая" - "коричневое" "коричневый" "кормилица" "коробка" "коробке" - "коробочка" "коробочке" "корпусе" "кости" "кость" "костяной" - "кот" "котелок" "котик" "котики" "котнок" "краб" "крабы" - "край" "красавица" "красная" "краснобелый" "красного" - "красное" "красной" "красносиний" "красные" "красный" - "красных" "кратер" "крафткартон" "креветка" "креветки" - "кристалл" "кровавый" "кровать" "кролик" "кролики" - "крольчонок" "круг" "круглая" "круглое" "круглый" "круглым" - "кружка" "крупная" "крыло" "крыса" "крыски" "крышки" - "крышкой" "крышку" "крышу" "куан" "кубок" "кувшин" - "кузнечик" "куй" "культура" "кун" "кунь" "купаж" - "курильница" "куропатка" "куропатки" "кучжушань" "кха" - "лабранг" "лавр" "лазуревая" "лазурит" "лазурь" "лак" - "лаконичная" "лаконичное" "лаконичный" "лампада" "лан" - "лань" "ланьбмм" "ланьянь" "лао" "лаодуань" "лаошу" "латунь" - "лев" "лед" "ледяная" "лежанка" "лепестки" "лепешка" "лес" - "леса" "лесная" "лесной" "летающая" "летний" "летучая" - "летучей" "летучие" "ликов" "лилия" "лимин" "лин" "линчжи" - "линь" "линьцан" "линьцана" "лист" "листве" "листе" - "листопад" "листья" "листьях" "личи" "лодка" "лопаточка" - "лоск" "лотос" "лотоса" "лотосе" "лотосовом" "лотосовый" - "лотосом" "лотосы" "лошадей" "лошадь" "лун" "луна" "лунная" - "лунный" "луны" "львов" "львы" "льду" "любимого" "люйтан" - "люкс" "люфа" "лягушка" "лягушки" "лян" "лянь" "магнолии" - "магнолия" "магритт" "май" "майтрейя" "малая" "маленькая" - "малые" "малый" "мальки" "мальчик" "мандарине" "мандаринки" - "маньлан" "маньно" "мао" "маофэн" "марка" "мастер" "маття" - "матура" "матча" "медитации" "медитирующий" "медная" - "медный" "медовые" "медь" "между" "мей" "менхай" - "менхайский" "меняющая" "металл" "металлик" "металлической" - "мешочек" "микеланджело" "микрофибра" "мин" "миндаль" "мини" - "мининабор" "миниточа" "минитун" "минцзян" "мир" "мира" - "мистер" "ммб" "мокрый" "моллюск" "молочная" "монах" - "монетами" "монете" "монетка" "монеты" "мопс" "море" "моша" - "мощный" "мощь" "мудрец" "мудрый" "мун" "муравей" "мушмула" - "мыши" "мышки" "мышонок" "мышь" "мышью" "мэй" "мэйхуа" "мэн" - "мэнку" "мэнсун" "мэнхай" "мэнхайская" "мэнхая" "мятный" - "набор" "награда" "нака" "наклейки" "нан" "нань" "наньно" - "наньтоу" "наполированный" "наработанный" "нарухина" - "нарцисс" "нарциссы" "наследие" "настроение" "натюрморт" - "наук" "начало" "небесной" "небесный" "небо" "неведомый" - "нежная" "нежный" "нектар" "нержавеющая" "нефрит" - "нефритовая" "нефритовое" "нижним" "низкий" "нитка" "нить" - "новая" "новый" "нож" "ножках" "ножке" "нос" "ночи" "ночь" - "нун" "нюгай" "оазис" "обеденный" "обезьян" "обезьянка" - "обезьянки" "обезьяны" "обжиг" "облака" "облаками" "облаках" - "облако" "ободком" "обратных" "обсидиан" "овал" "овальная" - "овальный" "огненная" "огнеупорная" "огнеупорного" - "огнеупорное" "одуванчик" "озера" "окаменелая" "океана" - "окихиро" "округлый" "олдскул" "олень" "олово" "оплетка" - "оранжевый" "органик" "органическая" "орех" "орехи" - "ореховый" "орнамент" "орнаментом" "орхидеи" "орхидея" - "осень" "осетр" "османтус" "основных" "особая" "отдых" - "охраняющий" "очиститель" "пабло" "павлин" "пакет" "пакетов" - "палисандр" "палисандра" "палочка" "палочки" "панда" - "панцирь" "пань" "пао" "пара" "парный" "пару" "парча" - "патра" "пачка" "пейзаж" "пейзажная" "пеликан" "первый" - "перепелиное" "перепрыгивают" "перламутром" "персик" - "персика" "персике" "персики" "персиковый" "персиком" - "персон" "персоны" "петух" "печать" "пиал" "пиала" "пиалу" - "пиалы" "пикассо" "пин" "пиньгэ" "пион" "пиона" "пионы" - "пирамида" "письмо" "пламя" "плант" "плантационный" - "плантация" "пластиковое" "пластиковым" "пластина" - "пластинки" "плато" "плетеное" "плетное" "плетной" "плитка" - "плоды" "пломбир" "плоская" "побеги" "погружение" "под" - "подарочная" "подарочной" "подачей" "подводный" "поддоном" - "поднос" "подносом" "подсвечник" "подставка" - "подставкаподогреватель" "подставке" "подставки" - "подставкой" "подушкой" "познания" "покой" "поколений" - "покров" "полной" "полный" "полотенце" "полотно" "полочка" - "полуавтоматическая" "полудикий" "полудиких" "полусладкий" - "помпа" "пороснок" "постижение" "посуды" "поталь" "походная" - "походный" "почка" "праздник" "предел" "предмет" "предметов" - "премиум" "пресс" "природе" "пробуждение" "прозрачная" - "прозрачный" "прохладе" "процветание" "прочность" "пруд" - "пруду" "пряжка" "прямоугольная" "прямоугольный" "прятки" - "птица" "птицы" "птички" "пурпур" "пурпурный" "путь" - "пушинка" "пуэр" "пуэрмобиль" "пчела" "пышная" "пяо" - "пятнистый" "пять" "работа" "работы" "радости" "разделки" - "размер" "размышлений" "райские" "раковина" "ранневесенний" - "распускающиеся" "распустившиеся" "расслабляющий" - "рассыпной" "растительный" "раухтопаз" "реактор" "ребенок" - "ребнок" "регион" "резвящихся" "резьба" "река" "реки" - "рельеф" "рене" "репа" "рецепт" "рештка" "риса" "рисовый" - "рисовыми" "рисовых" "рисунком" "ритуальный" "рог" - "рододендрон" "роза" "розовый" "розы" "ромашке" "роса" - "роспись" "россия" "руб" "рубин" "рудра" "рутилом" "ручка" - "ручками" "ручкой" "ручная" "рыба" "рыбадракон" "рыбаки" - "рыбка" "рыбки" "рыбой" "рыбы" "рыжая" "рыжий" "саванна" - "сад" "сакральной" "сакура" "саламандра" "салатовая" - "салфетница" "сандал" "сандала" "саоган" "сахарок" "сбор" - "сверчок" "свет" "светлая" "светлое" "светлорыжая" "светлые" - "светлый" "свинка" "свиньи" "свинья" "свитком" "связь" - "священного" "северный" "секции" "селадон" "семена" "семь" - "семян" "серая" "сердечки" "сердолик" "сердца" "сердце" - "серебре" "серебро" "серебряная" "серебряные" "серия" - "серое" "серый" "сиборидаси" "сигара" "сизоворонка" "сила" - "силу" "символы" "син" "синебежевый" "синее" "синей" "синие" - "синий" "синь" "синяя" "сипин" "сиреневый" "сито" "ситом" - "сифон" "сияние" "склада" "скоропись" "скрученный" - "скульптура" "сладкий" "сладость" "слив" "слива" "сливник" - "сливы" "слитке" "слитком" "слово" "сложная" "слон" - "слоновой" "слоном" "слоны" "смола" "сна" "снежная" - "снежный" "собака" "советский" "совок" "совочек" - "согревающий" "солнца" "солнце" "сорт" "сосна" "сосны" - "сосуд" "спирали" "спираль" "спиртовка" "спокойствие" - "спящий" "средняя" "стакан" "стакантермос" "сталь" "станция" - "старая" "старого" "старое" "старый" "старых" "статуэтка" - "стекла" "стекло" "стеклянная" "стекляный" "стикер" - "стикерпак" "стикеры" "стиле" "стилов" "стиль" "сто" "стол" - "столик" "столика" "стопы" "странствующий" "стрекоза" - "строк" "стул" "стула" "ступа" "суаньджи" "суй" "сумка" - "сумо" "сун" "сундук" "сунская" "сунском" "сунь" "суровая" - "сутра" "сутры" "сухого" "сухое" "сферы" "счастливая" - "счастливое" "счастливый" "счастье" "счастья" "сытый" - "сюань" "сюнь" "сюэ" "сягуань" "сян" "сянь" "сяньхуа" "сяо" - "тай" "тайванский" "тайвань" "тайваньская" "тайваньского" - "тайхэ" "такинава" "тан" "танская" "танские" "танцуют" - "тань" "тао" "тарелка" "тарзан" "творцы" "твоя" "тегуаньинь" - "телец" "темная" "темное" "темнокоричневая" "тентяо" - "термоз" "термос" "термоса" "термоскувшин" "тигр" "тигра" - "тигровый" "тин" "типот" "тираж" "тисбмм" "титан" - "титестера" "тишине" "ткань" "тмная" "тмное" "тмные" "тмный" - "тобой" "тонкое" "тоу" "точа" "трав" "травы" "трапеция" - "треножник" "трепет" "треугольная" "трехлапая" "три" "трио" - "трионикс" "троих" "трон" "трона" "трубками" "трубкой" - "трхлапая" "тулоу" "тун" "тунь" "тушечница" "тушью" "тхи" - "тыква" "тьен" "тюльпан" "тяван" "тян" "тянь" "тяоша" "угря" - "удачи" "узор" "улун" "улыбка" "уляншань" "упаковка" "уруши" - "уся" "утешения" "утнок" "уточки" "утро" "утун" "ухват" - "уцай" "учатся" "ушастый" "фан" "фаньгу" "фарфор" "фарфора" - "фарфоровая" "феникс" "фермерский" "фигурка" "фильтрпакеты" - "финиковый" "фиолетового" "фиолетовый" "фирма" "флакон" - "форма" "формикарий" "фосян" "фруктовый" "фугу" "фудин" - "фун" "футболка" "фуцзянь" "фуцзяньском" "фэй" "фэйчжоу" - "фэн" "фэнхуан" "фэнцин" "фэншуй" "хай" "хайвань" "халат" - "ханой" "хань" "ханьской" "хао" "хгр" "хищная" "хлопок" - "хлопушками" "хлоритом" "хмм" "хомяк" "хороший" "хотеи" - "хотей" "хотэй" "хоу" "хохин" "хранения" "хранящий" - "хризантема" "хризантемы" "хрусталь" "хсм" "хуа" "хуан" - "хуацзинань" "хун" "хунни" "хуолун" "хупитан" "хурма" - "хурмы" "хуэй" "ххсм" "хэй" "хэйтан" "хэйхуали" "хэйча" - "хэн" "хэтян" "хэхуань" "цан" "цаплей" "цапля" "царь" "цвет" - "цвета" "цветами" "цветов" "цветок" "цветочки" "цветочная" - "цветочный" "цветущие" "цветущий" "цветы" - "целеустремленность" "цельная" "церемонии" "цза" "цзао" - "цзе" "цзи" "цзин" "цзингу" "цзиндэчжень" "цзиндэчжэнь" - "цзиндэчжэньгоры" "цзинмай" "цзиношань" "цзинь" "цзиньгу" - "цзиньдечжень" "цзиньдэчжень" "цзиньдэчжэнь" "цзу" "цзун" - "цзы" "цзыни" "цзытан" "цзю" "цзюй" "цзюнь" "цзюэнь" "цзя" - "цзянь" "цзяньшуй" "цзяньшуйская" "цзяо" "цикада" "цикадки" - "цикады" "цикл" "цилиндр" "цилинь" "цимень" "цин" "цинния" - "цинхуа" "циньчжоу" "цуй" "цун" "цюй" "цюэ" "цяньлян" "цяо" - "чабань" "чаегуань" "чаем" "чаепития" "чай" "чайнатаун" - "чайная" "чайник" "чайника" "чайники" "чайником" - "чайниксифон" "чайница" "чайничек" "чайного" "чайное" - "чайной" "чайные" "чайный" "чайных" "чак" "чаньчжи" - "чаочжоу" "чато" "чахай" "чаху" "чахэ" "чацзя" "чаша" - "чашао" "чашек" "чашка" "чашкатермо" "чашке" "чашки" "чая" - "чен" "черенками" "черепаха" "черепахадракон" "черепаший" - "черный" "черпак" "четки" "четыре" "чехлом" "чжай" "чжан" - "чжанлан" "чжань" "чжаоцзюнь" "чжен" "чжень" "чжи" "чжима" - "чжу" "чжуань" "чжун" "чжуни" "чжэн" "чжэнь" "чизкейк" - "чилл" "чин" "чицзыму" "чоу" "чрная" "чрное" "чрный" "чтки" - "чток" "чугун" "чудо" "чун" "чунь" "чуньхуа" "чха" "чхан" - "чхин" "чхэн" "чхэнсян" "чэн" "чэнь" "чэньсян" "чэньсяо" - "шай" "шайхун" "шан" "шань" "шар" "шен" "шестиугольник" - "шило" "шипяо" "шисянь" "шиюань" "шкатулка" "шкаф" "шкафчик" - "школа" "шнурок" "шоколад" "шоу" "шрек" "шуй" "шуйпин" - "шуйсянь" "шумахер" "шупу" "шурикен" "шутливый" "шуэй" "шу" - "шэн" "шэнтай" "шэнши" "щипцы" "экстра" "электрический" - "электронные" "элементов" "юйчэн" "юлэ" "юндэ" "юнь" - "юньнань" "юпитер" "юэнань" "яблоко" "язычки" "яйцо" - "якотза" "яма" "янгуйфэй" "янтарь" "янь" - "японский" "яшма"]) - -(fn levenshtein [str1 str2] - (local len1 (must (luna.utf8.len str1))) - (local len2 (must (luna.utf8.len str2))) - (local matrix []) - (var cost 0) - (if - (= len1 0) len2 - (= len2 0) len1 - (= str1 str2) 0 - (< 2 (math.abs (- len2 len1))) (math.max len2 len1) - ;; else - (do - (for [i 0 len1] (tset matrix i {}) (tset (. matrix i) 0 i)) - (for [j 0 len2] (tset (. matrix 0) j j)) - (for [i 1 len1] - (for [j 1 len2] - (if (= (must (luna.utf8.sub str1 i 1)) - (must (luna.utf8.sub str2 j 1))) - (set cost 0) (set cost 1)) - (tset (. matrix i) j - (math.min (+ (. matrix (- i 1) j) 1) (+ (. matrix i (- j 1)) 1) - (+ (. matrix (- i 1) (- j 1)) cost))))) - (. matrix len1 len2)))) - -(fn guess [string] - (local result - (array.join - (map - (fn [_ token] - (local index - (map (fn [_ v] - {:word v :distance (levenshtein token v)}) - vocabulary)) - (local sorted-index - (array.sort index #(< $1.distance $2.distance))) - (local most-similar (. sorted-index 1)) - (if (< most-similar.distance 3) - most-similar.word - token)) - (str.split string " ")) - " ")) - (if (~= result string) - result - nil)) - -{: guess} -- cgit v1.2.3