大数跨境
0
0

《构建个人知识图谱》019:集成 Obsidian

《构建个人知识图谱》019:集成 Obsidian 数翼
2024-11-20
0
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查看需求:
大家可以去试下。

引用链接

[1] obsidiantools: https://github.com/mfarragher/obsidiantools
[2] py-obsidianmd: https://github.com/selimrbd/py-obsidianmd


【声明】内容源于网络
0
0
数翼
专注 AIGC 人工智能知识传播和实践
内容 228
粉丝 0
数翼 专注 AIGC 人工智能知识传播和实践
总阅读61
粉丝0
内容228