在文本中突出显示关键字

本文关键字:显示 关键字 文本 | 更新日期: 2023-09-27 18:09:25

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

在文本中突出显示关键字

我建议在代码中这样做。这是业务逻辑,而且这样做还减轻了数据库的负载——所以如果数据库在运行应用程序的服务器以外的机器上,你就不会占用那台机器的资源。

我认为regex会帮你解决这个问题——它是有史以来最有效的文本匹配方法,而且大多数技术(不仅仅是。net)的内部实现几乎是你能得到的最好的。如果你想要想出别的办法,那你充其量只是在重新发明轮子。

所以我会这样做:将每个关键字放在哈希表或字典中-这有切断重复项的好处,然后遍历它。然后,对于主文本中每个匹配的关键字,您可以获得匹配的第一个和最后一个索引,并将其与突出显示和链接的标记括起来。

下面是我编写的一个快速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.
编辑:这不是一个完美的例子。你必须去掉标点符号之类的东西——而不是最终版本。

如果链接是固定的,那么我个人会在写到DB时这样做,因为它只会做一次,那么它不需要额外的努力来显示