分享

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

 培训班文摘 2023-03-30 发布于山西

一、需求说明

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

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

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

图片

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

图片

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

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

二、笔记软件安装及说明

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

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

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

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

图片

图片

图片

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

图片

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

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

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

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

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

图片

三、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.运行结果如下

图片

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

图片

其Python脚本源码:

#!/usr/bin/env python# -*- coding:UTF-8 -*-# 2021/08/10 周二 15:23:14# By Hasaki-h1import 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:///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:///MANUAL.pdf

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

图片

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

图片   图片

啥都看不了,所以需要制定输出格式,根据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)

图片

3.5 python脚本执行

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

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

图片

四、markdown文件夹导入

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

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

图片

图片

图片

五、笔记本导出

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

图片

六、笔记本导入

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

图片

图片

七、笔记本搜索功能

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

图片

图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多