使用思源笔记软件实现word文内搜索功能

简介: 使用思源笔记软件实现word文内搜索功能

科技背景_副本 公众号_副本.png

一、需求说明

公司每周各部门都有各自的周报,是word编写的,docx格式的。

最近有个需求,就是要从以往周报中搜索相关的信息。其实说白了就是在各个独立的word文件中搜索关键字。

这个和只搜索文件名的不同点大家应该也发现了,就是要深入到word文件里面去进行搜索。

正面.png

这个需求以前我也有,因为我有使用word记录工作的习惯,尤其是板卡问题的排查记录。但是真需要复查的时候,却不知道写到哪个文件里了,有的时候就要从头到尾挨个点开来查找。

640.png

当时研究了一些软件和方法,没有很好的解决。(dngrep也是个不错的选择,大家可以尝试,下面讲述我的另一种解决方案)

最近一年我放弃了word,采用了印象笔记来进行记录,这个查找的问题就得到了很好的结局。但是公司周报没有办法上到云,只能离线。所以这种云笔记的方式是没有办法解决周报搜索的需求的。所以需要找到一款离线的笔记软件。


二、笔记软件安装及说明

离线笔记软件多为开源的,并且有很多。离线笔记软件里我选择的是“思源笔记”。思源笔记支持windows,MacOS,Linux系统,因为我们公司电脑平台和系统很杂,这点思源软件很友好。同时支持完全离线使用,同时也支持端到端加密同步。

下载地址:https://b3log.org/siyuan/download.html

我是windows系统,下载到自己电脑后,需要用“管理员身份运行”。

打开后需要新建笔记本。在“文档树”→“更多”→“新建笔记本”→取名“周报”→“确定”。

正面.png

640.png

正面.png

查看“周报”→“更多”→“导入”。发现笔记本是可以导入的。

640.png

这里就关键了,可以导入“SiYuan.sy.zip”,这说明如果别人把文件打包整理好,那么我们是可以坐享其成的,把打包好文件导入。

其次,可以导入“Markdown文档”,也就是说我们可以把自己做好的markdown文档导入进来。

还可以导入“Markdown文件夹”,也就是说,我们如果一个文件夹内都是markdown文件,那么就不用一个一个导入了,直接指定文件夹就可以了。

那么这里我们就基本清晰了,如果没有别人打包好的文件,那么就要自己搞markdown文件,markdown一种轻量级标记语言,word通过工具是可以转换成markdown文件的。

那么我们现在的任务就是把上面的周报docx文件,批量的转换为markdown文件就好了。

正面.png


三、docx批量转换为markdown文件

3.1 python脚本

这里感谢csdn博主“痴人说梦梦中人”的python脚本。原文如下:

文章链接:

https://blog.csdn.net/qq_38963246/article/details/119586221


之前用有道云记笔记,笔记导出格式基本都为docx格式,有道笔不能批量导出,另外就是时常卡顿,就想着换个markdown编辑器直接保存本地,前后尝试了notepad++插件,Atom,MarkdownPad,Cmd Markdown,最终还是选择了Typora,大纲和文件树是真的舒服,就是启动太慢。


有道云笔记导出格式都是word类型的,数量还不少,只好搞个脚本进行格式转换了。


repo:https://github.com/SevenC-base/docx_to_markdown

效果还行,不求美观之类的,能跑就行了


1.简介

一个辅助脚本,利用工具pandoc,以单线程的方式将目录下所有docx文件转为markdown格式。


pandocx:https://github.com/jgm/pandoc/releases/tag/2.14.1


2.使用配置:

修改如下配置:

# 配置pandoc 路径

pandoc_path = "C:\\Users\\Administrator\\Downloads\\pandoc.exe"

# 配置docx文件存在的路径,会遍历该路径下的所有docx文件

dirctory = "D:\\笔记\\"

# 配置图片存储路径

images_store_path = "D:\\笔记\\images\\"


3.运行结果如下

640.png

生成目录就是原来的目录,想筛选的话就文件夹搜索.md就好了。

640.png


其Python脚本源码:

#!/usr/bin/env python
# -*- coding:UTF-8 -*-
# 2021/08/10 周二 15:23:14
# By  Hasaki-h1
import os, sys, subprocess, uuid
def get_file_list(directory):
    """单独一个目录"""
    files_list = []
    files_path_list = []
    files_p_list = []
    if os.path.exists (directory):
        directory_n = directory
    else:
        print ("%s 不是一个有效的目录!!!" % directory)
        sys.exit ()
    # 遍历目录下读取可读文件
    all_files_directory = os.walk (directory_n, topdown=True, followlinks=True)
    for root, dirs, files in all_files_directory:
        # 获取文件路径
        for f_name in files:
            if ".docx" in f_name:
                # print(f_name)
                file_path_d = os.path.join (root, f_name)
                file_path_m = os.path.join (root, f_name.replace (".docx", ".md"))
                files_path_list.append (file_path_d)
                files_p_list.append (file_path_m)
    return files_path_list, files_p_list
def convert_md(pandoc_path, f_docx, f_md, images_store_p):
    try:
        image_store_path_create = images_store_p + str (f_docx.split ('\\')[-1]).replace (".docx", "") + str (
            uuid.uuid4 ())
        cmd = pandoc_path + " \"{}\" -f docx  -t markdown  -o \"{}\"  --extract-media=\"{}\"".format (f_docx, f_md,
                                                                                                  image_store_path_create)
        res = subprocess.Popen (cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
        sout, serr = res.communicate ()
        res.wait ()
        sout.decode ("gbk")
    except Exception as e:
        serr.decode ("gbk")
    finally:
        pass
def main(pandoc_path, dirctory, images_store_path):
    fpl_docx, fpl_md = get_file_list (dirctory)
    print ('🚀-----------------起飞------------------🚀')
    for fpl_d in fpl_docx:
        progress = '{:.2f}%'.format (((fpl_docx.index (fpl_d) + 1) / len (fpl_docx)) * 100)
        # print(fpl_d,fpl_md[fpl_docx.index(fpl_d)])
        convert_md (pandoc_path, fpl_d, fpl_md[fpl_docx.index (fpl_d)], images_store_path)
        print ('✈ 进度:{} ------  {}  ->>>--->>> 转换完成!'.format (progress, str (fpl_d.split ('\\')[-1])))
if __name__ == '__main__':
    # 配置pandoc 路径
    pandoc_path = "C:\\Users\\Administrator\\Downloads\\pandoc.exe"
    # 配置docx文件路径,会遍历该路径下的所有docx文件
    dirctory = "D:\\笔记\\"
    # 配置图片存储路径
    images_store_path = "D:\\笔记\\images\\"
    main(pandoc_path, dirctory, images_store_path)

3.2 脚本依赖安装

用这个脚本,需要在windows系统上安装pandoc和python。

先安装pandoc,下载地址:https://pandoc.org/installing.html。(建议:pandoc安装目录中没有空格等比较方便,我直接把pandoc装到了C:\ProgramFiles\Pandoc文件下)

装完可以在cmd中,看一下是否运行正常了。能看到版本信息就可以了。

>pandoc --version

再安装python。

cmd中输入版本查看,看自己电脑是否有python。

>python --version

要是没有版本号,那么就说明电脑里没有python。那么就直接输入>python,windows会自动跳到应用商店python的应用安装界面。

跳转了就安装就行了,我下面截图是我已经点完安装,且安装完的图。要是没安装就会有个“安装”的钮,点它就行了。


3.3 直接调用pandoc命令尝试转换

那么首先尝试把一份周报.docx格式(就是下面的a.docx,我为了好敲命令,重命名了一份周报,免得敲那么长的文件名了)转为.md格式。pandoc操作手册MANUAL.pdf:https://pandoc.org/MANUAL.pdf

因为在cmd内调用pandoc命令就可以直接转换文件。我们使用cd命令进入到周报所在的目录“2020年”里面,使用命令“>pandoc a.docx -o a.md”转换a.docx文件。先不用脚本,手动的先转换试试。

正面.png


但是因为周报有边框,所以输出效果很不好,转换结果是这样的:


 


啥都看不了,所以需要制定输出格式,根据MANUAL.pdf手册里对输入输出的参数说明,-f是输入,-t是输出。

经过各种尝试,输出格式配置为xwiki时显示且后期搜索效果最好。

所以脚本命令使用:

>pandoc -f docx -t xwiki a.docx -o a.md


3.4 python脚本修改

那么就改上面的命令修改csdn博主的脚本,现在文件目录是这样的:

修改docx2md.py脚本。

配置pandoc的安装路径,pandoc_path为“C:\\ProgramFiles\\Pandoc\\pandoc.exe”(前面说了建议pandoc安装路径没有空格,就是这里简单些)。

配置需要转换的docx文件存放的路径dirctory为“E:\\markdown\\2020年\\”会遍历该路径下的所有docx文件(因为上面的文件存储路径有子文件夹,所以2020年、2021年、2022年三个文件夹这个脚本要改三次,先改为“E:\\markdown\\2020年\\”再改为“E:\\markdown\\2021年\\”,再改为“E:\\markdown\\2022年\\”)。

Word中的图片我没有另存储,也就是markdown文件为纯文本的,所以images_store_path路径我没有改动,因为下面转换命令里我就没涉及image。

Pandoc转换命令那里,即脚本第42、43行改为:

cmd = pandoc_path + " -f docx  -t xwiki \"{}\" -o \"{}\"".format (f_docx, f_md)

正面.png



3.5 python脚本执行

在cmd中执行命令>python docx2md.py

(因为上面配置docx文件存放dirctory的路径时改了三次,即“E:\\markdown\\2020年\\”、“E:\\markdown\\2021年\\”、“E:\\markdown\\2022年\\”,所以每改一次要执行一次>python docx2md.py命令才能对子文件的转换)

640.png


四、markdown文件夹导入

在思源笔记里导入文件夹,下面以导入2021年的为例:

选择笔记本→“更多”→“导入”→“Markdown文件夹”→选择存放md文件的文件夹。


正面.png

正面.png

640.png


五、笔记本导出

软件可以将自己的笔记本打包转出,“更多”→“导出”→“SiYuan.sy.zip”,点击后软件会调用浏览器的下载器,保存笔记本名字的.sy.zip文件。我这里就是“周报.sy.zip”。我把“周报.sy.zip”剪切到“E:\markdown”文件夹下。


正面.png

六、笔记本导入

笔记本文件的导入。新建笔记本→“更多”→“导入”→“SiYuan.sy.zip”→找到.sy.zip文件(我这里为E:\markdown\周报.sy.zip)。

640.png



正面.png


七、笔记本搜索功能

选中笔记本→“更多”→“搜索”→填写要搜的关键词→点击搜索结果可以预览上下文。

640.png


640.png

相关文章
|
6月前
|
存储 搜索推荐 安全
Onlyfans如何使用搜索功能?Onlyfans如何搜索博主?如何在OnlyFans搜索HongkongDoll
本文是一份全面的指南,旨在帮助读者了解如何在OnlyFans平台上有效使用搜索功能,尤其是如何找到特定的博主,比如HongkongDoll。我们深入探讨了OnlyFans的搜索机制,包括其对用户隐私的重视以及因此带来的搜索限制。文章详细介绍了三种主要的搜索方法:使用OnlyFans的官方搜索服务、通过社交媒体链接进行跳转、以及利用第三方搜索引擎如OnlySearch。
|
关系型数据库 MySQL 索引
全文本搜索的使用说明
全文本搜索的使用说明
106 0
|
小程序 数据库
小程序搜索功能,云开发搜索,小程序云开发模糊搜索,同时搜索多个字段
小程序搜索功能,云开发搜索,小程序云开发模糊搜索,同时搜索多个字段
276 0
|
自然语言处理 数据库 开发者
索引和搜索流程简介|学习笔记
快速学习索引和搜索流程简介
144 0
索引和搜索流程简介|学习笔记
|
前端开发 小程序 关系型数据库
小程序中实现搜索功能
小程序中实现搜索功能
小程序中实现搜索功能
|
Python
百度搜索的高级用法
百度搜索的高级用法
2978 0
百度搜索的高级用法
html+css实战182-搜索
html+css实战182-搜索
120 0
html+css实战182-搜索
|
机器学习/深度学习 人工智能 自然语言处理
阿里云智能编码插件,Cosy文档搜索上新了
阿里云智能编码插件,Cosy文档搜索上新啦!阿里云智能编码插件,更Cosy的开发体验。Cosy集合了代码补全和代码搜索两大开发辅助功能,不仅能通过深度学习模型和程序分析技术,精准智能地帮助我们减少 击剑 击键次数,还能基于海量代码片段和社区问答数据,让我们可以哪里不会搜哪里,沉浸在IDE内快乐开发。
951 1
阿里云智能编码插件,Cosy文档搜索上新了
|
搜索推荐 安全 数据安全/隐私保护
Win系统 - 1903版WIN10,搜索功能将变得更好用
Win系统 - 1903版WIN10,搜索功能将变得更好用
230 0
Win系统 - 1903版WIN10,搜索功能将变得更好用