【问题标题】:Searching text in pdf using php使用php在pdf中搜索文本
【发布时间】:2021-11-13 04:47:04
【问题描述】:

我有一个big database 大约有 50 万(500K)个条目,现在所有这些条目也有一些与之相关的文档(即每个 id 至少有 pdf 文件)。现在我需要一个强大的方法来搜索那些 pdf 文件中的特定 text,如果我找到它,它应该返回相应的 'id'

请分享一些快速优化的方法到search text in a pdf using PHP。任何想法将不胜感激。

注意:将 pdf 更改为文本然后搜索显然不是我要寻找的,这将需要更长的时间。

在一行中,我需要使用 PHP 在 pdf 中搜索文本的最佳方法

【问题讨论】:

    标签: php mysql database pdf full-text-search


    【解决方案1】:

    如果这是一次性任务,可能没有“快速”解决方案。

    如果这是一项重复性任务,

    1. 通过一些工具提取文本。 (抱歉,我不知道有什么工具。)
    2. 将该文本存储在数据库表中。
    3. FULLTEXT 索引应用于该表。

    现在搜索会很快。

    【讨论】:

    • 应该从一个好的 PDF 到文本转换器中删除空格。如果您删除 all 空格,则不再区分“单词”,因此 FULLTEXT 没有用(因为它取决于“单词”)。
    • 好吧,也许“ngram”FULLTEXT 可能会起作用。 (例如,这是用中文做的。)
    • 是的,我也决定提取文本,然后将其存储为 json 文件并从中删除转储,但我不知道从 pdf 获取文本最快的库或方法
    • @RahulKumarJha - 提取的文本有什么结构吗?如果没有,只需使用MEDIUMTEXT,而不是JSON
    【解决方案2】:

    我自己用 ReactJS 编写了一个网站来搜索 PDF 文件(索引书籍)中的信息,我使用 Apache SOLR 搜索引擎对其进行了索引。

    本质上,我在 React 中所做的是:

    queryValue = "(" + queryValueTerms.join(" OR ") + ")"
    
        let query = "http://localhost:8983/solr/richText/select?q="
        let queryElements = []
    
        
        if(searchValue){
          queryElements.push("text:" + queryValue)
        }
    
    ...
    
     fetch(query)
          .then(res => res.json())
          .then((result) =>{
            setSearchResults(prepareResults(result.response.docs, result.highlighting))
            setTotal(result.response.numFound)
            setHasContent(result.response.numFound > 0)
          })
    
    

    这会导致 HTTP 调用:

    http://localhost:8983/solr/richText/select?q=text:(chocolate%20OR%20cake)
    

    由于这是 ReactJS 并且只是代码的一部分,它对你来说对 PHP 来说没有什么价值,但我只是想演示一下这种方法是什么。我猜你会使用 Curl 或其他什么。

    索引本身我在一个单独的服务中使用 SolrJ,即我编写了一个相当小的 Java 程序,它利用 SOLR 自己的 SolrJ 库将 PDF 文件添加到 SOLR 索引。

    如果您选择使用 Java 和 SolrJ 进行索引(对我来说这是最简单的选择,而且我多年前没有使用 Java),这里有一些有用的资源和示例,我在广泛搜索后收集了这些资源和示例以用于我自己的目的:

    https://solr.apache.org/guide/8_5/using-solrj.html#using-solrj

    我基本上复制了这里的内容: https://lucidworks.com/post/indexing-with-solrj/ 并根据我的需要对其进行了调整。

    提示:由于我对 Java 非常生疏,而不是设置类路径等,我的快速解决方案是将 SOLR 的 solrj 文件夹中的所有库复制到我的 Java 项目中。可能还有其他一些图书馆。可能很难看,但为我完成了这项工作。

    【讨论】:

    • 这很好@Gishas,但我没有使用 react.js。但是,我显然计划使用 ajax 来减少请求命中的次数,但是请您帮助我快速从 pdf 中获取文本。提前致谢!!!
    • @rahul-kumar-jha 也许你需要“Elasticsearch”。它基于 Apache Lucene,就像 SOLR 本身一样,但它更容易设置,特别是对于初学者来说。我没有使用它,但我确实做了一些研究。不过,我喜欢 Rick James 在他的回答中所写的内容。因此,也许没有超快速的解决方案,但您可以考虑,如果您有可能在一段时间内需要高级搜索,您应该考虑花几天时间来学习 Elasticsearch 基本选项并实施它。也许它在您未来的项目中会有很大的用处。
    • @Gishas Ya 当然我会检查弹性搜索,感谢您的建议。实际上,我正在做一个幼虫 ERP 项目,我需要添加这个功能。但是,我在其他项目的早期也做过这个,但这次的挑战是速度,这就是为什么我在开始制作算法之前想到的原因,等等我应该在社区中询问是否有更好的解决方案。而你的里克詹姆斯回答也提到了同样的过程。好了,让我们看看如何在 Laravel 中实现弹性搜索。
    • @rahul-kumar-jha 是的,即使有数百万个文档,SOLR 和 Elasticsearch 似乎都快得惊人。 Bill Karwin slideshare.net/billkarwin/… 进行了这项出色的研究,该研究检查了不同搜索方法(包括 SQL 'LIKE' 运算符)的索引速度、索引大小和读取速度。很简洁,推荐大家看看。
    猜你喜欢
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多