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}
|