-- 日期时间 -- 提高权重的原因:因为在方案中设置了大于 1 的 initial_quality,导致 rq sj xq dt ts 产出的候选项在所有词语的最后。 local function date_translator(input, seg, env) if not env.date then local config = env.engine.schema.config env.name_space = env.name_space:gsub("^*", "") env.date = config:get_string(env.name_space .. "/date") or "rq" env.time = config:get_string(env.name_space .. "/time") or "sj" env.week = config:get_string(env.name_space .. "/week") or "xq" env.datetime = config:get_string(env.name_space .. "/datetime") or "dt" env.timestamp = config:get_string(env.name_space .. "/timestamp") or "ts" end -- 日期 if (input == env.date) then local cand = Candidate("date", seg.start, seg._end, os.date("%Y-%m-%d"), "") cand.quality = 100 yield(cand) local cand = Candidate("date", seg.start, seg._end, os.date("%Y/%m/%d"), "") cand.quality = 100 yield(cand) local cand = Candidate("date", seg.start, seg._end, os.date("%Y.%m.%d"), "") cand.quality = 100 yield(cand) local cand = Candidate("date", seg.start, seg._end, os.date("%Y 年 " .. tostring(tonumber(os.date("%m"))) .. " 月 " .. tostring(tonumber(os.date("%m"))) .. " 日"), "") cand.quality = 100 yield(cand) end -- 时间 if (input == env.time) then local cand = Candidate("time", seg.start, seg._end, os.date("%H:%M"), "") cand.quality = 100 yield(cand) local cand = Candidate("time", seg.start, seg._end, os.date("%H:%M:%S"), "") cand.quality = 100 yield(cand) end -- 星期 if (input == env.week) then local weakTab = {'日', '一', '二', '三', '四', '五', '六'} local cand = Candidate("week", seg.start, seg._end, "星期" .. weakTab[tonumber(os.date("%w") + 1)], "") cand.quality = 100 yield(cand) local cand = Candidate("week", seg.start, seg._end, "礼拜" .. weakTab[tonumber(os.date("%w") + 1)], "") cand.quality = 100 yield(cand) local cand = Candidate("week", seg.start, seg._end, "周" .. weakTab[tonumber(os.date("%w") + 1)], "") cand.quality = 100 yield(cand) end -- ISO 8601/RFC 3339 的时间格式 (固定东八区)(示例 2022-01-07T20:42:51+08:00) if (input == env.datetime) then local cand = Candidate("datetime", seg.start, seg._end, os.date("%Y-%m-%dT%H:%M:%S+08:00"), "") cand.quality = 100 yield(cand) local cand = Candidate("time", seg.start, seg._end, os.date("%Y%m%d%H%M%S"), "") cand.quality = 100 yield(cand) end -- 时间戳(十位数,到秒,示例 1650861664) if (input == env.timestamp) then local cand = Candidate("datetime", seg.start, seg._end, os.time(), "") cand.quality = 100 yield(cand) end -- -- 显示内存 -- local cand = Candidate("date", seg.start, seg._end, ("%.f"):format(collectgarbage('count')), "") -- cand.quality = 100 -- yield(cand) -- if input == "xxx" then -- collectgarbage() -- local cand = Candidate("date", seg.start, seg._end, "collectgarbage()", "") -- cand.quality = 100 -- yield(cand) -- end end return date_translator