2

在我的数据库中,我列出了 5000 行(作为关键字)。现在给定一篇文章(甚至可能是 1000 个单词),我想匹配与数据库中的关键字匹配的任何单词。例如,我在 db 中有这些记录(使用逗号提到行): tv, tv and videos, movie, horror movie, camera, digital camera, canon digital camera

每行都有另一列名为“URL”。我的输入字符串可能是这样的:

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

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

  • 针对我存储的关键字恐怖电影的恐怖电影。但我不希望只有电影与电影相匹配,因为恐怖电影关键字在这里更合适。
  • 数码相机对存储关键字数码相机
  • 数码相机...针对存储的关键字数码相机

(文章中存在粗体词组,斜体词组在数据库中)

对数据库中的每个关键字进行迭代可能是不可能且不切实际的。到目前为止,我了解到 Solr 可能很合适。但我不确定我将如何索引和查询 Solr。为了查询 Solr,我必须提供关键字。但我不知道我的关键字是什么。我只知道整篇文章。关键字可能包含 1 个或多个单词。完全随机,但我最多可以说 5 个字。

匹配后,我需要将文章中的关键字替换为下一列的(URL)值。比如文章恐怖电影中的关键词需要替换为恐怖电影的网址栏。

任何人都可以用正确的路径启发我吗?任何帮助表示赞赏。

提前致谢

4

1 回答 1

1

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

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

因此,您需要:

  1. 一次从数据库中选择所有“关键字”,包括您的 url(存储在内存中以处理文章)。
  2. 将(如果需要)您的关键字数据转换为多维关联数组(因为如果您的数据库查询尚未完成此操作,则处理起来会更容易)。
  3. 在附加数组中建立复数变体,或者如果它们在数据库的附加列中因关键字而异)。
  4. 当您提交您的文章时,您必须(一种或其他方式)遍历所有 5000 个关键字(包括所有复数变体的附加循环),在整篇文章中搜索所述关键字。
  5. 如果在您的文章中找到任何关键字,那么您显然需要将这些匹配替换为粗体字体和匹配的 url。
  6. 那么一旦文章中的所有关键词都被处理了,你显然需要保存或向用户展示这篇文章?

关于您的关键字的另外两点是:

  • 确定您的复数关键字是否超出了“s”后缀(即,您是否也在尝试匹配实际上改变拼写的复数词,例如“buddy”=>“buddies”)?
  • 从语法上讲,您准备/需要走多远,您是否需要或想要将数码相机之类的东西与数码相机相匹配?

抱歉,答案相当冗长/神秘,但我认为在寻找解决方案之前了解项目的全部范围很重要。您可能已经掌握了这些详细信息,但从您的问题来看,我认为变量太多,无法提供完整的答案。如果您需要,我很乐意提供一些代码示例/对上述任何一点的进一步解释?

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

于 2012-05-30T00:52:13.973 回答