summaryrefslogtreecommitdiff
path: root/lib/synonyms.fnl
blob: 9ca6bab7e0fefd8bf24a6deddd5dd37ee6099876 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
(import-macros {: map} :lib.macro)

(local libstr (require :lib.string))
(local array (require :lib.array))
(local {: must} (require :lib.utils))

(local synonyms
  [["шэн" "шен"]
   ["билочунь" "би ло чунь"]
   ["бутылка" "термос"]
   ["доска" "чабань"]
   ["даньцун" "дяньцун" "дянь цун" "дань цун"]
   ["фаньгу" "фань гу" "фангу" "фан гу"]
   ["бай му дань" "баймудань"]
   ["бай хао" "байхао"]
   ["гуанбай" "гуан бай"]
   ["буланшань" "булан шань"]
   ["биндао" "бин дао"]
   ["лунцзин" "лун цзин"]
   ["термос" "бутылка"]
   ["чахай" "сливник"]
   ["те гуань инь" "те гуаньинь" "тегуань инь" "тегуаньинь"]
   ["чжень" "чжэнь"]
   ["фан гу" "фангу" "фаньгу" "фань гу"]
   ["точа" "то ча"]
   ["гушу" "гу шу"]])

(fn find-synonyms [word]
  (var input-word (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))))
  (print result)
  result)

(fn replace [line]
  (var results [])
  (let [words (libstr.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 (.. (array.join synonyms " OR ") "*"))
      (set final-result
        (: final-result :gsub result (.. "(" query ")")))))
  final-result)

{: replace}