1. 多级需求和方案设想及其结论(项目根本)

1. 获取笔记中的关键字

^517796 child::获取笔记中的关键字

2. 根据多个关键字在标签库中寻找对应的同义词列表

child::^a259a0

3. 放置同义词标签到YAML中

3.1. 利用自己的封装方法把标签放入YAML中

4. 适合的触发方式

4.1. 通过命令执行

4.2. 关闭或切换文件的时候触发

前提是从没导入过的

判断是否已经导入了

5. 处理复合标签:

5.1. 之一(放弃):

5.1. 搜索到一个复合标签, 可能判断匹配到的是子标签还是父标签

5.1. 用正则表达式, 任意一个关键后面不能出现指定字符/, 后面有该字符的匹配结果, 都抛弃
用replace获取最后一个匹配的关键字的索引
  1. 最后传入处理函数的匹配项就是索引最大的匹配项
从该索引位置, 往后切片字符串
  1. slice(索引)
检测该切片字符串中是否含有指定字符/
  1. 判断search('/')!=-1

5.2. 如果搜索到的是某个父标签的子标签(即最后关键中没有/), 则同时导入它的所有父标签

6.1. 因为子标签是固定带着父标签的, 所有匹配到了, 就直接导入即可

5.3. 如果匹配到的是拥有子标签的父标签(即最后的关键字中有/), 则不导入子标签, 只导入父标签

7.1. 因为父标签通常都单独存在一个没有子标签的独立标签, 所以只需要舍弃到当前匹配到的整个父子标签

5.2. 之一(放弃):

对一个标签,用一个关键字去匹配,匹配到的是哪层,就把该层之后的都截掉,留下前面

记录前面层级的标签为匹配到的标签

5.3. 将原标签按层级分割乘若干个元素
用关键字尝试匹配每一元素
如果匹配到了,就把该层和前面的层都重新用/连接起来

5.3. 之一:

直接取最后一层作为代表,用一个关键词去匹配代表,把匹配到的原标签记录下来

因为实际复合标签的真正标签都是最后一层,前面的层还会以其他标签的形式再次出现

6. 根据当前场景关键字,优先导入含有特殊意义的关键字标签

child::处理关键字的多义性(完毕)

7. 对于多个同义词标签,可索引字段尽可能不要重复出现

7.1. 抽象为化简总集合的问题

  • 这些所有标签的所有可索引字段构成了一个总集合
  • 可索引字段包括:
    • 一整条标签链的所有关键字
    • 注释标签,注释标签中的注释标签
  • 同义词标签都是构成这个总集合的一个一个子集

7.2. 遍历每一个标签

7.3. 获取一个同义词标签中的可索引字段

用正则把可索引字段之外的字符作为分割符进行分割

正则:/[\/\-()【】,;!]/g

7.4. 根据可索引字段判断该同义词标签是否重复集合

遍历每一个可索引字段

搜索该可索引字段是否还在总集合中其他同义词标签中存在
遍历总集合中所有的同义词标签
  • 用正则表达式尝试匹配可索引字段
  • 如果匹配到了,判断这两个标签是否相同
  • 如果不相同,说明该索引字段重叠了
遍历完成还没证明该索引字段重叠,就说明没有重叠
如果没有其他同义词标签,则说明该标签肯定为有效集合

遍历完成都没有证明是有效集合,则肯定是重复集合

7.5. 如果是重复集合,就从总集合中移除该标签

7.6. 遍历结束

7.7. 插入修改后的总集合

1. 调研材料及结论(项目动力)

1. child::正则表达式解析markdown文档

2. 别人的插件

2.1. tagsuggest

  1. 是直接遍历所有标签

3. 官方api

  1. metadata下的getTags()方法可以获得库中所有的标签
    1. 如果是分级标签, 每一级都算作一个标签
    2. 键名为标签名, 键值为标签数量
  2. cache中有sections数组, 每个元素都是一个对象, 对象中有两个值, 一个type, 一个position
    1. 如果是代码块, 则type=‘code’
    2. 行内代码块和被缩进的代码块都不被当做代码块
  3. Tfile下有path属性, 记录有带文件后缀的路径

4. 讯飞api

  1. md的链接语法(![[完毕)](自动添加同义词到笔记中(完毕|自动添加同义词到笔记中(完毕)]].md))传入api会失败

4.1. 响应成功返回的数据

返回一个对象

  1. 有desc属性, 描述响应说明
  2. 有data属性, 是一个对象
    1. 有ke属性, 是一个数组
      1. 元素是一个对象
        1. 有word属性, 为关键字
        2. 有score属性, 描述关键字的权重

5. 调研代办(项目至始至终都要写):

  • 别人的插件是怎么搜索标签的
  • 看看官方有没有暴露什么特别的api, 打印app看看
    • metadata下的getTags方法
    • 怎么在排序号的关键字中快速查找关键字
    • 封装我之前的创建YAML代码
    • 封装我之前放置标签到YAMLA中的方法
  • 测试使用api
    • ajax
  • 测试app下那些api里面存储着加粗和高亮
  • 测试app或cache中有没有保存有代码块的信息
    • 测试app
    • 测试cache中行内代码块算不算代码块
    • metadataCache.blockCache有很多方法
      • getAll(e)的e好像就是blockCache
  • 编写加粗和高亮的正则匹配式
  • 用关键字搜索同义词的正则表达式
  • 修改自动插入yaml的api
  • 解决粗体匹配获得**的问题
  • js拆分原数组为指定长度的数组
  • 是不是不能出现什么特殊的字符
  • 过滤标题中的链接语法
  • 看看错误是什么类型的
  • filter方法
  • 测试怎么触发切换文件

3. 随想(未整理, 灵点子)

4. 项目结论(用以回顾项目以学习)

5. 项目代办(项目完毕后再写)

  • 编写正则表达式, 实现只匹配后面不能出现指定字符串

6.