读书人

强大灵便的脏字过虑:1万字文章过虑1万

发布时间: 2012-09-12 09:21:30 作者: rapoo

强大灵活的脏字过虑:1万字文章过虑1万关键词用时只要1毫秒(包括扩展的高亮功能)

这几天刚整理完Kudy.Net项目中关键词过虑的功能。关键词过虑在网站开发中也算是比较常见的需求了,特别是在SNS社区网站。在网上找的相关文章都达不到我的要求,所以就自己根据过虑的特点专门写了个KeywordFilter,可能满足基本的过虑要求,性能也不错。它有如下特点:

一、允许你自定义匹配到关键词时返回的结果,例如匹配到“日-你”,你可以在原文中显示例如:“”、“**”、“[已过虑]”...

二、允许你按关键词或者关键词的使用频率的排序的优先顺序进行过虑。

三、允许大小写是否敏感(性能上几乎不变),可设置关键词中可跳过的字符,例如设置可跳字符为“☆”,关键词里有“我爱你”,那么“我爱☆☆你”也会被成功过虑。

备注:如果设置了可跳字符,只会过虑有关键词出现的地方,例如上面“我爱☆☆你”过虑后只有“”。(哈哈,发现博客园的过虑并没有这功能)

?

既然是简单的处理过虑,里面当然没有做分词的处理,所以有些句子可能会被误报,只要设置重要的敏感禁用词即可。

打算下个文章给大家讲一下过虑的实现的思路的,另外再发个算法的源码大家学习。?我还想说的是,有的源码不提供出来大家也不用语言攻击,我提供功能出来你要用就用,不用就直接飘过即可,公司项目的源码我怎么会直接放源码出去?

?

实现思路:关键字过虑实现的思路及AhoCorasick高效字符串匹配算法应用(附算法C#实现和测试)

?

更多请关注:?KudyStudio文章目录

功能实现的相关成员有:Keyword、KeywordOrder、KeywordFormatter、KeywordFilterResult、KeywordFilter、HighlightFormatter、Highlighter。

?

1.Keyword类,主要有两个属性,Text和Frequency,分别表示关键词文本与它的使用频率(这个属性是可选的),如果从文本中转换为关键词列表,那文本格式是这样的:

Keyword1

Keyword2

Keyword1|Frequency1

Keyword2|Frequency2

?

强大灵便的脏字过虑:1万字文章过虑1万关键词用时只要1毫秒(包括扩展的高亮功能)

?

上面只是功能上的测试,下面是1000词/1000字文章/300可跳字符10000词/10000字文章/300可跳字符性能上的测试结果,可以看到,小量关键词里,KeywordFilter实例化时间很少,但是达到1万关键词时用了252ms,而过虑所用时间只是从前面的0ms变为1ms,关键词达10万时也只用了11ms(本人电脑的配置情况),可见过虑的高效。大家有兴趣的话请下载测试源码来自己看。

?

强大灵便的脏字过虑:1万字文章过虑1万关键词用时只要1毫秒(包括扩展的高亮功能)

强大灵便的脏字过虑:1万字文章过虑1万关键词用时只要1毫秒(包括扩展的高亮功能)

?

是否过虑成功?那是必须的,一词不漏:

强大灵便的脏字过虑:1万字文章过虑1万关键词用时只要1毫秒(包括扩展的高亮功能)

?

高亮在KeywordFilter的基础上就简单实现了,只是实现了个HighlightFormatter,怎么高亮主要看前缀和后缀,下面是测试html高亮的结果:

强大灵便的脏字过虑:1万字文章过虑1万关键词用时只要1毫秒(包括扩展的高亮功能)

?

读书人网 >编程

热点推荐