模拟百度搜索渲染HTML页面关键词高亮分组排序算法(C#)

  模拟百度搜索渲染HTML页面关键词高亮分组排序算法(C#)

模拟百度搜索渲染HTML页面关键词高亮分组排序算法(C#)

最近在研究模拟百度搜索以及自动中文分词算法,从数据库查询到相关关键词结果,最后是渲染HTML页面的关键词,关键词部分采用黄色背景红色字体高亮显示。

最后在渲染HTML页面的关键词高亮环节出现小问题,没有正确渲染关键词,如下图:

贴图图片-模拟百度搜索渲染HTML关键词高亮排序算法1


高亮关键词失败原因:

关键词高亮是根据自动分词系统分解的关键词顺序进行的,比如上图的关键词分词结果:api,webapi,程序首先高亮渲染api关键词,那么webapi关键词被强行拆分了!!!

HTML Code:

web<span class="search-highlight">api</span>


当程序高亮webapi关键词的时候,HTML内容已经无法匹配到webapi关键词!


解决方案:对关键词的包含关系重新分组排序!!!

逻辑推理:首先高亮webapi关键词,然后高亮api

HTML Code:

<span class="search-highlight">webapi</span>

//来源:C/S框架网(www.csframework.com) QQ:23404761




贴图图片-模拟百度搜索渲染HTML关键词高亮排序算法2



渲染HTML页面关键词高亮分组排序算法:


C# Code:

/// <summary>
/// 渲染HTML页面关键词高亮分组排序算法
/// </summary>
public class KeywordSort
{
  
  
/// <summary>
  
/// 关键词分组排序算法
  
/// </summary>
  
/// <param name="keyWords"></param>
  
/// <returns></returns>
  
public static string SortKeywords(string keyWords)
  {
    
try
    {
      
#region 按每个关键词包含关系分组
      
      SortedList groups
= new SortedList();
      
string[] keys = keyWords.Split(',');
      
foreach (string key in keys)
      {
        
if (String.IsNullOrEmpty(key)) continue;
        
        ArrayList sort
= new ArrayList();
        
foreach (string s in keys)
        {
          
if (s.IndexOf(key) >= 0) sort.Add(s);
        }
        
if (sort.Count > 1) sort.Sort(new SortComapre());//按包含关系排序
        
groups.Add(key, sort);
      }
      
      
#endregion
      
      
#region 重新组合关键词 - 按关键词分组关系重新组合
      
      ArrayList result
= new ArrayList();
      
      
foreach (DictionaryEntry g in groups)
      {
        
foreach (string s in (g.Value as ArrayList))
        {
          
if (!result.Contains(s)) result.Add(s);
        }
      }
      
      
#endregion
      
      
//输出关键词组合,逗号分开
      
StringBuilder sb = new StringBuilder();
      
foreach (string s in result) sb.Append(s + ",");
      
      
return sb.ToString();
    }
    
catch (Exception ex)
    {
      
return keyWords;
    }
  }
  
}


//来源:C/S框架网(www.csframework.com) QQ:23404761



C# Code:

/// <summary>
/// 排序比较。被包含的词置后。比如:api,webapi 输出==> webapi,api, api被包含,排序放后面
/// </summary>
public class SortComapre : IComparer
{
  
public int Compare(object x, object y)
  {
    
if (x == null && y == null) return 0;
    
if (x == null && y != null) return -1;
    
if (x != null && y == null) return 1;
    
    x
= x.ToString().ToLower();
    y
= y.ToString().ToLower();
    
    
if (x.ToString() == y.ToString())
    
return 0;
    
else if (x.ToString().Contains(y.ToString()))
    
return -1;
    
else if (y.ToString().Contains(x.ToString()))
    
return 1;
    
else
    
return 0;
  }
  
}


//来源:C/S框架网(www.csframework.com) QQ:23404761



参考文章:


模拟搜索引擎中文自动分词算法精华(CSFramework特别提供C#源码)


C#模拟百度搜索长词自动语义匹配,使用分词算法抽取关键词


C#使用分词算法从文本字符串中抽取关键词模拟百度搜索






扫一扫加微信:
 

版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
C/S框架网
发表评论

评论内容
昵称:
关联文章

模拟搜索渲染HTML页面关键词分组排序算法(C#)
C#模拟搜索长词自动语义匹配,使用分词算法抽取关键词
C#使用分词算法从文本字符串中抽取关键词模拟搜索|CSFramework.COM巨献
CSFramework模拟搜索引擎自动语义分析分词算法(C#)
官网搜索引擎SEO,关键词SEO,搜索分词系统一体化解决方案
原创:CodeHighlighter源代码格式化,代码缩进,关键词着色(C#源码)
C# CodeHighlighter生成的着色HTML源码格式化
Winform开发平台搜索结果
C#推送URL链接到搜索资源平台快速收录URL网址
热烈祝贺C/S框架网搜索关键字排名第一
C#推送链接URL到搜索资源平台提高收录量
模拟搜索引擎中文自动分词算法精华(CSFramework特别提供C#源码)
C#源代码着色类(C/S框架网开源)
C# 格式化CodeHighlighter生成的SQL脚本着色源码(CSFramework.com原创)
ASP.NET Web Forms - HTML 页面
C# 地图坐标获取详细地址
C# WebAPI控制器邮箱验证接口返回自动重定向HTML页面(原创)
C#主动POST推送URL链接到站长平台(支持提交、更新和删除URL链接)
Google和Baidu搜索引擎对比(要加油啊)
C/S快速开发框架多语言功能集成翻译接口(支持中文简体、繁体、英文、越南文)