summaryrefslogtreecommitdiff
path: root/synonyms.fnl
diff options
context:
space:
mode:
authorunwox <me@unwox.com>2025-10-14 13:07:48 +0600
committerunwox <me@unwox.com>2025-10-14 13:07:48 +0600
commit163773bdf237ba80a34a4a5366df826933f2cd8a (patch)
treed0a2f1244f7af51dc7ee274a4cd863e2ad7aefc1 /synonyms.fnl
parent668aeb1730978c3712ed5a83f927e69e2b8e114c (diff)
improve products search
Diffstat (limited to 'synonyms.fnl')
-rw-r--r--synonyms.fnl56
1 files changed, 56 insertions, 0 deletions
diff --git a/synonyms.fnl b/synonyms.fnl
new file mode 100644
index 0000000..29e2b96
--- /dev/null
+++ b/synonyms.fnl
@@ -0,0 +1,56 @@
+(local lib (require :lib))
+
+(local synonyms
+ [["шэн" "шен"]
+ ["бан" "бань"]
+ ["чжан" "чжань"]
+ ["чжень" "чжэнь"]
+ ["билочунь" "би ло чунь"]
+ ["бутылка" "термос"]
+ ["доска" "чабань"]
+ ["даньцун" "дяньцун" "дянь цун" "дань цун"]
+ ["фаньгу" "фань гу" "фангу" "фан гу"]
+ ["бай му дань" "баймудань"]
+ ["бай хао" "байхао"]
+ ["гуанбай" "гуан бай"]
+ ["буланшань" "булан шань"]
+ ["биндао" "бин дао"]
+ ["лунцзин" "лун цзин"]
+ ["термос" "бутылка"]
+ ["чахай" "сливник"]
+ ["те гуань инь" "те гуаньинь" "тегуань инь" "тегуаньинь"]
+ ["фан гу" "фангу" "фаньгу" "фань гу"]
+ ["точа" "то ча"]
+ ["гушу" "гу шу"]])
+
+(fn find-synonyms [word]
+ (var input-word (_G.must (luna.utf8.lower word)))
+ (var result nil)
+ (each [_ synonyms-line (ipairs synonyms) &until result]
+ (each [_ synonym-word (ipairs synonyms-line) &until result]
+ (when (= input-word synonym-word)
+ (set result synonyms-line))))
+ result)
+
+(fn replace [line]
+ (var results [])
+ (let [words (lib.split line " ")
+ words-count (# words)]
+ (for [i 1 words-count]
+ (var word nil)
+ (for [j i words-count]
+ (set word
+ (if (not word)
+ (. words j)
+ (.. word " " (. words j))))
+ (table.insert results word))))
+ (var final-result line)
+ (each [_ result (ipairs results)]
+ (local synonyms (find-synonyms result))
+ (when synonyms
+ (var query (.. (table.concat synonyms "* OR ") "*"))
+ (set final-result
+ (: final-result :gsub result query))))
+ final-result)
+
+{: replace}