Obsidian 作为客户端笔记工具,为很多人记录和学习提供了一个很好的平台。今天把数翼知识图谱工具和 Obsidian 结合起来,让知识变得更可用。
下面讲一下如何把 Obsidian 数据和 数翼知识图谱结合起来。
(相关演示视频放在了正文讲解的过程中。)
Obsidian 数据结构
集成 Obsidian 的核心思路是把 Obsidian 当成数据源提供给图谱作展示。
目录
Obsidian 使用树状结构组织笔记:
对应系统也是文件夹+文件的树形结构。
节点
很自然的,我们把每个笔记当成一个节点,笔记之间的链接当成关系连接。大概是这样:
我们这里把进和出的连接都考虑到(也就是常说的双向链接)。
标签(Tag)
接着,我们也把标签当成节点,标签和节点直接也形成了一个关系的连接,类似这样:
标签类型标签有元数据的标签、正文的标签两种,可以根据需要来选择是不是同时需要。
Obsidian 数据服务
基本的思路是读取 Obsidian Vault 中的数据,然后把它们转换成知识图谱的格式。
读取的最简单方案就是直接读取文件夹和文件,解析文件格式,然后提取其链接和标签等信息。
可以让 AI 帮我们写个程序来解析:
Python extra relations links and tags from obsidian note
import re
def extract_links_and_tags(note_content):
"""Extracts links and tags from Obsidian note content.
Args:
note_content: The content of the Obsidian note.
Returns:
A tuple of two lists: links and tags.
"""
links = re.findall(r"\[\[(.*?)\]\]", note_content)
tags = re.findall(r"#(.*?)(?=\s|$)", note_content)
return links, tags
# Example usage:
note_content = """
This is a sample Obsidian note.
Here's a link to another note: [[Linked Note]]
And here are some tags: #tag1 #tag2 #tag3
"""
links, tags = extract_links_and_tags(note_content)
print("Links:", links)
print("Tags:", tags)
另外,还有一些开源项目可以帮助我们来提取数据,比如:
• obsidiantools[1]
• py-obsidianmd[2]
最终的数据结构可以参考:
{
"nodes": [
{
"id": "LeaferUI",
"name": "LeaferUI",
"type": "node",
"tags": ["Prompt"]
},
...
],
"links": [
{
"source": "LeaferUI",
"target": "PromptStore",
"type": "node"
},
...
],
"tags": [
"Knowledge", "Prompt"
]
}
节点和边我都增加了类型node或tag,这样就可以在知识图谱中区分节点和标签。
比如在可视化的时候通过形状来区分节点和标签,节点的形状是圆,标签的形状是方形。
交互优化
图谱切换
现在图谱数据支持两种数据源,一种是我们常规的服务端数据、另一种是我们刚刚增加的 Obsidian 图谱数据。
直接把两个数据源的数据合并在一起,就可以实现图谱切换的功能,为了方便区分,我们再数据源前面增加一个图标来进行区分:
搜索
之前的搜索体验不好,我们增加一个搜索面板,可以参考各类网站的站内搜索功能:
点击搜索结果的节点名称,自动定位到对应的节点位置。
节点颜色
之前通过 UI 创建的节点,我们都可以在 UI 上设置颜色,或者使用自动化工具获取节点的 Logo,
并且提取 Logo 的主色作为节点的颜色。
对于 Obsidian 的节点,我们不变在 UI 中设置颜色, 但是可以同样使用 Logo 的主色作为节点的颜色,但是这样颜色随机性比较高,大规模图谱的时候对分析没有帮助。
这里我们使用节点的主标签(第一个标签 Tag)来进行分组,每个分组设置一种颜色。
这样数据分析的时候就比较有用:
或者这样:
对于图谱数据分析来说,一般情况下颜色自动生成,具有较高的辨识度即可,不需要为手动设置颜色。
标签过滤
当你节点达到一定数量的时候,我们会对图谱的一部分进行查看,这时候可以通过标签过滤来进行筛选。
我们在 UI 中增加一个标签过滤面板,展示图谱中所有的标签:
也可以选择需要的标签,只展示标签相关的节点:
大概操作如下:
固定节点
在数据分析的时候,有时候需要通过鼠标拖动固定一些节点,让分析更方便, 这个功能在初始的几个版本里面就存在,不过在节点多了之后就显得更有用。
简单看下视频操作:
Obsidian 插件我们知道,Obsidian 本身就有一个内置插件来实现知识图谱。
而且有两个 3D 图谱的社区插件,来满足简单的3D查看需求:
大家可以去试下。
引用链接
领取专属 10元无门槛券
私享最新 技术干货