创建文件夹中每个文件内容的索引

2024-03-16

我正在用Python 制作一个搜索工具。

其目标是能够按内容搜索文件。 (我们主要谈论源文件、文本文件,而不是图像/二进制文件 - 即使在元数据中搜索将是一个很大的改进)。目前我不使用正则表达式,随意的纯文本。

这部分算法效果很好!

问题是我意识到我主要在相同的几个文件夹中搜索,我想找到一种方法来构建文件夹中每个文件的内容的索引。并且能够尽快知道我正在搜索的句子是否在xxx.txt中或者是否不可能存在。 目前的想法是为每个文件维护一个校验和,使我能够知道它是否包含特定字符串。

你知道有什么算法接近这个吗?

我不需要 100% 的成功率,我更喜欢小索引而不是 100% 成功的大索引。 这个想法是提供一个通用工具。

EDIT:明确地说,我想搜索文件的部分内容。因此,对其所有内容创建 md5 哈希值并将其与我正在搜索的内容的哈希值进行比较并不是一个好主意;)


这里我使用 whoosh lib 来进行搜索/索引..上半部分是索引文件,下半部分是演示搜索..

#indexing part

from whoosh.index import create_in
from whoosh.fields import *
import os
import stat
import time

schema = Schema(FileName=TEXT(stored=True), FilePath=TEXT(stored=True), Size=TEXT(stored=True), LastModified=TEXT(stored=True),
                LastAccessed=TEXT(stored=True), CreationTime=TEXT(stored=True), Mode=TEXT(stored=True))

ix = create_in("./my_whoosh_index_dir", schema)
writer = ix.writer()



for top, dirs, files in os.walk('./my_test_dir'):
    for nm in files:
        fileStats = os.stat(os.path.join(top, nm))
        fileInfo = {
            'FileName':nm,
            'FilePath':os.path.join(top, nm),
            'Size' : fileStats [ stat.ST_SIZE ],
            'LastModified' : time.ctime ( fileStats [ stat.ST_MTIME ] ),
            'LastAccessed' : time.ctime ( fileStats [ stat.ST_ATIME ] ),
            'CreationTime' : time.ctime ( fileStats [ stat.ST_CTIME ] ),
            'Mode' : fileStats [ stat.ST_MODE ]
        }
        writer.add_document(FileName=u'%s'%fileInfo['FileName'],FilePath=u'%s'%fileInfo['FilePath'],Size=u'%s'%fileInfo['Size'],LastModified=u'%s'%fileInfo['LastModified'],LastAccessed=u'%s'%fileInfo['LastAccessed'],CreationTime=u'%s'%fileInfo['CreationTime'],Mode=u'%s'%fileInfo['Mode'])

writer.commit()


## now the seaching part
from whoosh.qparser import QueryParser
with ix.searcher() as searcher:
    query = QueryParser("FileName", ix.schema).parse(u"hsbc") ## look for files with 'hsbc' in their name
    results = searcher.search(query)
    for x in results:
        print x['FileName']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建文件夹中每个文件内容的索引 的相关文章

随机推荐

  • 为什么MouseEvent的getX() getY()看起来与真实坐标有偏移?

    我有一个JPanel嵌入在一个JFrame JPanel添加于CENTER of BorderLayout 我正在使用以下代码来绘制它 但是MouseEvent s getX and getY 似乎偏移了真实坐标 为什么 相关代码是 pri
  • Firebase Firestore 如何识别离线读取

    我正在使用 Firebase Firestore 但在读取操作时遇到问题 我使用 onCompleteListener 在里面 如果操作成功或失败 我会调用不同的回调 问题是 如果出现网络问题 onCompleteListener被调用 但
  • 使用 AspectJ 进行 Eclipse 调试单步调试

    我使用 AspectJ 开发工具 插件设置了 Eclipse 我正在尝试调试一些使用 AspectJ 的代码并逐步执行它 但它无法匹配源代码行 因为 AspectJ 在编译时添加了额外的内容 似乎没有人抱怨这似乎是一个重大缺陷 无法调试 所
  • 调用多个 aws lambda 函数

    我们如何依次调用多个 AWS Lambda 函数 例如如果 AWS Lambda 链由 8 个独立的 lambda 函数组成 每个函数模拟 1 秒的处理事件 然后调用链中的下一个函数 我不建议直接使用invoke启动您的功能 相反 您应该考
  • 如何从 Cocoa (Mac OS X) 访问 SQL Server?

    正如问题所说 如何在 Mac OS X 10 5 上从 Cocoa 访问 Microsoft SQL Server 2005 如果可能的话 数据库驱动程序应该是免费的 付费解决方案也可以 如果您使用 ODBC Actual Technolo
  • .NET:AssemblyVersionAttribute 中的大修订号

    我们约定将我们的构建版本控制为 主要 次要 微 修订 例如2 1 2 33546 我们的构建脚本会自动更新包含以下内容的 AssemblyInfo cs 文件 assembly AssemblyVersion x y z w 为了将版本号嵌
  • 如何在 C# 模块中嵌入 ms-access 表单?

    我们开发了一个相当重的 ms access 应用程序 有大约 300 个表单 是的 当代码实例化这些表单 而不仅仅是 打开 它们 时 我们可以在屏幕上显示同一表单的多个实例 为了绕过 VBA 的限制及其对一些面向对象概念 例如继承 接口 封
  • 如何在 scala 中使用 Resilience4J

    我想在调用 api 函数中使用 Resilience4J 的重试逻辑 但出现以下错误 如何解决此问题 val reversalRequestResult Decorators ofSupplier gt determinationServi
  • Laravel homestead 多个站点选择哪个本地可访问

    我在 laravel homestead 中有多个站点 现在 我想通过本地网络中的 IP 访问特定站点 但我总是得到我不想要的网站 家园 yaml sites map mdb local to home vagrant code mdb p
  • 在 Scala 中,我如何以无状态、功能性的方式对银行账户进行建模?

    在面向对象的范式下 你可以有类似的东西 class BankAccount balance Double def deposit def withdraw 我想知道你如何在函数范式中做等效的事情 让 BankAccount 类中的每个方法返
  • 如何为发布的EXE(.Net Core)添加版权

    如何将版权 公司信息添加到发布 Net Core 应用程序时生成的 EXE 中 实际上 通过在 csproj 中添加这些信息 生成的 DLL 会被更新 但 EXE 不会被更新 右键单击解决方案中的项目 选择 包 选项卡下的 属性 更改公司和
  • 如何使用装饰器计算函数调用次数?

    我正在刷新我对一些我还没有得到的Python功能的记忆 我正在从中学习这个Python教程 http www python course eu python3 decorators php还有一个我不完全理解的例子 这是关于装饰器计算对函数
  • JFormattedTextField 问题

    1 如何在不使用包含在invokeLater 中的Caret或Focus的情况下将Cursor设置为0位置 可以通过使用 camickr轻松解决格式化文本字段提示 http tips4java wordpress com 2010 02 2
  • 停止 Unicorn 服务器进程运行的最佳方法是什么?

    停止 Unicorn 服务器进程运行的最佳方法是什么 每当我尝试使用它来阻止它时kill p 90234这是行不通的 这很可能是我做错了 Thanks 看看独角兽信号页面 http unicorn bogomips org SIGNALS
  • 配置 org.hibernate.SQL 记录器时,Logback 显示 DEBUG 输出,根目录位于 INFO 级别

    为什么 logback 允许通过设置为 INFO 级别的根记录器进行 DEBUG 输出 上下文是一个使用 Hibernate 的 spring boot starter 项目 在版本 1 2 0 中 POM 命名为 logback clas
  • 带有动态Where子句的Android rawquery

    我正在尝试在 Android 中执行 SQL 查询 如下所示 SELECT FROM Flashcards WHERE category Anatomy OR category Surgery AND difficulty Easy OR
  • 在 Xamarin Android 中访问 UI 线程

    我的应用程序发送和接收 TCP 字符串 这些字符串之一是根据该字符串使对象可见 我当前的代码给出System NullReferenceException has been thrown Object reference not set t
  • jQuery Datatable:标题和搜索在同一行

    目前我的 jQuery 数据表如下所示 我希望历史标题和搜索栏位于同一行 我已经实现了标题和表格 如下所示 h2 History h2 table class table style width 100 thead tr tr thead
  • 如何在我的控制器中使用 Spring HttpRequest?

    我这样设置了测试 SpringBootTest AutoConfigureMockMvc RunWith SpringRunner class public class PublicControllerTest Autowired priv
  • 创建文件夹中每个文件内容的索引

    我正在用Python 制作一个搜索工具 其目标是能够按内容搜索文件 我们主要谈论源文件 文本文件 而不是图像 二进制文件 即使在元数据中搜索将是一个很大的改进 目前我不使用正则表达式 随意的纯文本 这部分算法效果很好 问题是我意识到我主要在