思源的剪藏非常好用,经常保存一些英文文章下来看。但是对于生词只能进行标注,而不能有一个集中的位置进行复习。
我尝试过将生词所在的块引用,全部集中在一个文档块里。这非常耗时间,而且不美观,也不能与间隔重复进行配合。
各位大佬有没有什么解决方法或思路?
思源的剪藏非常好用,经常保存一些英文文章下来看。但是对于生词只能进行标注,而不能有一个集中的位置进行复习。
我尝试过将生词所在的块引用,全部集中在一个文档块里。这非常耗时间,而且不美观,也不能与间隔重复进行配合。
各位大佬有没有什么解决方法或思路?
我希望能够记录单词,然后对释义制卡。
但是如果能将记录的文章和生词本结合在一起就非常方便了。
我是这么用的:
1.一个段落制一张卡;
2.用“备注”功能给生词标注释;
3.闪卡复习,评分,等待下次一复习即可。
特点:
1.形式上不是“正面单词,背面释义”,但都能实现“看单词想释义”的目的。
2.一次复习“一捆”单词,而不是完全孤立的单词。
自己用下来效果良好,这种按段落复习单词,不会丢失单词原有的使用语境。
对于生词只能进行标注,而不能有一个集中的位置进行复习。
答:生词本可以通过文档树构建(思源的闪卡机制:复习父文档,将包含子文档的闪卡)。
举例,上图”历年真题“为父文档,对其选择”重复间隔“,将复习包含子文档的所有闪卡,从而实现生词本(集中复习)的功能。
根据文档树的特性,理论上这种生词本可以无限套娃,其实更加灵活,供参考~
主要功能是通过 sql 查询挂件来实现的,相关的 sql 如下,因为我这个是韩语的生词本,所以针对韩语词尾变形作了优化,英语、其它语言的话,相应修改就行。
WITH RECURSIVE
hanyi_blocks(id, parent_id, root_id, content, type, subtype, level) AS (
SELECT id, parent_id, root_id, content, type, subtype, 0
FROM blocks
WHERE type = 'h' AND content = '汉义' AND subtype = 'h3'
UNION ALL
SELECT b.id, b.parent_id, b.root_id, b.content, b.type, b.subtype, hb.level + 1
FROM blocks b
JOIN hanyi_blocks hb ON b.parent_id = hb.id
WHERE hb.level < 5 -- 限制递归深度,防止查询过大
),
ciyuan_blocks(id, parent_id, root_id, content, type, subtype, level) AS (
SELECT id, parent_id, root_id, content, type, subtype, 0
FROM blocks
WHERE type = 'h' AND content = '词源' AND subtype = 'h3'
UNION ALL
SELECT b.id, b.parent_id, b.root_id, b.content, b.type, b.subtype, hb.level + 1
FROM blocks b
JOIN ciyuan_blocks hb ON b.parent_id = hb.id
WHERE hb.level < 5 -- 限制递归深度,防止查询过大
)
SELECT
'[' || b.content || '](siyuan://blocks/' || b.id || ')' AS __1____pre__单词,
(
SELECT GROUP_CONCAT(cb.content, '
')
FROM hanyi_blocks cb
WHERE cb.root_id = b.id AND cb.type = 'p' -- 只选择段落类型的块
ORDER BY cb.id
) AS __2____pre__汉义,
(
SELECT GROUP_CONCAT(cb.content, '
')
FROM ciyuan_blocks cb
WHERE cb.root_id = b.id AND cb.type = 'p' -- 只选择段落类型的块
ORDER BY cb.id
) AS __3____pre__词源,
b.created AS __4____date__创建日期
FROM
blocks AS b
WHERE
b.type = 'd'
AND b.content REGEXP '^[\x{AC00}-\x{D7AF}\s]+$' -- 筛选文档标题为纯韩语字符(允许空格)
AND EXISTS (
SELECT 1
FROM blocks hb
WHERE hb.parent_id = b.id AND hb.type = 'h' AND hb.subtype = 'h3' AND hb.content = '汉义'
)
ORDER BY
b.created DESC
LIMIT 1000
WITH RECURSIVE
current_document AS (
SELECT
content AS title,
CASE
WHEN content LIKE '%다' THEN substr(content, 1, length(content) - 1)
ELSE content
END AS root
FROM blocks
WHERE id = '.root{.id}' -- 获取当前文档的ID
),
vowel_changes(from_vowel, to_vowel) AS (
SELECT '이', '여' UNION ALL
SELECT '으', '어' UNION ALL
SELECT '아', '어' UNION ALL
SELECT '오', '와' UNION ALL
SELECT '우', '워' UNION ALL
SELECT '이', '에' UNION ALL
SELECT '지', '져' UNION ALL
SELECT '치', '쳐' UNION ALL
SELECT '비', '벼' UNION ALL
SELECT '피', '펴' UNION ALL
SELECT '기', '겨' UNION ALL
SELECT '키', '켜' UNION ALL
SELECT '시', '셔' UNION ALL
SELECT '디', '뎌' UNION ALL
SELECT '티', '텨' UNION ALL
SELECT '히', '혀' UNION ALL
SELECT '미', '며' UNION ALL
SELECT '니', '녀' UNION ALL
SELECT '리', '려'
),
possible_changes(original, changed, level) AS (
SELECT root, root, 0
FROM current_document
UNION ALL
SELECT
pc.original,
substr(pc.changed, 1, instr(pc.changed, vc.from_vowel) - 1) ||
vc.to_vowel ||
substr(pc.changed, instr(pc.changed, vc.from_vowel) + length(vc.from_vowel)),
pc.level + 1
FROM possible_changes pc
JOIN vowel_changes vc
WHERE pc.changed LIKE '%' || vc.from_vowel || '%'
AND pc.level < 2 -- 限制递归深度
)
SELECT DISTINCT
'[' || replace(b.content, pc.changed, '==' || pc.changed || '==') || '](siyuan://blocks/' || b.id || ')' AS __1____pre__例句,
b.hpath AS __2__文档路径,
cd.title AS __3__搜索词,
pc.changed AS __4__匹配形式
FROM
blocks AS b,
current_document cd,
possible_changes pc
WHERE
b.type = 'p'
AND b.hpath LIKE '%韩语%'
AND (
b.content LIKE '%' || pc.changed || '%'
OR b.content LIKE '%' || pc.changed || '다%'
OR b.content LIKE '%' || pc.changed || '어%'
OR b.content LIKE '%' || pc.changed || '아%'
OR b.content LIKE '%' || pc.changed || '여%'
OR b.content LIKE '%' || pc.changed || '야%'
)
AND b.root_id != '.root{.id}' -- 排除当前文档
GROUP BY b.id
ORDER BY
b.path
LIMIT 30
我希望能够记录单词,然后对释义制卡。
但是如果能将记录的文章和生词本结合在一起就非常方便了。
我是这么用的:
1.一个段落制一张卡;
2.用“备注”功能给生词标注释;
3.闪卡复习,评分,等待下次一复习即可。
特点:
1.形式上不是“正面单词,背面释义”,但都能实现“看单词想释义”的目的。
2.一次复习“一捆”单词,而不是完全孤立的单词。
自己用下来效果良好,这种按段落复习单词,不会丢失单词原有的使用语境。
对于生词只能进行标注,而不能有一个集中的位置进行复习。
答:生词本可以通过文档树构建(思源的闪卡机制:复习父文档,将包含子文档的闪卡)。
举例,上图”历年真题“为父文档,对其选择”重复间隔“,将复习包含子文档的所有闪卡,从而实现生词本(集中复习)的功能。
根据文档树的特性,理论上这种生词本可以无限套娃,其实更加灵活,供参考~
jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。
1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。
gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。
星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网
Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。
单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。
我来 wolai:不仅仅是未来的云端笔记!
Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。
RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。
C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。
你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!
OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。
Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。
Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。
安全永远都不是一个小问题。
MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。
Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。
GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。
JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。
RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
Postman 是一款简单好用的 HTTP API 调试工具。
FreeMarker 是一款好用且功能强大的 Java 模版引擎。