rime中州韵小狼毫 中英互绎 滤镜

英文在日常生活中已经随处可见,我们一般中英互译需要使用专业的翻译软件来实现。但如果我们在输入法中,在输入中文的时候,可以顺便瞟一眼对应的英文词汇,或者在输入英文的时候可以顺便了解对应的中文词汇,那将为我们的日常办公带来极大的便利。

我们在 rime中州韵小狼毫 easyEnglish 输入法 一文中为 rime中州韵小狼毫输入法配置了 easyEnglish 输入方案。本文就以 五笔・拼音 输入方案和 easyEnglish 输入方案为例,通过使用 rime中州韵小狼毫 输入法的滤镜功能,来实现中英互译的功能。

dic_4w_en.txt

为了英文向中文的映射,我们需要一个 dic_4w_en.txt 文档,这是一个"表",这个表记录着英文词汇向中文词汇的映射关系,截取显示如下👇:

aar	【Aar】n.阿尔河
aardvark	【aardvark】n.土豚;土猪
aardwolf	【aardwolf】n.土狼
aaron	【Aaron】n.艾伦
aaronic	【Aaronic】adj.亚伦的

dic_4w_en.txt文档中共有两列内容,第一列是英文单词,第二列是对应的中文释义,中间以tab制表符分隔。

原则上来说,第一列和第二列的长度是不限制的,但为了在输入法中显示不至于凌乱,第二列的释义内容不易过长。在下面的脚本中,第二列的长度会被限制在100字符内。

dic_4w_cn.txt

同样,为了中文向英文的映射,我们亦需要一个 dic_4w_cn.txt 文档来记录中文词汇向英文词汇的映射关系,截取显示如下👇:

阿尔河	aar(n.);
土豚	aardvark(n.);
土猪	aardvark(n.);
土狼	aardwolf(n.);
艾伦	aaron(n.);
亚伦	aaronic(adj.);

实际上,dic_4w_en.txt 文档和 dic_4w_cn.txt 文档是互反的。

dic_4w.lua

有了 dic_4w_en.txt 文档和 dic_4w_cn.txt 文档,还不能在输入法中使用,我们需要通过 dic_4w.lua 脚本将 dic_4w_en.txt 文档和 dic_4w_cn.txt 文档中的内容进行加载整理,以使其可以在 lua 程序中进行索引。

dic_4w.lua 脚本的内容如下👇:

-- dic_4w_en.lua
-- Copyright (C) 2023 yaoyuan.dou <douyaoyuan@126.com>
local ok, res = pcall(require, 'sysInfo')
local currentDir = res.currentDirlocal function files_to_lines(...)print("--->files_to_lines called here")local tab=setmetatable({},{__index=table})local index=1for i,filename in next,{...} dolocal fn = io.open(filename)if fn thenfor line in fn:lines() doif not line or #line > 0 thentab:insert(line)endendfn:close()endendprint("--->files_to_lines completed here")return tab
endlocal function dictload(...) -- filename)print("-->dictload called here")local lines=files_to_lines(...)local dict={}for i,line in next ,lines doif not line:match("^%s*#") then  -- 第一字 # 为注释行local key,val = string.match(line,"(.+)\t(.+)")if nil ~= key then--此处,相同的key,后加载的内容将覆盖前面加载的内容dict[key] = valendendendprint("-->dictload completed here")return dict
end--   Module
local M={}
local dict={}
local function getVal(s)return dict[s]
endfunction M.init(...)print("-> M.init called here")local files={...}--以下files文件的顺序,后面的内容优先级高于前面的,--即后面文件中同一key的value将覆盖前面文件内同一key的value--文件名不支持中文table.insert(files,"dic_4w_cn.txt")table.insert(files,"dic_4w_en.txt")for i,v in next, files dofiles[i] = currentDir().."/".. venddict= dictload(table.unpack(files))M.getVal=getValprint("->M.init completed here")
endM.init()return M

👆以上 lua 脚本中,我们把 dic_4w_en.txt 文档和 dic_4w_cn.txt 文档内的内容进行了根据 tab 制表符进行切割,第一列的内容为键,第二列的内容为值,最终将这些内容整理成了字典对象 dict,然后脚本提供了一个 getVal 方法,该方法以入参为键,尝试在 dict 字典中查找对应该键的值,并返回。如果查找不到这个键的值,则返回 nil

dic_4w_Filter.lua

dic_4w.lua 脚本将 dic_4w_en.txt 文档和 dic_4w_cn.txt 文档内的词条整理成了 lua 程序的字典对象 dict,并提供了查找的方法 getVal。接下来我们在 dic_4w_Filter.lua 脚本中将 dic_4w.lua 脚本提供的 getVal 方法封装成 rime 滤镜方法。

dic_4w_Filter.lua脚本内容如下👇:

-- spaceAppending.lua
-- Copyright (C) 2023 yaoyuan.dou <douyaoyuan@126.com>
local ok, res = pcall(require, 'dic_4w')
local getVal = res.getVallocal ok, utf8String = pcall(require, 'utf8String')--最长的comment长度限制
local maxLenOfComment = 100local function dic_4w_Filter(input, env)--获取中英对照开关状态local on = env.engine.context:get_option("encnDic")for cand in input:iter() doif on thenlocal candTxt = cand.text:gsub("%s","") or ""local thisComment = cand.commentif candTxt ~= "" then--获取字典释义thisComment = getVal(candTxt)if nil == thisComment thenthisComment = cand.commentelse--成功获取了释义,下面进行一些格式化处理--替换 <br> 为换行符thisComment = thisComment:gsub("<br>","\r")--替换 &nbsp 为空格thisComment = thisComment:gsub("&nbsp"," ")--需要限制释义长度为 maxLenOfCommentthisComment = string.sub(thisComment, 1, maxLenOfComment)--去除首尾空格 和 符号thisComment = utf8String.utf8PunctuationsTrim(thisComment)endif cand.comment ~= "" thenif thisComment ~= cand.comment thenif utf8.len(cand.comment) < 5 thenif '💡'==cand.comment thenthisComment = cand.comment..thisCommentelsethisComment = cand.comment..'✔'..thisCommentendelsethisComment = cand.comment..'\r'..thisCommentendendendendcand:get_genuine().comment = thisCommentendyield(cand)end
endreturn dic_4w_Filter

sysInfo.lua

在以上👆的 dic_4w.lua 脚本中, 我们发现其引用了一个 sysInfo 的外部脚本,如下👇:
20240103175732

sysInfo.lua 脚本文档提供了一些系统信息获取的方法,脚本内容如下👇:

local M={}
local dbgFlg = false--设置 dbg 开关
M.setDbg = function(flg)dbgFlg = flgprint('sysInfo dbgFlg is '..tostring(dbgFlg))
endM.homePath = function()return os.getenv("HOMEPATH")
endM.computerName = function()return os.getenv("COMPUTERNAME")
endM.userName = function()return os.getenv("USERNAME")
endM.osName = function()return os.getenv("OS")
endM.NUMBER_OF_PROCESSORS = function()return os.getenv("NUMBER_OF_PROCESSORS")
endM.PROCESSOR_IDENTIFIER = function()return os.getenv("PROCESSOR_IDENTIFIER")
endM.PROGRAMDATA = function()return os.getenv("PROGRAMDATA")
end
M.PROGRAMFILES = function()return os.getenv("PROGRAMW6432")
end
M.PROGRAMFILESx86 = function()return os.getenv("PROGRAMFILES(X86)")
end
M.APPDATA = function()return os.getenv("APPDATA")
end
M.WINDIR = function()return os.getenv("WINDIR")
end
M.COMMONPROGRAMFILES = function()return os.getenv("COMMONPROGRAMFILES")
end
M.COMMONPROGRAMFILESx86 = function()return os.getenv("COMMONPROGRAMFILES(x86)")
end
M.TEMP = function()local path = os.getenv("TEMP")if nil == path or '' == path thenpath = os.getenv("TMP")endreturn path
end
M.SYSTEMDRIVE = function()return os.getenv("SYSTEMDRIVE")
endM.currentDir = function()local info = debug.getinfo(2) --debug.getinfo(2), 2: 返回调用 currentDir 的函数的信息--解析info.source所在的路径local path = info.sourcepath = string.sub(path, 2, -1) -- 去掉开头的"@"path = string.gsub(path,'\\','/') -- 路径格式由 c:\\Users\\san.zhang\\ 转换为 c:/Users/san.zhang/path = string.match(path, "^(.*)/") -- 捕获最后一个 "/" 之前的部分 就是我们最终要的目录部分return path
endM.test = function(printPrefix)if nil == printPrefix thenprintPrefix = ' 'endif dbgFlg thenprint(printPrefix..'sysInfo test starting...')print(printPrefix, 'currentDir is:', M.currentDir())print(printPrefix, 'computerName is:', M.computerName())print(printPrefix, 'homePath is:', M.homePath())print(printPrefix, 'userName is:', M.userName())end
endreturn M

👆以上 sysInfo.lua 脚本中,我们可以看到其提供了很多的系统信息的获取方法,例如系统名称,系统路径,脚本工作路径等。这些基础的信息,在将来的其它 lua 脚本中还会继续用到。

utf8String.lua

在以上👆的 utf8String.lua 脚本中, 我们发现其引用了一个 utf8String 的外部脚本,如下👇:
20240103180832

utf8String.lua 脚本文档提供了一些utf-8字符串处理的方法,脚本内容如下👇:

--utf8String.lua
--这个模块主要用于处理一些utf8字符串相关的操作-- 定义一个全局变量,用于记录一个随机数种子
randomseed = os.time()local M={}
local dbgFlg = false--左侧标点,例如左侧括号,左侧引号等,以及单符号标点也被识为左侧标点,例如 | , 等
local punctuationsAtLeft = {[','] = true,[','] = true,['。'] = true, ['.'] = true,[';'] = true,[';'] = true,['、'] = true,['\\'] = true,['?'] = true,['?'] = true,['!'] = true,['!'] = true,['@'] = true,['@'] = true,['&'] = true,['&'] = true,['/'] = true,['…'] = true,[' '] = true,['('] = true,['('] = true,['‘'] = true,['“'] = true,['['] = true,['['] = true,['【'] = true,['<'] = true,['《'] = true,['〈'] = true}--右侧标点,例如右侧括号,右侧绰号等,以及单符号标点也被识别为右侧标点,例如 | , 等
local punctuationsAtRight = {[','] = true,[','] = true,['。'] = true, ['.'] = true,[';'] = true,[';'] = true,['、'] = true,['\\'] = true,['?'] = true,['?'] = true,['!'] = true,['!'] = true,['@'] = true,['@'] = true,['&'] = true,['&'] = true,['/'] = true,['…'] = true,[' '] = true,[')'] = true,[')'] = true,['’'] = true,['”'] = true,[']'] = true,[']'] = true,['】'] = true,['>'] = true,['》'] = true,['〉'] = true}local lettersForPwd = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"~", "!", "@", "#", "$", "%", "^", "&", "*", "-", "=", "+"}--设置 dbg 开关
local function setDbg(flg)dbgFlg = flgprint('utf8String dbgFlg is '..tostring(dbgFlg))
end--判断给定的一个字符头,实际占用的字节数
local function chsize(char)if not char thenreturn 0elseif char > 240 thenreturn 4elseif char > 225 thenreturn 3elseif char > 192 thenreturn 2elsereturn 1end
end--判断给定的一个字符串的实际字符长度
local function utf8Len(str)local len = 0local currentIndex = 1while currentIndex <= #str dolocal char = string.byte(str,currentIndex)currentIndex = currentIndex + chsize(char)len = len + 1endreturn len
end--根据给定的字符串,和指定的起始位置和字符数,截取子串
local function utf8Sub(str,startChar,numChars)local startIndex = 1while startChar > 1 dolocal char = string.byte(str,startIndex)startIndex = startIndex + chsize(char)startChar = startChar - 1endlocal currentIndex = startIndexwhile numChars > 0 and currentIndex <= #str dolocal char = string.byte(str,currentIndex)currentIndex = currentIndex + chsize(char)numChars = numChars - 1endreturn str:sub(startIndex,currentIndex - 1)
end--根据给定的字符串,去除其头尾的空白符
local function utf8Trim(str)str = str or ''local cnt = 0local subChar = utf8Sub(str,1,1)--去除其头部的 空白while subChar:match("%s") dostr = utf8Sub(str,2,utf8Len(str)-1)subChar = utf8Sub(str,1,1)cnt = cnt + 1end--去除其尾部的 空白subChar = utf8Sub(str,utf8Len(str),1)while subChar:match("%s") dostr = utf8Sub(str,1,utf8Len(str)-1)subChar = utf8Sub(str,utf8Len(str),1)cnt = cnt + 1endreturn str,cnt
end--根据给定的字符串,去除其头尾部的 符号 字符
local function utf8PunctuationsGo(str)str = str or ''local cnt = 0local subChar = utf8Sub(str,1,1)--去除其头部的 右侧 标点while punctuationsAtRight[subChar] dostr = utf8Sub(str,2,utf8Len(str)-1)subChar = utf8Sub(str,1,1)cnt = cnt + 1end--去除其尾部的 左侧 标点subChar = utf8Sub(str,utf8Len(str),1)while punctuationsAtLeft[subChar] dostr = utf8Sub(str,1,utf8Len(str)-1)subChar = utf8Sub(str,utf8Len(str),1)cnt = cnt + 1endreturn str,cnt
end--根据给定的字符串,去除其头尾部的 符号 和 空白
local function utf8PunctuationsTrim(str)str = str or ''local cnt = 0local subChar = utf8Sub(str,1,1)--去除其头部的 右侧 标点while punctuationsAtRight[subChar] dostr = utf8Sub(str,2,utf8Len(str)-1)subChar = utf8Sub(str,1,1)cnt = cnt + 1end--去除其尾部的 左侧 标点subChar = utf8Sub(str,utf8Len(str),1)while punctuationsAtLeft[subChar] dostr = utf8Sub(str,1,utf8Len(str)-1)subChar = utf8Sub(str,utf8Len(str),1)cnt = cnt + 1endreturn str,cnt
end--生成一个指定长度的随机密码
function newPwd(len, easyRead)len = len or 8easyRead = easyRead or truelocal pwd = ''local tmpChar = ''local cntForOptions = #lettersForPwd-- 初始化随机数种子math.randomseed(randomseed)repeat-- 重置随机数种子randomseed = math.random(0, 100000000)--随机挑选一个字符tmpChar = lettersForPwd[math.random(cntForOptions)]if easyRead then--如果要求易读,则禁用 1,l,o,O,0 这些字符if not ({['1']=true, ['l']=true, ['o']=true, ['O']=true, ['0']=true})[tmpChar] thenpwd = pwd .. tmpCharendelsepwd = pwd .. tmpCharenduntil (#pwd >= len)return pwd
end--这是用于测试的函数
local function test(printPrefix)if nil == printPrefix thenprintPrefix = ' 'endif dbgFlg thenprint(printPrefix,'utf8StringModule test starting...')print(printPrefix,utf8Len("好好学习5天天向上"))print(printPrefix,utf8Sub("好好学习5天天向上",5,2))end
end--Module
function M.init(...)M.utf8Sub = utf8SubM.utf8Len = utf8LenM.utf8Trim = utf8TrimM.utf8PunctuationsGo = utf8PunctuationsGoM.utf8PunctuationsTrim = utf8PunctuationsTrimM.newPwd = newPwdM.setDbg = setDbgM.test = test
endM.init()return M

👆以上脚本中, 我们可以看到 utf8String.lua 提供了丰富的基础字符串处理和生成方法,这些方法在将来的 rime 配置脚本中,还将会引用。

dic_4w_en.txt 文档、dic_4w_cn.txt 文档、dic_4w.lua 文档、dic_4w_Filter.lua 文档、sysInfo.lua 文档和 utf8String.lua 文档,都应该位于 用户文件夹 下的 lua 文件夹内,如下👇:
20240103181535

rime.lua

以上 dic_4w_Filter.lua 脚本中所定义的 dic_4w_Filter 滤镜方法,需要在 rime.lua 中映射为 dic_4w_Filter 滤镜接口,以便在配置文档中引用该接口。 rime.lua 中增加如下👇配置:

dic_4w_Filter = require("dic_4w_Filter")

保存你的 rime.lua 文档,请注意 rime.lua 文档的位置

easy_en.custom.yaml & wubi_pinyin.custom.yaml

接下来,我们需要在输入方案的补丁文档中配置引用 dic_4w_Filter 滤镜了。不过在此之前,我们需要注意到一个状态开关。

如果你仔细阅读了上面的代码,你应该会在 dic_4w_Filter.lua 脚本中注意到以下脚本内容:
20240103184345
这里脚本获取了一个系统的选项开关,这个开头决定了脚本是否继续运行 dic_4w_Filter 滤镜的功能逻辑。所以我们需要在输入方案的配置文档中配置一个 encnDic 的开关。我们在 easy_en.custom.yamlwubi_pinyin.custom.yaml 文档中增加以下配置以增加 encnDic 开关:

patch:switches/+: #增加以下开关- name: encnDic					# 中英字典开关reset: 1states: [Off, 中英对照]

有了开关以后,我们需要将 dic_4w_Filter 滤镜配置到输入方案中,我们在 easy_en.custom.yamlwubi_pinyin.custom.yaml 文档中增加以下配置以引用 dic_4w_Filter 滤镜:

patch:engine/filters/+:- lua_filter@dic_4w_Filter						# 英中对照滤镜

配置文档

👆以上所涉的配置文档,你可以在 rime中州韵小狼毫 中英互译滤镜 下载取用。

效果欣赏

当我们完成以上配置后,我们需要 重新配置 rime中州韵小狼毫输入方法,然后我们就可以在 五笔・拼音 输入方案中看到英文翻译,如下👇:
20240103155835
easyEnglish 输入方案中看到中文翻译,如下👇:
20240103160214

小结

文章分享介绍了在 rime中州韵小狼毫输入法中定义并配置实现中英互译滤镜的方法,共涉及脚本及字典文档9个,实现滤镜定义1个,配置输入方案2个,总体现实了既定的功能效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/609142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux网络配置

一、查看Linux基础得网络设置 1.网关——route -n 2.IP地址——ifconfig 或 ip a ethtool -p ens33 让ens33网卡快速闪烁&#xff0c;分辨网线对应哪个网卡 3.DNS服务器——cat /etc/resolv.conf 4.主机名——hostname 5.路由——route 6.网络连接状态——ss 或 net…

【Java并发】聊聊concurrentHashMap的put核心流程

结构介绍 1.8中concurrentHashMap采用数组链表红黑树的方式存储&#xff0c;并且采用CASSYN的方式。在1.7中主要采用的是数组链表&#xff0c;segment分段锁reentrantlock。本篇主要在1.8基础上介绍下. 那么&#xff0c;我们的主要重点是分析什么呢&#xff0c;其实主要就是p…

银联扫码第三方支付接口申请:开启便捷支付新时代

随着移动支付的普及&#xff0c;越来越多的商家开始接受微信、支付宝等第三方支付平台的付款方式。然而&#xff0c;作为国内最大的银行卡组织&#xff0c;银联也在不断拓展其业务范围&#xff0c;推出了自己的扫码支付接口。本文将为您详细介绍银联扫码第三方支付接口的申请流…

GO语言笔记3-指针

指针的概念 先看一段代码的输出 package main import "fmt" func main(){ var age int 18fmt.Println("age的内存地址值是:",&age)//age的内存地址值是: 0xc000012090// 定义一个指针变量// *int 是一个指针类型&#xff0c;可以理解为指向int类型的…

两个视频怎么合并成一个视频?教你合并视频

两个视频怎么合并成一个视频&#xff1f;如果你是一名视频爱好者&#xff0c;或者是一名自媒体创作者&#xff0c;那么你一定遇到过需要将两个视频合并为一个的情况。有时候&#xff0c;你可能需要将一个长视频切割成多个片段&#xff0c;或者将多个视频片段合并成一个完整的视…

Spring MVC的RequestMapping注解、controller方法返回值

1.使用说明 作用&#xff1a;用于建立请求URL和处理请求方法之间的对应关系。 出现位置&#xff1a; 类上&#xff1a; 请求 URL的第一级访问目录。此处不写的话&#xff0c;就相当于应用的根目录。写的话需要以/开头。它出现的目的是为了使我们的 URL 可以按照模块化管理&…

我的1827创作纪念日

机缘 习惯性早上打开电脑&#xff0c;看看CSDN上的资讯&#xff0c;了解行业动态、当前新的技术和大佬的分享。自己动手写应该是2019 年 01 月 08 日&#xff0c;当时应该是在用安装和使用Oracle&#xff0c;遇到一些问题&#xff0c;写下第一篇博客 Oracle存储过程常见问题及…

一、Mybatis 简介

本章概要 简介持久层框架对比快速入门&#xff08;基于Mybatis3方式&#xff09; 1.1 简介 https://mybatis.org/mybatis-3/zh/index.html MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投G…

【解决方案】 无法将“pip“项识别为 cmdlet、函数、脚本文件

在当今的软件开发和运维领域&#xff0c;Python已经成为了一个不可或缺的工具。而pip&#xff0c;作为Python的包管理工具&#xff0c;更是Python生态系统中不可或缺的一部分。然而&#xff0c;有时候我们可能会遇到一个令人困扰的问题&#xff1a;无法将“pip”项识别为cmdlet…

zookeeper 与eureka区别

CAP定理 在分布式系统的发展中&#xff0c;影响最大的莫过于CAP定理了&#xff0c;是分布式系统发展的理论基石。 2000年&#xff0c;加州大学的计算机科学家 Eric Brewer提出了CAP猜想 2002 年&#xff0c;麻省理工学院的 Seth Gilbert 和 Nancy Lynch 从理论上证明了 CAP 猜…

c++实现支持动态扩容的栈(stack)

1.在栈容量满时自动扩容: 支持自动扩容栈实现: // // myStack.hpp // algo_demo // // Created by Hacker X on 2024/1/9. //#ifndef myStack_hpp #define myStack_hpp #include <stdio.h> #include <string.h> //栈实现 //1.入栈 //2.出栈 //3.空栈 //4.满栈 …

栈的模拟实现

栈的模拟实现 一:什么是栈二:IStack 接口三:MyStack类:1:push(int x):2:pop()3:peek()4:size(),empty(),full() 三:四:栈的时间复杂度: 一:什么是栈 栈是以先进后出(后进先出)的形式来组织数据结构 比如: 先装入的子弹后射出,后装入的子弹先射出,这就是一种典型的栈. 二:ISta…

扩展欧几里得算法总结

知识概览 裴蜀定理&#xff1a;对于任意正整数a&#xff0c;b&#xff0c;一定存在非零整数x&#xff0c;y&#xff0c;使得 而且(a, b)是a和b能凑出来的最小的正整数。 通过扩展欧几里得算法可以求得裴蜀定理中x和y的值&#xff0c;x和y的通解为 &#xff0c; 例题展示 扩展欧…

ChatGPT扩展系列之网易数帆ChatBI

在当今数字化快速发展的时代,数据已经成为业务经营与管理决策的核心驱要素。无论是跨国大企业还是新兴创业公司,正确、迅速地洞察数据已经变得至关重要。然而,传统的BI工具往往对用户有一定的技术门槛,需要熟练的操作技能和复杂的查询语句,这使得大部分的企业员工难以深入…

2023,半路转行程序员的第一年

键盘敲着总结&#xff0c;抬头看桌面的日期&#xff0c;转眼间来到了 2024 年&#xff0c;时间就这么悄悄的流逝。本来想 12 月底就把总结给写完的&#xff0c;结果一拖&#xff0c;拖到了 2024&#x1f602;。 我本科专业是材料&#xff0c;当时属于生环化材“天坑”专业&…

QT DAY1作业

1.QQ登录界面 头文件代码 #ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget> #include <QIcon> #include <QLabel> #include <QPushButton> #include <QMovie> #include <QLineEdit>class MyWidget : public QWidget {Q_OBJECTpu…

nn网络层-卷积层

一、1d/2d/3d Convolution 卷积运算&#xff1a;卷积核在输入信号&#xff08;图像&#xff09;上滑动&#xff0c;相应位置上进行乘加卷积核&#xff1a;又称为滤波器&#xff0c;过滤器&#xff0c;可认为是某种模式&#xff0c;某种特征。卷积过程类似于用一个模版去图像上…

将Llama2上下文长度扩展100倍;效率更高的SeTformer;LLM准确度基本不变加速1.56×;FreeTalker

本文首发于公众号&#xff1a;机器感知 将Llama2上下文长度扩展100倍&#xff1b;效率更高的SeTformer&#xff1b;LLM准确度基本不变加速1.56&#xff1b;FreeTalker Latte: Latent Diffusion Transformer for Video Generation 本文使用Latent Diffusion Transformer(Latte…

JS入门笔记整理:函数

函数一般用来实现某种重复使用的功能&#xff0c;在需要使用该功能的时候&#xff0c;直接调用函数就可以了&#xff0c;不需要再重复地编写一大堆代码。并且在需要修改该函数功能的时候&#xff0c;也只需要修改和维护这一个函数就行。函数一般会在两种情况下使用&#xff1a;…

Git(1):Git概述

1 开发中的实际场景 场景一&#xff1a;备份 小明负责的模块就要完成了&#xff0c;就在即将Release之前的一瞬间&#xff0c;电脑突然蓝屏&#xff0c;硬盘光荣牺牲&#xff01;几个月来的努力付之东流 场景二&#xff1a;代码还原 这个项目中需要一个很复杂的功能&#x…