DVONthink To Go 和 DVONthink Pro 一样,搜索中文时存在水土不服的现象,尽管几年前就有系统内置的可以用于分词的接口 tokenizer
(Pin 就是利用这个接口的范例),DEVONthink 系列产品仍然没有使用这些接口来强化其软件的索引能力。按理说,增加对文本进行一步处理很容易。我以前没写过 macOS 的应用程序,下载 Xcode,用了几天时间也写出来一个能用的 demo。GitHub 上相关的开源项目也不是不存在:lancy/StringTokenizer: iOS & Mac 分词(支持中文)
我曾试着写 Mac 上的脚本来生成索引,最后却发现大量的索引词把自己的文件搞得乱糟糟的,更何况在 iOS 设备上,没法部署我写的脚本,所以我仔细看了 DEVONthink 官方的说明文档,将其中的基础概念翻译了出来,有了此文。
关于翻译和简称
在不引起歧义的情况下,有如下简称:
- DEVONthink To Go:DTTG
- DEVONthink Mac 系列软件:DT
- 称存储于 DTTG 中的任意(一个/多个)(文件/文件夹)为
项目
涉及到的若干名词,优先参照机器之心的编译表。
分词简介
中文这样的非字母语言,其自然语言处理和英语这样的字母语言处理起来有不同之处。首先就是分词和词性标注,分词简单说是把句子中的词分开,不同的情况,还要考虑召回率、长词优先等策,词性标注顾名思义是标记词的词性。
分词没做好的会在语义上出现问题,就像果壳上的这个帖子。现代的分词技术已经取得了非常大的进步,但要解决的问题没有变,感兴趣的看以下两篇论文做些了解
- 孙茂松,邹嘉彦.汉语自动分词研究中的苦干理论问题[J].语言文字应用,1995(04):40-46.
- 孙茂松,邹嘉彦.汉语自动分词研究评述[J].当代语言学,2001(01):22-32+77. 北大计算机所下载链接:汉语自动分词研究评述.pdf
当然,现在已经有不少成熟的包库能高效完成分词并标注这个工作了:
下面进入正题。
词组,字符与查询
原文是 WORDS, TOKENS, AND QURIES,直接翻译是词,字,与查询。但如上文说,中文和英语的处理逻辑存在不同,
- 词组:由空格或标点字符分隔的字符串
- 符号:DTTG 把全文索引存储为一个符号表。通常一个符号等同于一个词组
- 短语:由
+
或者"
包起来的符号 - 查询:一个或多个符号通过逻辑操作符组合起来的
非字母,非数字的字符会被分割成一个短语。1234/5678
技术上会被处理为 1234 5678
。
大小写
符号是大小写敏感的;逻辑操作符必须是全部大小的。符号当然可以是大写,但是 DTTG 内部会将其大小写忽略的
大小写对于中文来说不那么重要
通配符
在 Mac 上,使用 DT 查询中文时,免不了使用 *
这样的符号来分隔查询的中文词语
DTTG 中默认是全匹配词组的(匹配由空格和标点字符分开的字符串,一般是一句话),而不是汉语中的一个词。在一个符号后接*
,就能匹配所有以这个词开头的。但是和 Mac 上不一样的是,*
只能用来匹配前缀。比如
tDEVON
这个词,用devon
、*devon
、devon*
和*devon*
都无法匹配处理啊- 换到中文语境下,
汉朝时苏武出访匈奴
这句话,用*苏武
、苏武*
和*苏武*
是无法搜索出这句话的
那什么时候是有用的呢:
DEVONthink Technology
、DEVONsearch
用DEVON*
/devon*
可以搜索出来。大明苏武的内亚奇行记
用大明*
可以搜索出来
也就是说,对于中文而言,如果记得句子开头的中文词/字,这个方法才用得上
限定搜索范围
DTTG 中的项目,有着丰富的属性,称为作用域:
- name:项目的名称
- comment:项目的注释
- content:项目的内容
- tags:项目的标签
利用这些属性,可以逐步限定搜索范围,当它们和冒号 :
组合在一起时,便成为作用域前缀:
name:
仅在项目的名称中检索comment:
仅在项目的注释中检索content:
仅在项目中检索tags:
仅在标签中检索
逻辑操作符
数学,或者编程中,或多或少会接触一些与集合论、逻辑相关的,比如并集,交集之类的。逻辑操作符就是在搜索中常用的,表明相邻两个查询指令间的逻辑关系
逻辑操作符只能是大写的。如果在搜索中没有说明使用的逻辑操作符,DTTG 默认是 AND
更进一步的使用还请参见文档
DTTG 中文搜索现状
就当下而言,简单如搜索 汉朝时苏武出访匈奴
这句话中的 苏武
一词都是不可行的,可以说非常悲观了。
所以,面对半残废的搜索,DTTG 中要想打造一套以中文为主的知识管理系统,最重要的就是不依赖于搜索。现阶段我是采用纯手工整理,用 itemlink 来链接有关系的文档。Mac 看情况用我自己的脚本来生成关键词,以备未来的检索
还是有点怀念用 Evernote 时强悍的中文索引能力的~