refactor date_translator

This commit is contained in:
Dvel 2023-06-14 20:03:13 +08:00
parent 67709ee7cf
commit 7a998551e0

View File

@ -1,29 +1,10 @@
-- 日期时间 -- 日期时间
-- 提高权重的原因:因为在方案中设置了大于 1 的 initial_quality导致 rq sj xq dt ts 产出的候选项在所有词语的最后。 -- 提高权重的原因:因为在方案中设置了大于 1 的 initial_quality导致 rq sj xq dt ts 产出的候选项在所有词语的最后。
local formats = { local function yield_cand(seg, text)
date = { local cand = Candidate('date', seg.start, seg._end, text, '')
'%Y-%m-%d', cand.quality = 100
'%Y/%m/%d', yield(cand)
'%Y.%m.%d', end
'%Y%m%d',
},
time = {
'%H:%M',
'%H:%M:%S'
},
datetime = {
'%Y-%m-%dT%H:%M:%S+08:00',
'%Y%m%d%H%M%S'
},
week = {
'星期%s',
'礼拜%s',
'周%s'
},
timestamp = {
'%d'
}
}
local function date_translator(input, seg, env) local function date_translator(input, seg, env)
if not env.date then if not env.date then
@ -36,47 +17,42 @@ local function date_translator(input, seg, env)
env.timestamp = config:get_string(env.name_space .. '/timestamp') or 'ts' env.timestamp = config:get_string(env.name_space .. '/timestamp') or 'ts'
end end
local current_time = os.time()
local yield_cand = function(type, text)
local cand = Candidate(type, seg.start, seg._end, text, '')
cand.quality = 100
yield(cand)
end
-- 日期 -- 日期
if (input == env.date) then if (input == env.date) then
for _, fmt in ipairs(formats.date) do local current_time = os.time()
yield_cand('date', os.date(fmt, current_time)) yield_cand(seg, os.date('%Y-%m-%d', current_time))
end yield_cand(seg, os.date('%Y/%m/%d', current_time))
yield_cand('date', os.date('%Y 年 %m 月 %d 日', current_time):gsub(' 0', ' ')) yield_cand(seg, os.date('%Y.%m.%d', current_time))
end yield_cand(seg, os.date('%Y%m%d', current_time))
yield_cand(seg, os.date('%Y 年 %m 月 %d 日', current_time):gsub(' 0', ' '))
-- 时间 -- 时间
if (input == env.time) then elseif (input == env.time) then
for _, fmt in ipairs(formats.time) do local current_time = os.time()
yield_cand('time', os.date(fmt, current_time)) yield_cand(seg, os.date('%H:%M', current_time))
end yield_cand(seg, os.date('%H:%M:%S', current_time))
end
-- 星期 -- 星期
if (input == env.week) then elseif (input == env.week) then
local week_tab = { '', '', '', '', '', '', '' } local current_time = os.time()
for _, fmt in ipairs(formats.week) do local week_tab = {'', '', '', '', '', '', ''}
local text = week_tab[tonumber(os.date('%w', current_time) + 1)] local text = week_tab[tonumber(os.date('%w', current_time) + 1)]
yield_cand('week', string.format(fmt, text)) yield_cand(seg, '星期' .. text)
end yield_cand(seg, '礼拜' .. text)
end yield_cand(seg, '' .. text)
-- ISO 8601/RFC 3339 的时间格式 (固定东八区)(示例 2022-01-07T20:42:51+08:00 -- ISO 8601/RFC 3339 的时间格式 (固定东八区)(示例 2022-01-07T20:42:51+08:00
if (input == env.datetime) then elseif (input == env.datetime) then
for _, fmt in ipairs(formats.datetime) do local current_time = os.time()
yield_cand('datetime', os.date(fmt, current_time)) yield_cand(seg, os.date('%Y-%m-%dT%H:%M:%S+08:00', current_time))
end yield_cand(seg, os.date('%Y%m%d%H%M%S', current_time))
end
-- 时间戳(十位数,到秒,示例 1650861664 -- 时间戳(十位数,到秒,示例 1650861664
if (input == env.timestamp) then elseif (input == env.timestamp) then
for _, fmt in ipairs(formats.timestamp) do local current_time = os.time()
yield_cand('timestamp', string.format(fmt, current_time)) yield_cand(seg, string.format('%d', current_time))
end
end end
-- -- 显示内存 -- -- 显示内存
-- local cand = Candidate("date", seg.start, seg._end, ("%.f"):format(collectgarbage('count')), "") -- local cand = Candidate("date", seg.start, seg._end, ("%.f"):format(collectgarbage('count')), "")
-- cand.quality = 100 -- cand.quality = 100
@ -89,4 +65,5 @@ local function date_translator(input, seg, env)
-- end -- end
end end
return date_translator return date_translator