2.实习生小胖的百度网页过滤器 
 百度网页采集器(Baiduspider)每天从互联网收录数亿网页,互联网的网页质量参差不齐。百度的工程师们每天都在改进方法来判断一个网页质量的好坏,使质量差的网页出现在检索结果中较后的位置。现在实习生小胖想到一个很简单的方法来判断一个网页内容的好坏,方法如下:
1. 利用数据挖掘技术在互联网语料库中挖掘出一批有特点的词汇,分为好词和坏词两种,好词标上正的权重,坏词标上负的权重;
2. 通过好词和坏词词典对每个网页计算网页总权重:从第一个字开始匹配,找到一个好词则加上相应的权重,找到一个坏词则减去相应的权重,下一次匹配将从找到的词末尾的下一个位置开始。
3. 坏词采用正向最短匹配:从当前匹配位置开始的若干连续汉字,如果形成多个坏词,则只计算最短的那个坏词的权重,下一次匹配将从这个最短坏词末尾的下一个位置开始。
4. 好词采取正向最长匹配:从当前匹配位置开始的若干连续汉字,如果形成多个“有效”好词,则只计算最长“有效”好词的权重,下一次匹配从这个最长“有效”好词末尾的下一个位置开始。
5. “无效”好词的定义:好词的一部分本身是一个坏词;或者好词的一部分与后续相邻的若干字组成一个坏词。

现在小胖已经做好了第1步的工作,有一个好词和坏词的列表(词典),但是由于没有对中文文本处理的程序经验,他想请未来的百度之星们帮他完成这个程序。

输入格式
输入第一行为一个字符串(网页正文)。从第二行开始为词典,格式为“词 空格 词的权重”。权重为一个带符号32位整数。如果权重为正,则为好词,反之则为坏词;不存在重复的词,不存在权重为0的词。
作为“网页”的字符串中同时包含中文和ASCII字符,每个汉字占2个字节。并非“网页”中的所有字都在词典中。

输出格式
输出仅一行,为网页总权重(答案保证不超过带符号32位整数的范围)。

样例输入 例
小胖之喷火龙骑士!!
小胖 6
喷火 -1
喷火龙 -1
火龙 -1
龙 4
龙骑 3
龙骑士 2
骑士 -2
士 3

样例输出 例
7

样例解释
从“网页”中找到的好词为“小胖”和“龙”,坏词为“喷火”和“骑士”。特别要说明一下“龙”被识别为好词的原因——“喷火”和“喷火龙”均为坏词,按正向最短匹配得到“喷火”,接着往下匹配到好词“龙”、“龙骑”和“龙骑士”,但是由于“骑士”是坏词,所以“龙骑”、“龙骑士”无效而“龙”是最长的有效好词。注意题目描述中的匹配规则,好词的“有效”和“无效”只考虑该好词的一部分与后续字是否能够组成坏词,而不考虑和前面的字是否能够组成坏词——样例中的“龙”虽然可以与前面的字组成坏词“喷火龙”和“火龙”,但由于这两个词都是未能匹配成功的坏词,因此对好词“龙”的词性没有影响,可以累积“龙”的权重。

注意事项
输入数据的中文采用GBK编码。
GBK:是又一个汉字编码标准,全称《汉字内码扩展规范》。采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,排除xx7F。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。

评分规则

程序将运行在一台Linux机器上(内存使用不作严格限制),在每一测试用例上运行不能超过1秒,否则该用例不得分;

要求程序能按照输入样例的格式读取标准输入数据,按照输出样例的格式将运行结果输出到标准输出上。如果不能正确读入数据和输出数据,该题将不得分;

该题共有10个测试数据集,前7组数据的大小不超过1K字节,数据8和数据9不超过600K字节,数据10的网页正文不超过1M字节。所有数据的词典不超过50,000项,且词典中的词保证由1到5个汉字组成。词典不包含重复的单词;

该题目20分。

 基本方法:1.由于中英文,所以我把字符串解析成数组装载每个支付,截取字符串也另写了函数,对解析后的数组截取,由于要解析字符串为数组,所以长字符串会花些时间,可这样可以免去判断中英文的,而方便了许多

2.先判断位置是否存在坏词,存在取最短,若不存在坏词,说明可能存在好词,并判断有效好词,存在记录其名字和权重,最后把数组里权重求和,即可得到结果

php 代码录下:

<?php
set_time_limit(0);
//实习生小胖的百度网页过滤器
//解析字符串中英文支付,成为字符数组,得长度
//$fustr='dddddddddddddgdg大股东广东';//带解析的字符串
function str_arr($fustr,$mudi=1)
{$wz=0;
$arr=array();
while($wz<strlen($fustr)){
$zifu=$fustr[$wz];
if(ord($zifu)>127){$str=$zifu.$fustr[$wz+1];$wz=$wz+2;}

else{$str=$zifu;$wz++;}

$arr[]=$str;//放到数组里

}//end while($wz<strlen($fustr))
if($mudi==1)return $arr;
else return count($arr);
}
//测试
//$arr=str_arr($fustr,$mudi=1);
//print_r($arr);

//end 解析字符串

//截取函数,截取字符串数组,得到部分字符串
//$arr=array();//字符串数组
$ks=0;//截取开始位置
$long=10;//截取长度,多少个字符

function jiequ($arr,$ks,$long=0){
if($ks+$long>count($arr))return false;
$str='';
$maxlen=count($arr);
if($long==0)$end=$maxlen;
else $end=$ks+$long;
for($i=$ks;$i<$end;$i++){
$str.=$arr[$i];
}

return $str;

}

//echo jiequ($arr,$ks,$long);

//权重计算

function get_rank($fustr,$biaostr)
{
echo '当前要获得权重的字符串:'.$fustr.'<br>';
$ciarr=explode('#',$biaostr);
$haoarr=array();
$huaiarr=array();
$save=array();
//好坏词分组
for($i=0;$i<count($ciarr);$i++){
$t=explode('|',$ciarr[$i]);
$name=$t[0];
$zhi=$t[1];
if($zhi>0)$haoarr[]=array($name,$zhi);
else $huaiarr[]=array($name,$zhi);
}

$wz=0;
$strarr=str_arr($fustr);//解析为数组进行截取,可以不考虑中英文
$maxlen=count($strarr);//网页字符串长度
while($wz<$maxlen){
//首先判断是否有坏词,优先级高于好词
$jishu=0;
for($i=0;$i<count($huaiarr);$i++){
$ci1=$huaiarr[$i][0];
$rank=$huaiarr[$i][1];//词的权重
$len=str_arr($ci1,2);//坏词长度
if($wz+$len>$maxlen)continue;//超过最大长度,跳过
$ci2=jiequ($strarr,$wz,$len);
//路过词1和2相同,记录下来,并比较后面是否有更短的,有则覆盖
 if($ci1==$ci2){
 $jishu++;
 if($jishu==1){$huaici=$ci1;$saverank=$rank;$savelen=$len;}
 //路过不是第一次,比较新词与保留的长短,取短的
 else{
 if($len<$savelen){$huaici=$ci1;$saverank=$rank;$savelen=$len;}
 
 
 }//end
 
 }//end  if($ci1==$ci2

}//end for($i=0;$i<count($huaiarr);

//判断是否有坏词匹配,有则记录,并设置下一个查询位置
if($jishu>0){
$wz=$wz+str_arr($huaici,2);
$save[]=array($huaici,$saverank);
 
}
//路过没有匹配坏词,可能存在好词,若不存在,位置下移一位
else{
$jishu=0;
for($i=0;$i<count($haoarr);$i++){
$ci1=$haoarr[$i][0];
$rank=$haoarr[$i][1];
$len=str_arr($ci1,2);
if($wz+$len>$maxlen)continue;
$ci2=jiequ($strarr,$wz,$len);
//路过词相同,有好词,需要判断是否是有效好词
if($ci1==$ci2){
//判断是否是有效好词,遍历该词区间,无坏词,则说明是有效的,否无效
if($jishu>0&&$len<$savelen)continue;
$wuxiao=0;
$ks=$wz+1;//查询最先位置,由于$wz已是无坏词,所以从下一位开始
$js=$wz+$len-1;//查询最后位置
$end=0;
//开始判断,第一重循环,设置位置,第2重判断
for($i1=$ks;$i1<=$js&&$wuxiao==0;$i1++){
$kswz=$i1;
$you=0;
for($i2=0;$i2<count($huaiarr);$i2++){
$ci3=$huaiarr[$i2][0];
$len3=str_arr($ci3,2);
if($kswz+$len3>$maxlen)continue;
$ci4=jiequ($strarr,$kswz,$len3);
if($ci4==$ci3){$wuxiao=1;break;}

}//end for($i2=0;$i2<count($huaiarr)

}//end for($i1=$ks;$i1<=$js
//路过是有效的,记录下来
if($wuxiao==0){
$jishu++;
if($jishu==1){
$haoci=$ci1;
$saverank=$rank;
$savelen=$len;
}//end if($jishu==1)

else{
if($len>$savelen){
$haoci=$ci1;
$savelen=$len;
$saverank=$rank;

}//end if($len>str_arr($haoci,2))

}//end 非第一个有效好词

}//end if($wuxiao==0)

}//end if($ci1==$ci2)

}//end for($i=0;$i<count($haoarr)

if($jishu>0){
$wz=$wz+$savelen;
$save[]=array($haoci,$saverank);

}

else $wz++;

}//end 可能存在好词

}//end while($wz<$maxlen)
echo  '<br><br>';
echo  '获得的好词坏词数组录下:<br>';
print_r($save);

$rank=0;

for($i=0;$i<count($save);$i++){

$rank=$rank+$save[$i][1];

}

return $rank;//返回计算后的权重

}

//下面是一个测试
$fustr='ddd马格  stri小胖ng 龙骑士left = li龙骑士骑士ne.substr( 0, j );
     strsfsinf sf sf= line.小胖substr( j + 2*i, linfesfsizsffe() - 2fs*fi - j );
     GetsVsffsfalsusfe(sfd legdgft, di + 1 );f
    
火龙骑士 !!ddddd的?   ??s     火龙  骑士  骑士骑士??????德国法国人头dgdg大股东广东';//带解析的字符串
$biaostr='小胖|6#喷火|-1#喷火龙|-1#火龙|-1#龙|4#龙骑|3#龙骑士|2#骑士|-2#士|3';

$rank=get_rank($fustr,$biaostr);
echo  '<br><br>';
echo  '该字符串权重:'.$rank;;

?>

输出效果图:

php解:2007百度之星5月27号初赛题---------2实习生小胖的百度网页过滤器相关推荐

  1. 2008年国家公务员面试2月27号真题

    <script language='javascript' src='http://www.taizhou.la/AD/ad.js'></script>   2008年国家公务 ...

  2. 百度之星12月30号题目之维基解密

    维基解密 Time Limit: 1 Seconds   Memory Limit: 65536K 在最近一期的维基解密中,公布了一串神秘的数字,这引起了很多的猜想. 但是只有百小度知道其中的含义-- ...

  3. 2012百度之星冬季赛第二场第二题 消去游戏I

    2012百度之星冬季赛第二场第二题 消去游戏I 题目: Alice和Bob又开始发明新游戏了,这回的名字叫消去游戏. 消去游戏的道具是一堆排成一行的积木,每个积木上面都有一个数字Ai.同时游戏也需要M ...

  4. MF_RC522_射频识别参考程序注释(2018年4月27号)

    MF_RC522_射频识别参考程序注释(2018年4月27号) https://wenku.baidu.com/view/478e6bb17f1922791688e8f8.html

  5. 家庭主夫怎么在今年3月27号的市场中利用金叉死叉进行波段操作

    小孙我自己很久之前就对证券市场很感兴趣,从大学开始,就不断地在理论实践两方面逐渐加深对于金融市场的理解,最近发现一个叫QR量化社区的平台,也给了自己很多灵感.经历了最近的市场波动,心血来潮,在此就分享 ...

  6. 2022年5月8号补题

    title: 5月8号补题 date: 2022-05-08 10:37:59 author: "胡耀文" categories: "算法" tags: &qu ...

  7. 10月27号吃鸡服务器维护吗,10月27日正式服维护公告

    亲爱的玩家: 大家好!为给大家带来更好的游戏体验,<笑傲江湖OL>正式服将进行例行维护. 维护时间:10月27日8:00-10:00 [重点调整] ·开放玲珑门派场景,新老玩家在三大主城驿 ...

  8. AI一分钟 | 小米MIX 2S将于3月27号发布,搭载骁龙845;张朝阳:在研究区块链 但相信AI的力量

    一分钟AI 华为确认P20系列即将登陆巴黎,AI加成拍照功能更出色 张朝阳:在研究区块链,但相信AI的力量 Waymo无人车新专利,根据乘客身体状况选择合适的路线,可为易晕车乘客选择平坦路线 新款 A ...

  9. 7月27号王者荣耀进服务器未响应,《王者荣耀》7月27日体验服停机更新公告 快来看看今天的更新内容吧...

    亲爱的召唤师: 为了增加版本的稳定性,我们计划在2021年7月27日19:50-20:50对<王者荣耀>体验服进行停机维护. [更新时间]7月27日19:50-20:50(19:25关闭P ...

最新文章

  1. Bengio实验室推出开源AI药物研发平台,唐建领队、清北上交学生参与开发
  2. linux boost内存池,C++ boost库教程之内存池
  3. 查看表状态及索引碎片语句
  4. 安装包损坏无法安装怎么办?关于更新big sur系统后软件下载无法安装问题的解答
  5. 使用C#在应用程序间发送消息
  6. 每个人都应该知道的Android Studio快捷方式
  7. python有什么内容_python的类(简介,没什么内容)
  8. windows mysql 和linux mysql解决乱码问题
  9. 黑马程序员最新版JavaWeb综合案例(前后端完整版)
  10. 移动光猫固件备份、刷机、改sn和mac等
  11. BOSS直聘数据采集、解析处理、分析与可视化实战
  12. win10系统字体 chrome 修改苹果字体
  13. python单例装饰器_python单例模式和装饰器
  14. 微创新:粉丝电子商务及微博的9种盈利模式
  15. Excel如何快速筛选?
  16. 暗影精灵2pro装Linux系统,暗影精灵2不支持linux双系统吗?
  17. rtos系统c语言,让我们来学习RTOS,自己写RTOS
  18. 2018河南省第十一届ACM省赛之旅。。。
  19. 模型可解释性-LIME
  20. 破解大数据孤岛化 SaaS主流厂商共建开放标准

热门文章

  1. 开个博客,以今日为起点,时间六个月——未来一念之间!
  2. 在线订机票系统用例说明
  3. Android系统多语言设置
  4. 新消息,ChatGPT停止注册、大面积封号?
  5. 欧拉路径和欧拉回路(Euler Path and Euler Circuit)解释
  6. 365家装智选联盟:装修时砖要怎么选?不要慌,这里告诉你!
  7. 分享5个计算机专业毕业总结
  8. Android版本铎A梦幻连连看游戏源代码完整版
  9. 18070 矩阵行交换或列交换
  10. bem什么意思_管壳式换热器BEM什么意思