• 2007年百度之星程序设计大赛试题初赛题目题3实习生小胖的百度网页过滤器


    题目描述 

         百度网页采集器 (Baiduspider) 每天从互联网收录数亿网页,互联网的网页质量参差不齐。百度的工程师们每天都在改进方法来判断一个网页质量的好坏,使质量差的网页出现在检索结果中较后的位置。现在实习生小胖想到一个很简单的方法来判断一个网页内容的好坏,方法如下: 

        1. 利用数据挖掘技术在互联网语料库中挖掘出一批有特点的词汇,分为好词和坏词两种,好词标上正的权重,坏词标上负的权重; 

        2. 通过好词和坏词词典对每个网页计算网页总权重:从第一个字开始匹配,找到一个好词则加上相应的权重,找到一个坏词则减去相应的权重,下一次匹配将从找到的词末尾的下一个位置开始。 

        3. 坏词采用正向最短匹配:从当前匹配位置开始的若干连续汉字,如果形成多个坏词,则只计算最短的那个坏词的权重,下一次匹配将从这个最短坏词末尾的下一个位置开始。 

        4. 好词采取正向最长匹配:从当前匹配位置开始的若干连续汉字,如果形成多个 “ 有效 ” 好词,则只计算最长 “ 有效 ” 好词的权重,下一次匹配从这个最长 “ 有效 ” 好词末尾的下一个位置开始。 

        5. “ 无效 ” 好词的定义:好词的一部分本身是一个坏词;或者好词的一部分与后续相邻的若干字组成一个坏词。 

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

    输入格式 

    输入第一行为一个字符串(网页正文)。从第二行开始为词典,格式为 “ 词 空格 词的权重 ” 。权重为一个带符号 32 位整数。如果权重为正,则为好词,反之则为坏词;不存在重复的词,不存在权重为 的词。 

    测试数据中的词全部为 1-5 个字的中文,但作为 “ 网页 ” 的字符串中同时包含中文和 ASCII 字符,每个汉字占 个字节。并非 “ 网页 ” 中的所有字都在词典中。 

    样例输入 

    小胖之喷火龙骑士 !! 

    小胖 

    喷火 -1 

    喷火龙 -1 

    火龙 -1 

    龙 

    龙骑 

    龙骑士 

    骑士 -2 

    士 

    输出格式 

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

    样例输出 

    样例解释 

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


    my answer:

    no idea!!!完全木有想法啊!!!!!

    如果是英文,可以用子典树,建一个GOOD树和一个BAD树,其中GOOD树的某些结点标记为DANGEROUS属性,即当后面为某些特定的字符串时无效。

    如果是中文,要怎么办呢?

  • 相关阅读:
    数据结构(2)-链表
    数据结构(1)-数组
    SpringMVC学习总结(一)--Hello World入门
    基本数据类型对象的包装类
    关于String的相关常见方法
    常见的集合容器应当避免的坑
    再一次生产 CPU 高负载排查实践
    分表后需要注意的二三事
    线程池没你想的那么简单(续)
    线程池没你想的那么简单
  • 原文地址:https://www.cnblogs.com/windmissing/p/2559818.html
Copyright © 2020-2023  润新知