Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将网页关键字匹配到数据库中的一组关键字_Php_Algorithm_Wordpress_Solr_Replace - Fatal编程技术网

Php 将网页关键字匹配到数据库中的一组关键字

Php 将网页关键字匹配到数据库中的一组关键字,php,algorithm,wordpress,solr,replace,Php,Algorithm,Wordpress,Solr,Replace,在我的数据库中,我列出了5000行(作为关键字)。现在给定一篇文章(可能甚至1000个单词),我想匹配数据库中与关键字匹配的任何单词。例如,我将这些记录保存在db中(使用逗号提及行): 电视、电视和视频、电影、恐怖电影、照相机、数码相机、佳能数码相机 每行有另一个名为“URL”的列。我的输入字符串可能如下所示: 我讨厌恐怖电影。佳能发布了一款新的数码相机。到目前为止,我拥有3台数码相机……” 从上面的字符串中,我需要匹配: 恐怖电影针对我存储的关键字恐怖电影。但我不希望只有电影与电影匹配,因为

在我的数据库中,我列出了5000行(作为关键字)。现在给定一篇文章(可能甚至1000个单词),我想匹配数据库中与关键字匹配的任何单词。例如,我将这些记录保存在db中(使用逗号提及行):
电视、电视和视频、电影、恐怖电影、照相机、数码相机、佳能数码相机

每行有另一个名为“URL”的列。我的输入字符串可能如下所示:

我讨厌恐怖电影。佳能发布了一款新的数码相机。到目前为止,我拥有3台数码相机……”

从上面的字符串中,我需要匹配:

  • 恐怖电影针对我存储的关键字恐怖电影。但我不希望只有电影与电影匹配,因为恐怖电影关键字在这里更合适
  • 数码相机针对存储的关键字数码相机
  • 数码相机…针对存储的关键字数码相机
(文章中有粗体短语,数据库中有斜体短语)

通过数据库中的每个关键字进行迭代可能是不可能的,也是不现实的。到目前为止,我知道索尔可能是个合适的人选。但我不确定如何索引和查询Solr。对于查询Solr,我必须提供关键字。但我不知道我的关键词是什么。我只知道整篇文章。关键字可以由一个或多个单词组成。完全随机,但我最多只能说5个字

匹配后,我需要用下一列的(URL)值替换文章中的关键字。例如,文章恐怖电影中的关键字需要替换为恐怖电影的URL列

有人能给我指点正确的道路吗?感谢您的帮助


提前感谢

我认为你的问题实际上有几个部分,但我假设你基本上想向你的网站提交一篇文章,然后你的网站后端将处理这篇文章,并用粗体字体和url替换所有关键字

考虑到你想操纵你的文章并从数据库中注入数据,也许一个原始的php解决方案会适合你(但我必须承认我对Solr/Lucene不够熟悉,无法提供建议)。显然,您必须进行一些基准测试,但在这种类型的系统中,5000行数据并不是不合理的数据量,因为我假设您不会每隔几秒钟甚至几分钟提交一篇文章

因此您需要:

  • 一次从数据库中选择所有“关键字”,包括url(存储在内存中以便处理文章)
  • 将关键字数据(如果需要)转换为多维关联数组(因为如果db查询还没有这样做,那么处理起来会更容易)
  • 在附加数组中建立复数变体,或者,如果它们在数据库中的附加列中随关键字的不同而变化,则可以建立复数变体)
  • 当你提交你的文章时,你必须(以一种或另一种方式)循环浏览所有5000个关键词(包括所有复数变体的附加循环),在整篇文章中搜索上述关键词
  • 如果在您的文章中发现任何关键字,那么您显然需要将这些匹配项替换为粗体字体和匹配的url
  • 然后,一旦文章中的所有关键字都被处理完毕,您显然需要保存或向用户显示这篇文章
  • 关于关键词的另外两点是:

    • 确定你的复数关键词是否超出了“s”后缀 (也就是说,你是否也在尝试匹配实际上 更改拼写,如“buddy”=>“buddies”)
    • 从语法上讲,你准备/需要走多远 要或想要将数码相机之类的东西与数码相机匹配
    很抱歉给出了这么冗长/晦涩的答案,但我认为在寻找解决方案之前,了解项目的全部范围是很重要的。你可能已经记下了这些细节,但从你的问题来看,我认为变量太多,无法提供完整的答案。如果您需要,我很乐意提供一些代码示例/关于上述任何一点的进一步解释


    编辑:当你提到识别关键词时,有点困惑,关键词不是已经在数据库中了吗?或者,您是否试图从提交的文章中有机地创建一个关键字数据库,这样您的系统将在搜索和替换数据库中当前存储的关键字的同时,获取您的文章中的关键字?

    hello@PedroFillastre,您认为str_replace()如何工作?你能详细说明一下吗?对于字符串替换,我需要确定我的关键字,这是我现在面临的最大挑战。你可以创建一个包含所有关键字和其他链接的数组,然后我将如何执行以下操作:1。把恐怖片和恐怖片配对。2.匹配恐怖电影,但不匹配电影?@HungryCoder检查是否在数组中???->史蒂夫H,谢谢你的意见。在完成当前任务一段时间后,我将解释并回答您的问题。我很感激你看了它。是的,你知道了主要的意思。然而,虽然最初我举了一个5000条记录的例子,但计数有可能增加。目前,我们看到的记录范围约为5万条。这就是普通PHP循环无法工作的原因。到目前为止,我已经完成了
    preg_replace
    的工作,它支持诸如“s,es”之类的复数形式,但不支持诸如“factory->factories”之类改变背景词的复数形式。此外,它不支持撇号。下面是我目前使用的表达式:
    ~{$keyword}(s | es)*\b(?)((?)表达式跳过[aa][/aa],关于您的困惑:我在数据库中有关键字,但当一篇文章(比如博客文章)是我的输入时,我不知道应该从中找到什么关键字,除非我与数据库匹配