突出显示文本中的关键字

时间:2013-04-15 01:54:07

标签: c# sql vb.net

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

3 个答案:

答案 0 :(得分:0)

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

我认为正则表达式会为你做到这一点 - 它是有史以来发明的最有效的文本匹配方法,而大多数技术(不仅仅是.NET)的内部实现几乎是你能得到的最好的。如果你试图提出别的东西,你最多只能重新发明轮子。

所以我会这样做:将每个关键字放在一个哈希表或字典中 - 这样可以减少重复项,然后重复一遍。然后,对于主文本中关键字的每个匹配,您可以获得匹配的第一个和最后一个索引,并使用标记包装突出显示和链接。

答案 1 :(得分:0)

这是我编写的一个快速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.

编辑:这不是一个完美的例子。你必须删除标点符号,而不是最终版本。希望这能让你走上正轨。

答案 2 :(得分:0)

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