Obsidian随机生成读书笔记

现在阅读,以多看和微信读书为主,在阅读过程中会做笔记。已经把这些笔记都变为 Markdown 文件统一用 Obsidian 管理起来,希望可以把其中标记出需要复习的内容,每天随机生成,便于复习巩固。

Roam Research 有一个插件叫 Roam42,可以随机生成指定标签的笔记到新的笔记中,以便于复习。之前在推特上看 @Jiayuan 就是用这种方式管理笔记的,非常羡慕这个功能。

后来经过摸索,发现 Dataview 可以在 Obsidian 中使用 JS 实现所有自己想要的效果,包括随机生成笔记复习这件事。我写了一个代码片段,可以随机生成 3 个带 #Quote 标签的读书笔记段落。

具体代码块如下,term 表示标签名 #QuoteranNum 表示随机数 3,可以根据自己的需要修改。将以下内容粘贴至笔记中,预览。拖动 Banner 可以重新生成随机笔记。

```dataviewjs
//使用时修改关键词即可
const term = "#Quote"
const files = app.vault.getMarkdownFiles()
const arr = files.map(async ( file) => {
const content = await app.vault.cachedRead(file)
const lines = content.split("\n").filter(line => line.contains(term))
return lines
})

function generateArray (start, end) { return Array.from(new Array(end + 1).keys()).slice(start) }

Promise.all(arr).then(values => {
    //不包含本文件
    let noteArr = values.flat().filter(note => !note.includes("const term ="))
    //生成一个连续数值的数组
    let arrNum = generateArray(0,noteArr.length-1)
    let result = [ ]
    let ranNum = 3
    
    for (let i = 0; i < ranNum; i++) {
        var ran = Math.floor(Math.random() * (arrNum.length - i))
        result.push(arrNum[ran])
        arrNum[ran] = arrNum[arrNum.length - i - 1]
    }
    
    for(let i=0; i< result.length;i++){
        let j = result[i]
        dv.paragraph(`${noteArr[j]}`)
    }
})

其他更多更详细的功能可以看 Dataview 编写的教程

20 个赞

是读书笔记添加一个 #quote标签就可以了吗?

每天从所有带 #quote标签的笔记中,随机抽取3段,组合在一起,可以这样理解吗?

感觉很有用,感谢分享

是的,就是这个意思。

赞!!!

赞,我的读书笔记是在标题开头添加"R"的符号,现在想想还是用标签比较方便,我得把这些笔记转换成“#摘录”的标签去。

这个随机生成,是每次打开预览自动刷新呢,还是需要其他方式操作一下?

每次打开页面会刷新,或者你可以拖动banner图片也会刷新。

非常好用。

某些原因,我记录不少碎片知识和信息,这个方法可以对相应关键词字符进行随机整理聚合,更好的是可以随心控制展示的笔记条目数量。赞:+1:

之前用过两个方法,那是挑出关键字词所在库中笔记所有段落,会把它们全部展示出来:一个展示的阅读模式下的笔记内容,一个展示的编码模式下的笔记内容。

这个方法美足不足的是编码字符有点多,编辑模式下编码太长了,修改个关键字符要划拉一下,如果能少点就好了。进行移动、复制等需要组合展示生成笔记时,不太方便编辑模式操作。

天哪,我发的啥…

感谢,只是想说感谢分享!

:grimacing:好用就好,感谢支持。

感谢楼主这个分享,简直太赞了!还有问题想问下“拖动banner”具体是操作哪个按钮啊?我发现这两天无法随机了

不是某个按钮,鼠标直接上下拖动banner图片即可。刚试了一下,我自己的还是生效的。

感谢,那我再重开一个库试试,估计是有什么bug了

能随机显示指定符号间的句子么

可以的,标签的匹配,本质上是对带#字符串的匹配。

你好,我想知道这个能随机一张文件夹里的图片吗

这个每次加TASK都会再随机,有什么办法让它固定吗?

1 个赞

这个随机是每次刷新页面就会重新生成的,所以不会固定下来的。

这个理论上是可以的,不过要另外写dataview脚本了。

可以的,本质都是字符串匹配,这段代码片段支持的。