在我的 Windows 10 系统上,如果我在包含许多文档的文件夹中搜索常用词,我会得到一长串结果。我希望能够根据每个文档中的匹配数对结果进行排序。查看可用列的列表,我发现Relevance
只有一列可能相关,但在我的例子中,所有项目的结果都相同,即 890。列表中的其他内容似乎都不适用。
这有可能吗?有人知道 Windows Search 是否在内部存储了此指标吗?我甚至愿意在 vb.net 中编写一些代码来实现它。
谢谢。
答案1
此功能未内置于 Windows Search 中,但它可能将该频率数据存储在可扩展存储引擎格式。数据位于C:\ProgramData\Microsoft\Search\Data\Applications\Windows\Windows.edb
,并且在 Search 的子文件夹中有辅助索引。
尽管 Nirsoft 的免费工具ESE数据库视图,可以用来查看该类型的文件,Windows.edb是锁定在使用时,Windows 搜索引擎会对其进行搜索,因此,您能用这些数据做的最好的事情就是停止索引并搜索解锁它,让你留下过时的数据。
与其重新发明搜索,不如使用更可配置的引擎,比如免费的文档提取器例如,该工具支持“模糊”搜索,并根据单词的接近度或关键术语的重要性对搜索进行加权。例如,您可以搜索与“鲸鱼”接近的单词“Ahab”。
由于 DocFetcher 报告每个项目的“分数”,因此您可以了解匹配的紧密程度、文档中的频率等。
答案2
对于使用 Windows 10 且熟悉 Linux 和命令行的用户,我有以下基于的替代解决方案https://askubuntu.com/a/1131185/1350649
打开适用于 Linux 的 Windows 子系统 (WSL) 提示
如果缺少,请安装工具
sudo apt install unoconv
运行以下命令获取基于词频的排序列表
for i in *.odt ; do R=`unoconv --stdout -f text $i | grep -w -o "word" | wc -l`; echo $R $i; done | sort -n
虽然不快,但能完成工作。