返回是否包含需要过滤的词,匹配到php 最短匹配的关键词就返回结果

时间: 06:43 来源:投稿 作者:信阳seo
我是信阳seoer,在网上看到很多个人博客都会用地区+seo(譬如我是信阳地区的然后:信阳seo),今天在网上又仔细的看了看先驱们写的中文分词原理。同时本文也是一个百度谷歌实验文,有些地方可能会读不通。
在汉语里根据词性分有:动词,名词,形容词,副词,语气助词等,(信阳seo的我中学真的没怎么学好语文)举个例子好了。
请在百度里搜索:司辅导费法所快乐库房天然天热激发seo
看看能得到什么样的结果:出现的飘红的关键词有,快乐 库房 激发 辅导(第一页里出现的结果)天然(2页) 此后一直到40页都是这几个词飘红,我是可爱的信阳seo。
如果用我们人类的大脑来划分这些词的话,我们可以把它分为 司& 辅导费 辅导 快乐 库房 天然 天然 激发 seo。
但是作为搜索引擎百度来说 有两个词没有分出来:seo 和 辅导费 如果把这几个词人为的划分好然后空格隔开搜呢? 会不会出现我们预想中的结果:seo和辅导费这两个词 会飘红呢?&& 结果让我们很意外,还是没有出现。在试验如果我们调调先后循序呢?(带空格和不带空格都一样) 搜索结果还是那样意外。&& 只要不调动 开头和结尾的两个词(司、seo)以及带有重复的词语的 辅导费和辅导(指的是位置对换)所有的结果基本没有变化 因此我们可以得出一个这样的结论: 百度很看重搜索词的 开头和结尾(我甚至都在猜想,是不是百度分词是根据开头以及结尾的匹配词语,然后组合词语)也就是说搜索词的开头字词 很重要,起着决定搜索结果的作用,重复的词语对结果也有影响。(看过网上写的那些中午分词法你发现的确很吻合)
呵呵,信阳seo ,我想要个好的排名,在信用这个广阔却又狭窄的大地上,住着勇敢的的信阳seo& (这段手法我在网上看到很多为了突出主题相关性的伪原创被广泛应用和群发。却一直不知道信阳seo能在这里起到什么作用?) 而且我对用html语法强调或者标志的词语有点小想法。& 大家都了解的。如果我是上帝(实际上我是信阳seo)我把地球上的所有人种都混在一块,而且都是同性的外貌和体征都一样,唯一不同的是肤色。那么让你从中把他们分成几类(相当于搜索引擎把文字分成一系列词语),请告诉我什么样的方法最好,最快,最有效。& 你一定会说,用肤色分能达到这个效果的。 那么我把很多文字放在一块,然后用个闭合的html标签把它圈出来。是不是就是说,他们是一类的一个整体。(呵呵这只是个猜想,需要试验验证)
信阳seo是信阳地区的信阳人,seo只是个技术,信阳人很爱seo 。
百度最近对我的小博客很不喜欢,会不会分析出来我说过它的坏话? 我拿它和谷歌比过。 难道我一个小小的信阳seo被过滤了?呵呵,信阳seo给大家开了个玩笑。 写自己的博,让别人爱干嘛干嘛去吧。 如果你喜欢的话,请留点外链给我。欢迎大家对我里面的错误之处指正。& 搜索结果来源于: 信阳seo在百度搜索。
围观: 次 | 责任编辑:焦大
3163人浏览
2812人浏览
2094人浏览
1943人浏览
1843人浏览
焦大(ID:zongxiao08)
②群 :  
③群 :  
本站由张易煊管理支持添加否定关键词_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
添加否定关键词
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢用手机扫描以上二维码直接访问此文。
JAVA关键字替换
import java.util.ArrayL
import java.util.HashM
import java.util.L
import java.util.M
import mons.lang3.StringU
* 关键字替换类
public class KeywordFilterService {
private static final char endWord = (char) (1);
@SuppressWarnings(&unchecked&)
private static Map&Character, HashMap& filterMap = new HashMap&Character, HashMap&(1024);
private static List&String& filterWordList = new ArrayList&String&();
private static List&String& replaceWordList = new ArrayList&String&();
@SuppressWarnings(&unchecked&)
public void init() {
filterMap.clear();
filterWordList.clear();
replaceWordList.clear();
// 加载过滤词库
filterWordList.add(&唉呀妈呀&);
replaceWordList.add(&xxxx&);
filterWordList.add(&唉呀&);
replaceWordList.add(&oo&);
if (filterWordList.size() & 0) {
for (String filterWord : filterWordList) {
char[] charArray = filterWord.trim().toCharArray();
int len = charArray.
if (len & 0) {
Map&Character, HashMap& subMap = filterM
for (int i = 0; i & len - 1; i++) {
Map&Character, HashMap& obj = subMap.get(charArray[i]);
if (obj == null) {
// 新索引,增加HashMap
int size = (int) Math.max(2, 16 / Math.pow(2, i));
HashMap&Character, HashMap& subMapTmp = new HashMap&Character, HashMap&(size);
subMap.put(charArray[i], subMapTmp);
subMap = subMapT
// 索引已经存在
// 处理最后一个字符
Map&Character, HashMap& obj = subMap.get(charArray[len - 1]);
if (obj == null) {
// 新索引,增加HashMap,并设置结束符
int size = (int) Math.max(2, 16 / Math.pow(2, len - 1));
HashMap&Character, HashMap& subMapTmp = new HashMap&Character, HashMap&(size);
subMapTmp.put(endWord, null);
subMap.put(charArray[len - 1], subMapTmp);
// 索引已经存在,设置结束符
obj.put(endWord, null);
// 返回是否包含需要过滤的词,匹配到最短的关键词就返回结果
@SuppressWarnings(&unchecked&)
public static boolean hasFilterWord(String info) {
if (StringUtils.isBlank(info) || filterMap.size() == 0) {
char[] charArray = info.toCharArray();
int len = charArray.
for (int i = 0; i & i++) {
int index =
Map&Character, HashMap& sub = filterMap.get(charArray[index]);
while (sub != null) {
if (sub.containsKey(endWord)) {
// 匹配结束
if (index &= len) {
// 字符串结束
sub = sub.get(charArray[index]);
// 将字符串中包含的关键词过滤并替换为指定字符串,然后退回替换后的字符串
// 尽量匹配最长的关键词再替换
@SuppressWarnings(&unchecked&)
public static String getFilterString(String info) {
if (StringUtils.isBlank(info) || filterMap.size() == 0) {
char[] charArray = info.toCharArray();
int len = charArray.
String newInfo = &&;
int i = 0;
String oldInfo = &&;
while (i & len) {
int end = -1;
Map&Character, HashMap& sub = filterM
for (index = index & index++) {
sub = sub.get(charArray[index]);
if (sub == null) {
// 匹配失败,将已匹配的最长字符进行替换
if (end == -1) {
// 没匹配到任何关键词
newInfo += charArray[i];
// 将最长匹配字符串替换为特定字符
for (int j = j &= j++) {
oldInfo += charArray[j];
newInfo = newInfo + replaceWordList.get(filterWordList.indexOf(oldInfo));
oldInfo = &&;
i = end + 1;
if (sub.containsKey(endWord)) {
if (index &= len) {
// 字符串结束
if (end == -1) {
// 没匹配到任何关键词
newInfo += charArray[i];
// 将最长匹配字符串替换为特定字符
for (int j = j &= j++) {
oldInfo += charArray[j];
newInfo = newInfo + replaceWordList.get(filterWordList.indexOf(oldInfo));
oldInfo = &&;
i = end + 1;
return newI
public static void main(String[] args) {
KeywordFilterService filterService = new KeywordFilterService();
filterService.init();
System.out.println(filterService.getFilterString(&唉呀妈呀aa你妈呀唉呀呀呀唉呀呀呀唉呀呀妈呀唉呀妈呀呀呀呀唉呀呀呀唉呀呀&));
用手机扫描以上二维码直接访问此文。
系统分类:&>>&}

我要回帖

更多关于 正则表达式 最短匹配 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信