1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-28 18:22:02 +08:00

opt input

This commit is contained in:
shaoying 2021-07-19 01:22:50 +08:00
parent c30f4da9bc
commit 1c484251b3
2 changed files with 43 additions and 39 deletions

View File

@ -1,15 +1,15 @@
package alpha package alpha
import ( import (
"os"
"path"
"strings"
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/core/wiki" "github.com/shylinux/icebergs/core/wiki"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"os"
"path"
"strings"
) )
func _alpha_find(m *ice.Message, method, word string) { func _alpha_find(m *ice.Message, method, word string) {
@ -19,18 +19,18 @@ func _alpha_find(m *ice.Message, method, word string) {
// 搜索方法 // 搜索方法
switch word = strings.TrimSpace(word); method { switch word = strings.TrimSpace(word); method {
case "line": case LINE:
case "word": case WORD:
word = "," + word + "$" word = "," + word + "$"
} }
// 搜索词汇 // 搜索词汇
msg := m.Cmd(cli.SYSTEM, "grep", "-rh", word, m.Conf(ALPHA, "meta.store")) msg := m.Cmd(cli.SYSTEM, "grep", "-rh", word, m.Conf(ALPHA, kit.Keym(kit.MDB_STORE)))
msg.CSV(msg.Result(), kit.Simple(m.Confv(ALPHA, "meta.field"))...).Table(func(index int, value map[string]string, head []string) { msg.CSV(msg.Result(), kit.Simple(m.Confv(ALPHA, kit.META_FIELD))...).Table(func(index int, value map[string]string, head []string) {
if value["word"] == "" { if value[WORD] == "" {
return return
} }
m.PushSearch("cmd", ALPHA, "type", method, "name", value["word"], "text", value["translation"], value) m.PushSearch("cmd", ALPHA, kit.MDB_TYPE, method, kit.MDB_NAME, value[WORD], kit.MDB_TEXT, value["translation"], value)
}) })
return return
} }
@ -52,11 +52,16 @@ func _alpha_load(m *ice.Message, file, name string) {
m.Cmd(mdb.IMPORT, ALPHA, name, kit.MDB_LIST, file) m.Cmd(mdb.IMPORT, ALPHA, name, kit.MDB_LIST, file)
// 保存词库 // 保存词库
m.Conf(ALPHA, kit.Keys(name, "meta.limit"), 0) m.Conf(ALPHA, kit.Keys(name, kit.Keym(kit.MDB_LIMIT)), 0)
m.Conf(ALPHA, kit.Keys(name, "meta.least"), 0) m.Conf(ALPHA, kit.Keys(name, kit.Keym(kit.MDB_LEAST)), 0)
m.Echo("%s: %d", name, m.Grow(ALPHA, name, kit.Dict("word", " "))) m.Echo("%s: %d", name, m.Grow(ALPHA, name, kit.Dict(WORD, " ")))
} }
const (
WORD = "word"
LINE = "line"
)
const ALPHA = "alpha" const ALPHA = "alpha"
var Index = &ice.Context{Name: ALPHA, Help: "英汉词典", var Index = &ice.Context{Name: ALPHA, Help: "英汉词典",
@ -64,13 +69,15 @@ var Index = &ice.Context{Name: ALPHA, Help: "英汉词典",
ALPHA: {Name: ALPHA, Help: "英汉词典", Value: kit.Data( ALPHA: {Name: ALPHA, Help: "英汉词典", Value: kit.Data(
kit.MDB_LIMIT, "50000", kit.MDB_LEAST, "1000", kit.MDB_LIMIT, "50000", kit.MDB_LEAST, "1000",
kit.MDB_STORE, "usr/local/export/alpha", kit.MDB_FSIZE, "2000000", kit.MDB_STORE, "usr/local/export/alpha", kit.MDB_FSIZE, "2000000",
kit.SSH_REPOS, "word-dict", kit.MDB_FIELD, []interface{}{"audio", "bnc", "collins", "definition", "detail", "exchange", "frq", "id", "oxford", "phonetic", "pos", "tag", "time", "translation", "word"}, kit.SSH_REPOS, "word-dict", kit.MDB_FIELD, []interface{}{
"audio", "bnc", "collins", "definition", "detail", "exchange", "frq", "id", "oxford", "phonetic", "pos", "tag", "time", "translation", "word",
},
)}, )},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmd(mdb.SEARCH, mdb.CREATE, ALPHA, m.Prefix(ALPHA))
m.Load() m.Load()
m.Cmd(mdb.SEARCH, mdb.CREATE, ALPHA, m.Prefix(ALPHA))
}}, }},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() }}, ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save() }},
@ -80,7 +87,7 @@ var Index = &ice.Context{Name: ALPHA, Help: "英汉词典",
}}, }},
mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) { mdb.SEARCH: {Name: "search type name text", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
if arg[0] == ALPHA { if arg[0] == ALPHA {
_alpha_find(m, kit.Select("word", arg, 2), arg[1]) _alpha_find(m, kit.Select(WORD, arg, 2), arg[1])
} }
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {

View File

@ -21,10 +21,7 @@ import (
func _input_list(m *ice.Message, lib string) { func _input_list(m *ice.Message, lib string) {
if lib == "" { if lib == "" {
m.Richs(INPUT, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) { m.Richs(INPUT, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
m.Push(kit.MDB_TIME, kit.Value(value, "meta.time")) m.Push("", kit.GetMeta(value), kit.Split("time,zone,count,store"))
m.Push(kit.MDB_ZONE, kit.Value(value, "meta.zone"))
m.Push(kit.MDB_COUNT, kit.Value(value, "meta.count"))
m.Push(kit.MDB_STORE, kit.Value(value, "meta.store"))
}) })
return return
} }
@ -32,24 +29,24 @@ func _input_list(m *ice.Message, lib string) {
m.Option(nfs.DIR_DEEP, true) m.Option(nfs.DIR_DEEP, true)
m.Option(nfs.DIR_TYPE, nfs.CAT) m.Option(nfs.DIR_TYPE, nfs.CAT)
m.Richs(INPUT, "", lib, func(key string, value map[string]interface{}) { m.Richs(INPUT, "", lib, func(key string, value map[string]interface{}) {
m.Cmdy(nfs.DIR, kit.Value(value, "meta.store"), "time size line path") m.Cmdy(nfs.DIR, kit.Value(value, kit.Keym(kit.MDB_STORE)), "time size line path")
}) })
} }
func _input_push(m *ice.Message, lib, text, code, weight string) { func _input_push(m *ice.Message, lib, text, code, weight string) {
if m.Richs(INPUT, "", lib, nil) == nil { if m.Richs(INPUT, "", lib, nil) == nil {
m.Rich(INPUT, "", kit.Data( m.Rich(INPUT, "", kit.Data(
kit.MDB_STORE, path.Join(m.Conf(INPUT, "meta.store"), lib), kit.MDB_STORE, path.Join(m.Conf(INPUT, kit.Keym(kit.MDB_STORE)), lib),
kit.MDB_FSIZE, m.Conf(INPUT, "meta.fsize"), kit.MDB_FSIZE, m.Conf(INPUT, kit.Keym(kit.MDB_FSIZE)),
kit.MDB_LIMIT, m.Conf(INPUT, "meta.limit"), kit.MDB_LIMIT, m.Conf(INPUT, kit.Keym(kit.MDB_LIMIT)),
kit.MDB_LEAST, m.Conf(INPUT, "meta.least"), kit.MDB_LEAST, m.Conf(INPUT, kit.Keym(kit.MDB_LEAST)),
kit.MDB_ZONE, lib, kit.MDB_ZONE, lib,
)) ))
} }
m.Richs(INPUT, "", lib, func(key string, value map[string]interface{}) { m.Richs(INPUT, "", lib, func(key string, value map[string]interface{}) {
prefix := kit.Keys(kit.MDB_HASH, key) prefix := kit.Keys(kit.MDB_HASH, key)
m.Conf(INPUT, kit.Keys(prefix, "meta.limit"), 0) m.Conf(INPUT, kit.Keys(prefix, kit.Keym(kit.MDB_LIMIT)), 0)
m.Conf(INPUT, kit.Keys(prefix, "meta.least"), 0) m.Conf(INPUT, kit.Keys(prefix, kit.Keym(kit.MDB_LEAST)), 0)
n := m.Grow(INPUT, prefix, kit.Dict(TEXT, text, CODE, code, WEIGHT, weight)) n := m.Grow(INPUT, prefix, kit.Dict(TEXT, text, CODE, code, WEIGHT, weight))
m.Log_IMPORT(CODE, code, TEXT, text) m.Log_IMPORT(CODE, code, TEXT, text)
m.Echo("%s: %d", lib, n) m.Echo("%s: %d", lib, n)
@ -64,7 +61,7 @@ func _input_find(m *ice.Message, method, word, limit string) {
} }
// 搜索词汇 // 搜索词汇
res := m.Cmdx(cli.SYSTEM, "grep", "-rn", word, m.Conf(INPUT, "meta.store")) res := m.Cmdx(cli.SYSTEM, "grep", "-rn", word, m.Conf(INPUT, kit.Keym(kit.MDB_STORE)))
bio := csv.NewReader(bytes.NewBufferString(strings.Replace(res, ":", ",", -1))) bio := csv.NewReader(bytes.NewBufferString(strings.Replace(res, ":", ",", -1)))
for i := 0; i < kit.Int(limit); i++ { for i := 0; i < kit.Int(limit); i++ {
@ -81,13 +78,13 @@ func _input_find(m *ice.Message, method, word, limit string) {
m.Push(WEIGHT, line[6]) m.Push(WEIGHT, line[6])
} }
} }
m.Sort(WEIGHT, "int_r") m.SortIntR(WEIGHT)
} }
func _input_save(m *ice.Message, file string, lib ...string) { func _input_save(m *ice.Message, file string, lib ...string) {
if f, p, e := kit.Create(file); m.Assert(e) { if f, p, e := kit.Create(file); m.Assert(e) {
defer f.Close() defer f.Close()
n := 0 n := 0
m.Option("cache.limit", -2) m.Option(mdb.CACHE_LIMIT, -2)
for _, lib := range lib { for _, lib := range lib {
m.Richs(INPUT, "", lib, func(key string, value map[string]interface{}) { m.Richs(INPUT, "", lib, func(key string, value map[string]interface{}) {
m.Grows(INPUT, kit.Keys(kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) { m.Grows(INPUT, kit.Keys(kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) {
@ -108,12 +105,12 @@ func _input_load(m *ice.Message, file string, libs ...string) {
// 清空数据 // 清空数据
lib := kit.Select(path.Base(file), libs, 0) lib := kit.Select(path.Base(file), libs, 0)
m.Assert(os.RemoveAll(path.Join(m.Conf(INPUT, "meta.store"), lib))) m.Assert(os.RemoveAll(path.Join(m.Conf(INPUT, kit.Keym(kit.MDB_STORE)), lib)))
prefix := kit.Keys(kit.MDB_HASH, m.Rich(INPUT, "", kit.Data( prefix := kit.Keys(kit.MDB_HASH, m.Rich(INPUT, "", kit.Data(
kit.MDB_STORE, path.Join(m.Conf(INPUT, "meta.store"), lib), kit.MDB_STORE, path.Join(m.Conf(INPUT, kit.Keym(kit.MDB_STORE)), lib),
kit.MDB_FSIZE, m.Conf(INPUT, "meta.fsize"), kit.MDB_FSIZE, m.Conf(INPUT, kit.Keym(kit.MDB_FSIZE)),
kit.MDB_LIMIT, m.Conf(INPUT, "meta.limit"), kit.MDB_LIMIT, m.Conf(INPUT, kit.Keym(kit.MDB_LIMIT)),
kit.MDB_LEAST, m.Conf(INPUT, "meta.least"), kit.MDB_LEAST, m.Conf(INPUT, kit.Keym(kit.MDB_LEAST)),
kit.MDB_ZONE, lib, kit.MDB_ZONE, lib,
))) )))
@ -130,8 +127,8 @@ func _input_load(m *ice.Message, file string, libs ...string) {
} }
// 保存词库 // 保存词库
m.Conf(INPUT, kit.Keys(prefix, "meta.limit"), 0) m.Conf(INPUT, kit.Keys(prefix, kit.Keym(kit.MDB_LIMIT)), 0)
m.Conf(INPUT, kit.Keys(prefix, "meta.least"), 0) m.Conf(INPUT, kit.Keys(prefix, kit.Keym(kit.MDB_LEAST)), 0)
n := m.Grow(INPUT, prefix, kit.Dict(TEXT, "成功", CODE, "z", WEIGHT, "0")) n := m.Grow(INPUT, prefix, kit.Dict(TEXT, "成功", CODE, "z", WEIGHT, "0"))
m.Log_IMPORT(INPUT, lib, kit.MDB_COUNT, n) m.Log_IMPORT(INPUT, lib, kit.MDB_COUNT, n)
m.Echo("%s: %d", lib, n) m.Echo("%s: %d", lib, n)
@ -159,7 +156,7 @@ var Index = &ice.Context{Name: INPUT, Help: "输入法",
INPUT: {Name: INPUT, Help: "输入法", Value: kit.Data( INPUT: {Name: INPUT, Help: "输入法", Value: kit.Data(
kit.MDB_STORE, "usr/local/export/input", kit.MDB_FSIZE, "200000", kit.MDB_STORE, "usr/local/export/input", kit.MDB_FSIZE, "200000",
kit.MDB_LIMIT, "5000", kit.MDB_LEAST, "1000", kit.MDB_LIMIT, "5000", kit.MDB_LEAST, "1000",
kit.MDB_SHORT, "zone", "repos", "wubi-dict", kit.MDB_SHORT, "zone", kit.SSH_REPOS, "wubi-dict",
)}, )},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
@ -177,7 +174,7 @@ var Index = &ice.Context{Name: INPUT, Help: "输入法",
_input_load(m, kit.Select("usr/wubi-dict/person", m.Option(FILE)), m.Option(ZONE)) _input_load(m, kit.Select("usr/wubi-dict/person", m.Option(FILE)), m.Option(ZONE))
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
_input_find(m, arg[0], arg[1], m.Option("cache.limit")) _input_find(m, arg[0], arg[1], m.Option(mdb.CACHE_LIMIT))
}}, }},
}, },
} }