文章中的关键词替换实现方案_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 文章中的关键词替换实现方案

文章中的关键词替换实现方案

 2014/10/30 16:01:14  nextuntil  程序员俱乐部  我要评论(0)
  • 摘要:在新浪、腾讯等门户网站上浏览新闻的时候,尤其是体育类新闻。经常看到一些体育明星、球队名称等信息加上了相应的链接,指向该明星的介绍页面。如下:如今进行的项目中也要开发一个类似功能,给相应的关键词加上对应的链接,简单的思考了下,有以下几个步骤:1、词库行程(体育明星、球队等);2、保存内容时候加自定义标签;3、页面展示时替换标签为链接。列出代码如下,内容稍后完善。关键词的定义:///<summary>///关键词信息///</summary>
  • 标签:实现 文章 关键词

在新浪、腾讯等门户网站上浏览新闻的时候,尤其是体育类新闻。

经常看到一些体育明星、球队名称等信息加上了相应的链接,指向该明星的介绍页面。

如下:

 

如今进行的项目中也要开发一个类似功能,给相应的关键词加上对应的链接,简单的思考了下,有以下几个步骤:

1、词库行程(体育明星、球队等);

2、保存内容时候加自定义标签;

3、页面展示时替换标签为链接。

 

列出代码如下,内容稍后完善。

 

关键词的定义:

class="brush:csharp;gutter:true;">/// <summary>
/// 关键词信息
/// </summary>
public class KeywordItem {
    /// <summary>
    /// 关键词类型(对应明星、球队等)
    /// </summary>
    public byte WordType { set; get; }
    /// <summary>
    /// 关键词内容(如:科比、湖人等)
    /// </summary>
    public string Word { set; get; }
    /// <summary>
    /// 链接信息ID(如:科比在球员数据库的ID,湖人在球队数据库的ID等)
    /// </summary>
    public int ItemId { set; get; }
}

 

给文章内容加上自定义标签的方法:

        /// <summary>
        /// 保存内容时,对内容进行关键词标记处理
        /// </summary>
        /// <param name="content"></param>
        /// <returns></returns>
        public static string BuildContent(string content) {
            //关键词库
            var list = xxxx;//从缓存中取得(汇集了球员、球队等不同来源)          
                string endTag = "</ka>";
                foreach (KeywordItem item in list) {
                    int index = content.IndexOf(item.Word, StringComparison.Ordinal);
                    if (index > -1) {
                        //判断当前词根是否已加标记
                        int tagIndex = index + item.Word.Length; //词根结束索引
                        int endTagLength = endTag.Length; //结束标记长度
                        if (tagIndex + endTagLength > content.Length) {
                            content = content.Replace(item.Word, string.Format("<ka data='{0}_{1}'>{2}</ka>", item.WordType, item.ItemId, item.Word));
                        } else {
                            if (content.Substring(tagIndex, endTagLength) != endTag) {
                                string addStr = string.Format("<ka data='{0}_{1}'>", item.WordType, item.ItemId);
                                content = content.Insert(index, addStr);
                                content = content.Insert(index + addStr.Length + item.Word.Length, endTag);
                            }
                        }
                    }
                }          
            return content;
        }

  

展示时替换自定义标签为超链接:

/// <summary>
        /// 展示内容时,替换关键词标记为超链接
        /// </summary>
        /// <param name="content"></param>
        /// <returns></returns>
        public static string ShowContent(string content) {
            var regexKka = new Regex(@"<ka data='(?<type>\d+)_(?<itemid>\d+)'>(?<word>\S+)</ka>", RegexOptions.IgnoreCase);
            MatchCollection mc = regexKka.Matches(content);
            if (mc != null && mc.Count > 0) {
                foreach (Match item in mc) {
                    byte type = Convert.ToByte(item.Groups["type"].Value);
                    long itemid = Convert.ToInt64(item.Groups["itemid"].Value);
                    string word = item.Groups["word"].Value;
                    string baseText = string.Format("<ka data='{0}_{1}'>{2}</ka>", type, itemid, word);
                    string toText = null;
                    switch (type) {
                        case 1:
                            toText = string.Format("<a href='http://xxx.com/player/{0}.html'>{1}</a>", itemid, word);
                            break;
                    }
                    content = content.Replace(baseText, toText);
                }
            }
            return content;
        }

  

简单的测试结果如下:

发表评论
用户名: 匿名