【问题标题】:Highlighting keywords in text突出显示文本中的关键字
【发布时间】:2013-04-07 01:21:56
【问题描述】:

我有一个 SQL Server 2008 数据库,它有一个带有 varchar(1000) 字段的表,其中包含一堆关于书籍的用户输入。我有另一个包含一堆关键字的表。当我呈现用户关于书籍的信息时,我想在这些关键字上突出显示(或最终创建超链接)。我正在寻找有关扫描文本和匹配关键字的最有效方法的建议。我不确定是否有办法在 SQL 中正确执行此操作,或者它是否需要在代码中。谢谢。

【问题讨论】:

  • 用户是否在主关键字表中输入了关键字外键?两张表的架构是什么?
  • 1) 将[用户对书籍的输入] 放入foreach 字符串数组[] 2) 将每个字符串与关键字进行比较,使其成为超链接 3) 检查分析结果的响应时间
  • 我认为这必须通过代码而不是 SQL 来完成..

标签: c# sql vb.net


【解决方案1】:

我建议在代码中进行。这是业务逻辑,此外还减轻了数据库的负载 - 因此,如果数据库位于运行应用程序的服务器之外的机器中,则不会占用该机器的资源。

我认为正则表达式会为您解决问题 - 它是有史以来最有效的文本匹配方法,并且大多数技术(不仅是 .NET)的内部实现几乎是您能获得的最好的。如果你试图想出别的东西,你充其量只是在重新发明轮子。

所以我会这样做:将每个关键字放在哈希表或字典中 - 这样做的好处是可以切断重复项,然后对其进行迭代。然后,对于正文中关键字的每个匹配项,您可以获得匹配项的第一个和最后一个索引,并将其包装为突出显示和链接的标记。

【讨论】:

    【解决方案2】:

    这是我编写的一个快速 LINQPad 程序,它将用与键匹配的字典值替换字符串中的值。让我知道这是否是您想要的。

    旁注:出于各种原因,我同意其他所有人的观点,即您应该在应用程序层执行此操作。

    void Main()
    {
        Dictionary<string, string> links = new Dictionary<string, string>();
        links.Add("awesome", "link-to-awesome");
        links.Add("okay", "link-to-okay");
    
        string text = "This is some text about an okay book review of an otherwise awesome book.";
    
        string result = links.Aggregate(text, (current, kvp) => current.Replace(kvp.Key, kvp.Value));
        text.Dump();
        result.Dump();
    }
    

    结果:

    This is some text about an okay book review of an otherwise awesome book. 
    This is some text about an link-to-okay book review of an otherwise link-to-awesome book.
    

    编辑:这不是一个完美的例子。对于最终版本,您必须去掉标点符号和其他东西。希望这能让您走上正轨。

    【讨论】:

      【解决方案3】:

      如果链接是固定的,那么我个人会在写入数据库时​​执行此操作,因为它只会执行一次,那么它不需要额外的工作来显示。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-31
        • 1970-01-01
        • 2015-06-01
        • 2017-10-18
        • 2012-02-10
        • 2017-10-04
        相关资源
        最近更新 更多