如何查找名称列表中的名称是否出现在ColdFusion的段落中?

时间:2012-07-01 00:32:31

标签: regex parsing coldfusion

假设我有一个来自数据库的员工姓名列表(数千,在不久的将来可能是数万)。为了简化问题,假设每个名字/姓氏组合都是唯一的(大的if,但是相切)。

我还有一个与业务有关的新闻内容的RSS流(同样,每天可能有数百个项目)。

我想做的是检测员工姓名是否出现在多个段落的新闻项目中,如果是,则“标记”该项目及其所讨论的人。

在一个新闻项目中可能有多个员工命名,因此在第一次正面匹配后不可能打破循环。

我当然可以强行说出来:对于每个新闻项目,循环遍历每个员工姓名,如果正则表达式返回匹配项,请记下它。

ColdFusion中是否有更简单的方法,还是应该继续使用嵌套循环?

3 个答案:

答案 0 :(得分:7)

把它扔出去就像你可能做的那样......

听起来你几乎一致拥有的员工姓名明显多于每篇帖子的单词。以下是我可以处理的方法:

拥有一个始终运行的CF应用程序,它将引入feed和onAppStart

  1. 从数据库中抓取所有员工
  2. 创建一个应用程序范围的查找结构,首先将名称作为键,将姓氏结构作为值(如果需要,还可以将中间名称兄弟添加到具有第3层的姓氏中)。
  3. 所以查找中的一个键可能是“Vanessa”,其结构有2个键(“Johnson”和“Forta”)作为其值。

    然后,您解析的每篇文章,只是listToArray,其中一个空格作为分隔符,并循环遍历数组,使用每个标记执行简单的structKeyExists。对于匹配项,请检查数组中的下一项作为姓氏。

    猜测这比处理多次搜索更加高效,并且几乎没有时间进行编码,你可以非常简单地在任何未来的资源中提供(你的检查员需要一个参数) ,地球上的任何文字。)

    有兴趣了解您的路线以及您的实验是否在CF中展示了有关性能的新内容。

答案 1 :(得分:0)

马修,那里你的订单很高,挑战/解决方案确实有很多部分。但只是在将值列表与给定文本集进行比较以查看其中是否存在其中一个文本时,您会发现没有人可以使用CF函数。因此,我在cflib:

创建了一个新的findList

http://cflib.org/index.cfm?event=page.udfbyid&udfid=1908

它不是完美的,也不是最佳的,但它可能是一个有用的第一步或者你,或者给你一些想法。也就是说,它符合我的需要(确定给定的博客评论是否参考了任何列入黑名单的单词)。我展示了它比较一个URL列表,但它可以是任何单词。希望这有点帮助。

答案 2 :(得分:0)

值得探索的另一个选择是利用CF现在附带的Solr引擎。它将为您进行字符串搜索繁重的工作,您可以专注于动态地保持您的集合是最新的,并在新的Feed项目进入时进行优化。

祝你好运!