EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
这是一个信息、知识爆炸的时代。所谓爆炸,既表现在其指数级增长的量上,也体现在其高度碎片化的展现形式上。 过去几年里,我一直在尝试构建一套属于自己的知识管理系统,并为此尝试了不少工具,学习了不少技术。举例如下: - 各种笔记软件: Evernote,有道云笔记,微软OneNote$ N, q% I( I8 @+ D. ~9 r
- 这些软件在信息搜集、信息检索、跨平台兼容等方面各有利弊,当初曾系统的学习过这些工具的使用技巧,并坚持过一段时间的信息搜集和整理,但在文章数达到几百篇后无法坚持下去,理由之后讲。, q' P# l0 F: w& g2 p; |
- 书签管理工具: 用于快速为浏览器书签加上tag,但当书签规模达到100的量级后,同样失效。
- 各种标记语言: Markdown, MultiMarkdown, reStructuredText: K* E r; ]# f, V
- 用于写Doc, 快速记事。简单而规范的语法方便使用脚本进行检索和格式化展现,但同样缺少系统的整理、索引方案。
/ k; Z1 w' V9 ]8 r5 o& L( }) u& a
- 手写资料的归档: A4纸+便携扫描仪,SuRFace pro
5 h: `& r5 X' T- A4纸笔记图片化进入文件系统,Surface pro 手写资料直接存入onenote。信息的搜集归档可以做到高效率,但是索引起来还是很麻烦。
7 B {% r9 f+ T. l9 N4 i# l
总之,几年过去,收集来的知识散落在各种工具、各种平台和各种设备上,经常出现『我之前专门查过这个东西,但我究竟把他放到哪了啊啊啊啊啊』的窘境。 这篇文章提出了符合我个人习惯的知识管理终极解决方案,并给我自己挖了个大坑,之后慢慢填。 ==========================失败案例分析=========================== 一个理想的个人知识管理体系应该包括三部分:收集、整理和检索,且这三个功能必须很好的结合在一起。仔细想想,之前那些知识体系的构建都是因为无法顺畅的实现这些功能而最终失败的。 笔记程序失败的例子: - 收集信息的过程中不能够很好的生成检索信息,之后无法有效的找到这些信息,更不要说去整理他们了。Onenote功能强大,使用多级树装结构组织笔记,但是他的搜索功能做的实在是差劲。随着笔记的增多,依照模糊的记忆从中找到特定的笔记基本变得不可能。这些笔记就像知识宇宙中的暗物质--占用了你的储存空间却无法为你所用。他们让你的知识仓库愈发的臃肿和混乱,让你无从下手去整理。当你的知识仓库被这种东西所主导的时候就是你放弃治疗的时候。我那些废弃的Onenote笔记本们就是这么来的。
- 网页信息获取:糟糕的体验。目前我所尝试过的笔记软件均无法很好的离线网页数据。有些制作精美的博客用文本离线下来后,排版、公式等一团糟,无法观看。用截屏的方式离线下来则直接放弃了全文索引的可能。对于这些网页,要花可观的时间对他们进行预处理才能纳入笔记,实在麻烦。
1 l" C9 D, ^: ?: }9 T h
书签管理程序失败的例子: - 标签爆炸,无力整理: Bookmark#是Chrome下一个收藏夹管理工具,他可让你为一个链接生成任意多tag,方便你之后的索引。但是随着收集网址的增多,你所创建的标签也在增加,你已经没有足够的耐心为新加入的网址正确的打上所有合适的标签。此插件的索引系统只能依靠标签,太过单一。最终的结果:python标签下有几百个网站,我无法找到去年的那篇技术博文。此插件废弃。 K' ~$ q+ `6 A
Accretion及其设计哲学Accretion(吸积), 天文学名字,指代由于引力相互作用,各种天体向自身聚积周围物质的现象。 Accretion是一个个人知识收集、整理、检索平台。主要包括三个部分。 - Fetcher: 通用型的爬虫框架,用于将各种网页(动态/静态, 须认证/无须认证)离线到本地,并附有一定的版本管理能力。
- Brainhole: web和数据库后端。
- Horizon: 前端页面,用于信息的检索与展示。
: C6 l% }$ }$ R4 G" Q; L' d
主要特性: - Django+vue实现,数据完全本地储存。在内网环境中可实现跨平台访问。
- 多种信息收集手段:电脑端可通过页面表单传递复杂的参数,实现复杂网页的提取。手机端可以通过微信/Telegram机器人,遥控服务端机器进行网页信息收集。
- 信息收集的过程中自动生成足够多的Meta信息,保证之后可以用多种方式找到此信息。
- 人性化的前端设计,顺畅的信息整理和检索体验。
+ k4 R Z1 u& A% v! ~0 Y5 O 具体设计方案资料收集界面: - 输入要收集的网页,Fetcher自动进行离线爬取。可以传入xPath和css selector参数,只提取有用的信息。可以提前为一些网页制作提取模板,比如知乎、xx论坛。模板可以实现复杂的提取逻辑,如解决认证问题、去除广告和无关信息、提取指定的信息作为Metadata等。
- 自动对提取页标题进行分词,分词结果作为文章tag(如何快速整理tag见下文)。自动记录网页head中的meta信息。尝试提取文章的发布时间,记录文章的收集时间。
- 对分类目录、标签、Metadata进行添加和修改时会有人性化的自动补全、自动搜索、自动联想功能,让你在短时间内为此信息增加足够多的索引信息,方便日后的整理。
- 整个收集过程耗时应控制在15s以内,在开发的时候会反复的进行试验,不断优化,实现高效率的收集工作。5 g% v1 u3 G0 h0 N% _
索引界面: - 这是系统的核心部分,它的好坏决定了你收集的信息能否最终为你所用。因此,前端部分取名为Horizon(视界)。
- 在介绍索引界面前,必须先介绍数据库结构,数据库主要表如下
- J" M J X) x* {- Article: 储存文章类的信息,后期可以添加Url,File,Snippets字段,他们与Article拥有类似的结构,只不过更为精简一些。4 i5 D+ `/ e& J5 k/ A; U, f* U/ o
- 基本字段: 添加时间,修改时间,Url,内容,备注等文章基本信息和通用Meta信息
- 关系字段: fathers, children, relation. 记录文章之间的父子关系和其他关系
- 标签: tags. 文章可拥有任意多的标签
- 分类目录: catalogues. 文章可属于任意多的分类目录
- Metadata: 文章可拥有任意多、任意类型的Metadata信息,作为辅助分类和索引的信息
3 D7 b6 y) D/ G" U
- Catalogues: 储存分类目录信息! N1 |- y$ v7 R4 k
- 基本字段: 名称,添加时间,备注等
- 关系字段:father, children, relation. 分类目录只可以有一个父目录。
- Metadata: 分类目录也可以添加任意多,任意类型的Metadata信息
9 f, U' u* ?% I/ z' a h3 M
- Tags: 储存标签信息' i; h( ` I: G$ C6 s
- 基本字段: 名称,添加时间,备注等
- 关系字段:father, children, relation. 标签可以拥有多个父标签。标签之间可设置关系,如同义词(知乎<==>逼乎),翻译(Accretion<==>吸积)等,这样一来,手动添加有限的标签后即可通过联想自动导出相关的标签。
- Metadata: 标签也可以添加任意多,任意类型的Metadata信息1 \: F7 U: q5 i' y4 z
- 索引界面设计哲学: 通过丰富的自动补全、联想和预查询告诉用户,你可以搜索什么,你可以用那些逻辑进行搜索和你应该怎么搜索。
- 数据库中所有的字段都可以拿来搜索。通过合适的前端界面包装sql语句,让用户以极少的操作实现复杂的查询逻辑。
- 查询举例
h! i# H' f, o* ~. s* i/ Q- 我想找上个月收集的文章
- 我想找上个月收集的那些添加了metadata的文章
- 我想找标签为python的文章,并且这个标签是在自动添加上之后又手动确认过的(手动确认过程见下文)
- 我想找备注信息中包含xx的文章
- 我想找之前手动修改过的信息
- 我想.....
! ^0 a9 Z) o! D/ X# z4 C9 V
- 总之,horizon的索引界面是sql的人性化包装。可以快速实现复杂的查询逻辑。只要是进入了BrainHole后端的信息,怎么着都能把它找出来。! V4 i5 {) Q6 I$ D& y
资料查看、编辑、整理界面: - 这个界面的设计决定了整个知识管理体系是否可以可持续发展。
- 左侧边栏:树装结构的分类目录
( ?& E1 p( g& d. p1 N- 这是最基本的导航结构,前端上要实现基本的拖拽修改,排序记录,收缩展开等功能
: _( ]- I5 ]) T! u/ Y
- 中间: 渲染好的文章主体/富文本的文本编辑器/有基本功能的源码编辑器
7 q6 I5 J9 D- Z; r- 既可以很好的展现文章,也可以快速(使用富文本编辑器)和准确(使用源码编辑器)修改文章。/ }2 M1 k v* f) `) s+ R
- 右侧: 标签、Metadata、关系信息
9 p" v9 q# n3 r# f* t* {/ {- 标签:! _/ ?6 ^" N& G7 y( R3 Q" U; p
- 基本的标签云,可手动排序
- 鼠标移到每个标签上,浮动出现若干按钮,可实现如下标签整理功能 `& r& a' R: A8 k! R
- 手动确认: 手动确认收集时自动添加的标签
- 删除:从此文章中删除此标签
- 加入黑名单:之前的收集系统会将文章标题自动分词作为标签,其中必将包括大量无意义的词语,比如『的』,『下』,『整理』,『好用』等。这些标签将在随后的整理过程中被逐渐加入黑名单。一段时间后,文章标题分词产生的标签将拥有很高的准确率--对于非标题党文章来说。
- 确认联想:所有通过父子关系和其他关系联想出来的标签会以半透明的样式展现出来,可以手动确认这些标签的准确性,将他们加入标签列表。
: m/ p* [: d& ?# k! J6 x
- 标签云下有若干个联想子云:展现那些通过各种关系联想出来的相关标签
- 不同状态的标签用不同颜色、字体、透明度展现,具体规则开发的时候再设计
6 Q' a& Q7 Z6 J
- 关系信息: 展现那些与此文章有某种关系的其他文章
- Metadata:展现此文章的相关Metadata" W( g! b, h( w% z0 A
- 以上只是概念设计,最终的界面要在开发的过程中逐步调整,最终实现高效的信息整理。
, k r1 w N4 t
使用场景举例: - 文章收集和整理是一个持续的过程,不是一次性的过程
/ }3 J$ Q U/ t: i- l7 ]$ S! w- P- 在写程序、写文章的过程中需要学习新的知识。google一下,找到合适的文章,匆匆看一眼,找到可以立即使用的部分,15s内快速收集此文章,连标签都没来得及手动加,继续工作。
- 一个月后闲下来了,想起那篇文章,使用时间信息找到它,稍微仔细的看一遍,大脑中存入此文章的更多索引信息,同时手动确认、添加和修改一些文章的标签信息。
- 之后一段时间收集了几篇相关的文章,同样的快速收集。
- 在闲暇时间对这些文章进行整理,相互添加关系。
- 持续、反复进行相关操作,对于某方面知识逐步构建一个体系化的知识网络结构
; f+ J( U) R. N' e, @- s6 Z: ?8 r
- 将各种来源的知识整理在一起:3 q* R8 ? O( i3 d
- 手机端:通过微信/telegrame机器人将要收集的信息发到服务器上,服务器自动收集
- 桌面端:通过插件或者js程序小窗口进行信息收集,进一步的可以用electron进行包装,制作桌面端App
- 文件管理:使用与Article类似的结构对特定文件夹内容进行管理
- 纸质端:通过扫描进行电子化归档,之后使用文件管理
$ J7 g" x) o7 x- X, S" i/ s
License: MIT 开发状态:处于开发状态,暂未开源。 Fetcher基本功能已实现,BrainHole基本功能已实现,Horizon正在进行页面设计和开发 开发速度:取决于自己的需求和广大人民群众的需求 5 u& X! t; B1 s1 }
|