版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录1.2.系统模块与分工5GoodsSearch 模块5概述5类图7类描述8Remover 类8RemoveStrategy 接口8RemoveStrategyA、RemoveStrategyB、类8Seperator 类9SeperateStrategy 接口10SeperateStrategyA、SeperateStrategyB、类10SynonymsMatcher 类10MatchStrategy 接口11MatchStrategyA、MatchStrategyB、类11ISearcher 接口:11Searcher 类:11SearchStrategy 接口12SearchStra
2、tegyA、SearchStrategyB 类12Worker 类13Cache 类13Result 类13重要协作13设计模式14策略模式14模式162.5.2GoodsFilter 模块163.1 概述163.2 类图18类描述18Configrable 接口:18NegativeGoodsFilter 类:193.3.3. Filter 接口:19URLFilter 类:19ContentFilter 类:19NegativeGoodsDb 类:19Result 类:20重要协作20设计模式213.5.1 策略模式21GoodsSort 模块223.4.概述22类图26类描述26Scor
3、ingFilter 接口26ScoringFilters 类264.3.3. WebGraph 类274.3.4 LinkR类28重要协作28使用的设计模式294.5.1 策略模式29patibler 模块30概述30类图31类描述31Shower 类31ShowGoodsArrStrategy 抽象类32ShowGoodsArrStrategyA、ShowGoodsArrStrategyB 类32MyBrowserFunction 接口32MyFunctionAdapterA 类32KernalA 类32重要协作32使用的设计模式33适配器模式33策略模式34桥接模式354.14.24.34
4、.44.55.5.15.25.35.45.5BuyGoods 模块366.1 概述366.2 类图36类描述36IshopHandler 接口36ShopHandler 类37Address 类37IB接口376.3.5 B类38重要协作38设计模式38策略模式38MVC 模式38Advertising 模块387.1 概述387.2 类图397.3 类描述396.7.IAdManager 接口39AdManager 类397.5 设计模式407.4.1 MVC 模式40EaseUse 模块408.1 概述408.2 类图40类描述41INavigationHandler 接口41Naviga
5、tionHandler 类41Navigation 类41CSS_Style 类41重要协作42设计模式42MVC 模式42Security 模块429.1 概述429.2 类图43类描述44重要协作44设计模式45Cluster 模块详细设计4610.1 概述4610.2 类图48类描述48重要协作49设计模式50ZoneMaster 模块5111.1 概述5111.2 类图51类描述52类描述52DBService 类图55重要协作56设计模式57模式57Factory 模式58CrawlerController 模块5812.1 概述5812.2 类图59类描述59重要协作628.9.1
6、0.11.12.12.5 设计模式65模式65中介者模式66策略模式67ContentSort 模块6713.1 概述6713.2 类图6913.3 类描述6914.4 重要协作7015.5 设计模式71CommentChecker 模块7214.1 概述7214.2 类图7414.3 类描述7513.14.14.3.1 Module 1:CommentProsor 类7514.3.2 Module 2:敏感评论处理76重要协作79使用的设计模式79xx 模式79WebCrawler 模块8015.1 概述8015.2 类图8015.3 类描述8115.CrawController 接口81U
7、RLItem 类81URLQueue 类81CrawIteratorStrategy 类81DepthProIterator 类82WidthProIterator 类82FetchURLStrategy 类8215.3.115.3.215.3.315.3.415.3.515.3.615.3.715.3.815.3.9URL 类82FetchFetchDangDangURL 类8215.3.10 FetchDataStrategy 类82Data 类8315.3.11 Fetch重要协作83设计模式83策略模式83迭代器模式8315.415.51. 系统模块与分工2. GoodsSearch
8、模块2.1概述承担的需求(主要)要求根据用户提供的检索条件实现快速的匹配(响应时间过 2s),根据对输入词汇处理之后的结果获得相应的检索结果。搜索引擎已经建立的索引,并通过一定的匹配算法,该模块还需要处理输入的词汇,因此包含一个词汇处理器:负责根据在系统中的词汇扩展表对该进行引申扩展,识别查询目的,得到一个相近词汇的列表从输入中去掉一些使用很频繁但却没有实际意义的次,比如英文文本中的 a, an, the 等,中文文本中的了,的,吧等。分析输入的语汇单元,以便从词 语中去掉一些不必要的字符以找到它们的词干,然后根据列表中的词汇在系统已 有的网页列表中进行搜索,对获得的结果进行合并并且以分页的方
9、式返回给用户。用例图如下:模块名设计者GoodsSearch GoodsFilter GoodsSortpatibler BuyGoods Advertising EaseUse Security Cluster ZoneMasterCrawlerController ContentSort CommentChecker WebCrawlerDB 表结构设计府洁蓝用例图解释:词汇处理模块把用户输入的搜索条目进行分析,分成有搜索意义的关键字,并进行同义词处理。索引器从分析模块得到索引表,返回全文索引目录。缓存器提供高频搜索词汇的检索结果,若检索命中则直接返回检索结果;由于用户高频词汇会产生变更,
10、缓存器还需要定期从索引器提供的倒排索引文件中更新高频词汇检索结果。检索器检测索引通道的连通性,若能连通再开始下面的工作,若不能,则返回异常。检索器接收词汇处理器给出的检索对象,然后进行初始化,准备开始检索检索器检索是,先检查高频是否命中,若命中则从缓存中进行检索,若没有命中,则向索引器发出请求,得到索引表后检索。检索完毕后,检索器获得检索结果细节,将其发送到排序模块。可能会修改的实现(次要高频无关词汇剔除算法 同义词匹配算法检索匹配算法角色)1) 检索功能:从词汇分析器得到的查询请求,把其转化成规范化检索式,再根据检索策略先在缓存中的高频词汇检索结果中检索,如果未命中,就到索引数据库中进行匹配
11、,最后将搜索结果返回给排序模块。2) 输入分析功能:对用户关键字进行处理和分析,可以处理的形式,使得对索引的检索成为可能。关键字,并将其转换成建立缓存:为了能在极短的时间内(响应时间2s)响应用户的查询请求,搜索引擎需要为那些查询最频繁的页面建立缓存机制。原因如下:经过统计,关键字查询的集中现象非常明显,查询次数最多的前 20%的关键字大约占了总查询次数的 80%(即著名的 80/20 法则)。因此,只要对前 20%左右的关键字建立缓存就可以满足 80%的查询需求。由于互联网中的信息时刻都在增长,如果搜索引擎每次都返回给用户同样的信息,不但用户得不到高质量的信息,其它也不能向用户展示的高质量信
12、息,从而造成信息滞后。因此,搜索引擎还要对缓存中的内容进行定期更新。4)角色流程图:对外提供接口void request();2.2 类图2.3 类描述2.3.1 Remover 类该类的职责是去除高频无关词汇。如上述类图所示:有三个属性: removed_words(去除高频无关词汇之后的语句)和 user_words(用户初始输入), remove_strategy(剔除算法),并且都是 private 类型。类方法:void setUserWords(String ):设置成员变量 user_words,保存过剔除无关词汇操作的字符串。void setRemoveStrategy(Rem
13、oveStrategy ):组合模型表明在 Remove 类的构造函数中其实就已经指定了剔除算法 (RemoveStrategy), 但为了更好地动态指定不同的剔除算法,可以使用setRemoveStrategy 方法来重设 Remove 对象的 remove_strategy 成员变量。前置条件:Remove 对象已经被初始化;后置条件:Removed 对象的remove_strategy 成员变量被重新设置为新的算法对象。String performRemove(String):Remove 类的算法。该方法对传入的字符串按照算法 remove_strategy 进行高频无关词汇的剔除操作
14、(即调用 remove_strategy 的 remove()方法),并将剔除无关词汇后的结果保存到 removed_words 中。前置条件:成员变量 remove_strategy 已经被初始化;后置条件: 剔除高频词汇后的结果被保存到了 removed_words 中,并返回。String getRemovedWords() :该方法获得去除高频无关词汇之后的字符串,返回成员对象 removed_words。前置条件:performRemove()方法已被执行;后置条件:返回成员变量 removed_words。2.3.2 RemoveStrategy 接口为了使得不同的剔除算法能够被更
15、好地复用,以及避免未来剔除算法可能的变更对现有的行为类造成影响,使用策略模式将剔除算法抽象成接口,在该接口中方法 remove() ,这由具体的 RemoveStrategy 类( 在此图中为 RemoveStrategyA、RemoveStrategyB)去实现该方法。2.3.3 RemoveStrategyA、RemoveStrategyB、类该些类是接口 RemoveStrategy 接口的具体实现类,它们实现接口中定义的方法,并且数量可能在将来增加。类方法:String remove(String):该方法实现接口中定义的 remove()方法,参数为需要被进行高频无关词汇剔除操作的字
16、符串,返回值为剔除过后的字符串。2.3.4 Seperator 类该类的职责是将去除了高频无关词汇后的字符串分解成多个。如上述类图所示: 有三个属性: removed_words( 去除高频无关词汇之后的语句) 和 seperated_words(被分解成多个关键字的 String 列表),seperate_strategy(分解算法),并且都是 private 类型。类方法:void setRemovedWords(String ):设置成员变量 removed_words,保存过分解操作的字符串。void setSeperateStrategy(SeperateStrategy ):组合模
17、型表明在 Seperator 类的构造函数中其实就已经指定了分解算法(SeperateStrategy), 但为了更好地动态指定不同的分解算法,可以使用setSeperateStrategy 方法来重设 Seperate 对象的 seperate_strategy 成员变量。前置条件:Seperator 对象已经被初始化;后置条件:Seperator 对象的 seperate_strategy 成员变量被重新设置为新的算法对象。String performSeperate(String):Seperate 类的算法。该方法对传入的已经经过高频无关词汇剔除操作的字符串按照算法 seperate_
18、strategy 进行提取操作(即调用 separate_strategy 的separate()方法),并将提取后的结果保存到 seperated_words 中后返回该数组。前置条件:成员变量 seperated_strategy 已经被设置,传入的 String 类型的参数已经经过了高频无关词汇剔除操作;后置条件: 分解后的变量中。被保存到了seperated_words 字符串数组类型的成员String getSeperatedWords() :该方法获得分解过后保存若干个seperated_words。前置条件:performSeperate()方法已被执行;后置条件:返回成员变量
19、seperated_words。的字符串数组, 返回成员对象2.3.5 SeperateStrategy 接口为了使得不同的分解算法(提取算法)能够被更好地复用,以及避免未来分解算法可能的变更对现有的行为类造成影响使用策略模式将分解算法抽象成接口,在该接口中方法 seperate(),这由具体的 SeperateStrategy 类(在此图中为 SeperateStrategyA、SeperateStrategyB)去实现该方法。2.3.6 SeperateStrategyA、SeperateStrategyB、类该些类是接口 SeperateStrategy 接口的具体实现类,它们实现接口中
20、定义的方法,并且数量可能在将来增加。类方法:String seperate(String):该方法实现接口中定义的 seperate()方法,参数为需要被提取,并且已经经过高频无关词汇剔除的字符串,返回值为提取的列表。2.3.7 SynonymsMatcher 类该类的职责是匹配同义词,获得同义词列表。如上述类图所示:有三个属性:original_words(被提取出来的)和 matched_words(对匹配后的近义词列表),match_strategy(匹配算法),并且都是 private 类型。类方法:void setOriginalWords(String ):设置成员变量 origi
21、nal_words,保存要被进行同义词匹配的参数值。void setMatchStrategy(MatchStrategy ):组合模型表明在 MatchStrategy 类的构造函数中其实就已经指定了同义词匹配算法(MatchStrategy), 但为了更好地动态指定不同的匹配算法,可以使用setMatchStrategy 方法来重设SynonymsMatcher 对象的match_strategy 成员变量。前置条件:SynonymsMatcher 对象已经被初始化;后置条件:SynonymsMatcher 对象的match_strategy 成员变量被重新设置为新的算法对象。String
22、 performMatch(String):SynonymsMatcher 类的算法。该方法对传入的字符串按照算法match_strategy进行同义词匹配操作(即调用 match_strategy 的 match()方法),并将同义词转化后获取的结果保存到 matched_words 中。前置条件:成员变量 match_strategy 已经被初始化;后置条件: 进行同义词转换后获取的结果被保存到了matched_words 中并返回该数组。String getMatchedWords() :该方法获得对matched_words。进行同义词转换后的字符串数组, 返回成员对象前置条件:per
23、formMatch()方法已被执行;后置条件:返回成员变量 matched_words。2.3.8 MatchStrategy 接口为了使得不同的同义词匹配算法能够被更好地复用,以及避免未来匹配算法可能的变更对现有的行为类造成影响,使用策略模式将匹配算法抽象成接口,在该接口中方法 match(), 这由具体的 MatchStrategy 类(在此图中为MatchStrategyA、MatchStrategyB)去实现该方法。2.3.9 MatchStrategyA、MatchStrategyB、类该些类是接口 MatchStrategy 接口的具体实现类,它们实现接口中定义的方法,并且数量可能
24、在将来增加。类方法:String match(String):该方法实现接口中定义的 match()方法,参数为需要进行同义词匹配,已经被提取出来的列表。字符串,返回值为对该进行同义词匹配后的同义词字符串2.3.10 ISearcher 接口:ISearcher 是检索器的实现接口,主要定义了检索的方法和理对集群服务器的请求。的方法。用于处2.3.11 Searcher 类:Searcher 是检索器的具体实现类,主要负责初始化( init() ), 作为 Remover/Seperator/SynonymsMatcher 类的控制中心,对用户输入进行关键字提取和同义词转换后,检索缓存,检索索
25、引表,等方法。目的是为了在搜索时首先从缓存中找结果,如果不能命中则去索引表中找。类方法:void init():检索初始化。前置条件:缓存传送更新或检索请求;后置条件:检索器初始化配置完毕,或者更新缓存完毕。():定期检测与索引库是否连通。前置条件:系统时钟定期倒计时结束;后置条件:调用之后服务器集群返回特定信息,表示连接没有问题。ArrayList performSearch(String, String):该方法为 Searcher 类的方法,它利用成员变量 search_strategy 的 search 方法,对经过处理后的检索条件进行检索,先检索缓存,后检索索引表。前置条件:在缓存库
26、中未命中,且配置已经初始化;后置条件:按照请求对索引表进行查询。ArrayList readFormCache(String ):从 Cache 缓存中检索结果前置条件:用户输入已经被处理成检索条件;后置条件:从缓存中检索到的结果保存在了 ArrayList中。void setSearchStrategy(SearchStrategy ):组合模型表明在 SearchStrategy 类的构造函数中其实就已经指定了检索算法(SearchStrategy), 但为了更好地动态指定不同的检索算法,可以使用setSearchStrategy 方法来重设 Searcher 对象的 search_str
27、ategy 成员变量。前置条件:Searcher 对象已经被初始化;后置条件:Searcher 对象的 search_strategy 成员变量被重新设置为新的算法对象。2.3.12 SearchStrategy 接口为了使得不同的搜索算法能够被更好地复用,以及避免未来搜索算法可能的变更对现有的行为类造成影响,使用策略模式将搜索算法抽象成接口,在该接口中方法 search() , 这由具体的 SearchStrategy 类( 在此图中为SearchStrategyA、SearchStrategyB)去实现该方法。2.3.13 SearchStrategyA、SearchStrategyB 类
28、该些类是接口 SearchStrategy 接口的具体实现类,它们实现接口中定义的方法,并且数量可能在将来增加。类方法:ArrayList search(String itemType,String description):该方法实现接口中定义的 search()方法,参数 str1 为 itemType,检索商品的类型, str2 为商品描述相关的关键字,该关键字从用户的商品描述中提取,已经经过高频无关词汇剔除、息。分解、同义词的字符串转换,返回值为检索到的商品信Worker 类2.3.14用来定时测试索引表与检索器之间的连通性。类方法:void run():测试索引表与检索器之间的连通性
29、。2.3.15 Cache 类缓存类,搜索器可以到缓存中去搜索跟关键字匹配的结果。Cache 类库中保存的特定商品的表,它存放着查询率较高的商品数据。类方法:String getDirectory():前置条件:缓存库未命名高频词汇,需要从索引表中检出;后置条件: 对索引表进行定位,并准备进行初始化操作。为数据ArrayList performSearch(String,String):前置条件:缓存库中存在高频词汇,且配置已经初始化;后置条件:开始进行缓存库中的查询void refresh():更新缓存表。2.3.16 Result 类Result 为搜索结果类,代表单条搜索结果,包括匹配领
30、域(String fields),相关商品对象列表(ArrayList goods_arr),所在以判断是否为高频结果。(url),命中数(hitNum),用2.4 重要协作顺序图:状态图:2.5 设计模式2.5.1 策略模式策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们之间可以相互替换。策略模式让算法独立于使用它的客户而独立变化。它提供了一种替代继承的方法,而且既保持了继承的优点(代码重用),还比继承更灵活(算法独立,可以任意扩展)。同时避免程序中使用多重条件转移语句,使系统更灵活,并易于扩展。策略模式还遵守大部分 GRASP 原则和常用设计原则,聚、低偶合。如下图所示:在检
31、索模块中,由于质量属性中明确提出无关词汇剔除算法、同义词匹配算法、检索算法可能会在以后变更,因此必项将各个算法模块封装起来,实现同一个接口 RemoveStrategy,MatchStrategy,SearchStrategy 以便以后可以方便地修改。如果要新增算法,增加一个算法类,实现对应接口,并在的时候将指向新的算法类或者调用 setStrategy()方法动态绑定即可;如果要移除算法,移除对应的算法类并更新的即可;如果要修改算法,可在不修改接口的前提下修改算法类的类图体现:即可,保证了聚和低耦合。模式2.5.2使用象可以是示:模式可以创造代表对象,让代表对象控制对某对象的,被的对的对象,
32、创建开销大的对象,或者需要安全控制的对象。如下图所模式与本检索模块中本地检索请求与集群服务器的关系是一致的,经过细致的分析,采用了的设计模式。由去控制,使得检索就像在本地进行一样。可以隐藏对象不在本地的事实,处理信,并对客户隐藏该通信过程。类图体现:进程实际对象需要的通3. GoodsFilter 模块3.1 概述承担的需求(主要)商品信息过滤模块是对搜索模块初步检索出来的结果集进行商品过滤。又由于系统要符合,且商品信息随时可以调整,因此要求过滤规则具有方便快捷的可修改性、可扩展性和灵活性。质量属性要求:商品搜索要求具有很高的可修改性、可扩展性,而变更的部分主要是待过滤商品信息的变化。因此该模
33、块的设计就要着重考虑词库的可扩展性和可修改性,可以灵活变更又不影响其他模块的调用。同时,由于搜索返回结果往往比较庞大,待过滤商品库也较庞大,因此商品过滤效率也直接影响到用户体验,需要尽量采用高效的过滤算法。用户总共进行商品查询的时间不能多于 2s。商品过滤用例图:用例描述:增删改表进行商品信息列表:能在搜索引擎灵活扩充、修改商品信息过滤:对初步搜索结果集的 url进行简单的比对过滤商品信息表,对初步搜索结果进3)对结果集进行商品信息过滤:根据行全文索引搜索,对于其中多次出现商品的搜索结果进行过滤剔除。可能会修改的实现(次要商品信息库过滤算法角色)1.增删改能在系统商品信息库灵活扩充、修改商品信
34、息库。2.对结果集进行过滤筛选主要进行过滤和全文信息检测过滤。对外提供接口与界面模块的接口public void updateNegativeGoodsDb (Text NegativeGoods) throws IOException;与进程通信相关的接口public CrawDatum filtrateNegativeGoods (Text url, CrawlDatum datums) throws NegativeGoodsFilterException;3.2类图3.3类描述过滤模块主要基于配置式编程的(适应可修改性与可扩展性),因此主要的商品过滤类 NegativeGoodsFil
35、ter 实现了 Configurable 接口,通过配置文件来进行商品的比对过滤。同时 Filter 的继承树负责具体过滤算法的差异性封装,而 NegativeGoodsDb 负责商品词库的实时更新和功能。3.3.1 Configrable 接口:类方法public void config(String configFile) throws IOException:配置文件进行初始化前置条件:后置条件:商品信息文件配置完成商品信息库正确初始化3.3.2 NegativeGoodsFilter 类:外部模块调用其进行类方法商品信息过滤,它实现了Configurable 接口。public voi
36、d config(String configFile) throws IOException:配置文件进行初始化public ArrayListthrows FilterException:前置条件:搜索模块后置条件:返回进行filtrateNegativeGoods (ArrayList result, Text url)完成,输入初步搜索结果;商品信息过滤后的数据,无异常错误警告。3.3.3. Filter 接口:为了使得不同的过滤算法能够被更好地复用,以及避免未来过滤算法可能的变更对现有的行为类造成影响,使用策略模式将过滤算法抽象成接口,在该接口中类方法方法 filtrate()。pub
37、lic void filtrate(String configFile) throws SensitveWordException:过滤操作3.3.4 URLFilter 类:负责过滤包含特定类方法的搜索结果public void setUrlConfig(Configuration config):设置过滤规则和条件3.3.5 ContentFilter 类:负责根据类方法商品词库对搜索结果进行全文索引过滤public void setWordConfig(Configuration config):设置过滤规则和条件3.3.6 NegativeGoodsDb 类:负责类方法商品词库的实时扩
38、展和更新同步public void init():初始化过滤商品词库public void updateNegativeGoodsDb(Text words):更新商品词库前置条件:商品信息需要更改与扩展后置条件:无异常错误警告3.3.7 Result 类:Result 为搜索结果类,即模块 1(高易用性搜索)中传入的结果数据类型,代表单条搜索结果,包括匹配领域(String fields),相关商品对象列表(ArrayListgoods_arr),所在(url),命中数(hitNum),用以判断是否为高频结果。3.4 重要协作顺序图状态图3.5 设计模式3.5.1 策略模式策略模式定义了一系
39、列的算法,并将每一个算法封装起来,而且使它们之间可以相互替换。策略模式让算法独立于使用它的客户而独立变化。它提供了一种替代继承的方法,而且既保持了继承的优点(代码重用),还比继承更灵活(算法独立,可以任意扩展)。同时避免程序中使用多重条件转移语句,使系统更灵活,并易于扩展。策略模式还遵守大部分 GRASP 原则和常用设计原则,如下图所示:聚、低偶合。在过滤模块中,由于质量属性中明确提出商品过滤算法可能会在以后变更,因此必项将算法模块封装起来,实现同一个接口 Filter 以便以后可以方便地修改。如果要新增算法,增加一个算法类,实现对应接口,并在的时候将指向即可;新的算法类即可;如果要移除算法,
40、移除对应的算法类并更新的如果要修改算法,可在不修改接口的前提下修改算法类的聚和低耦合。类图体现:即可,保证了4. GoodsSort 模块4.1 概述承担的需求(主要)用户向系统提交商品描述查询信息后,系统就在结果页面返回与该关键字相关的页面,这些页面按照如下三个规则进行排序后返回给用户:根据与用户描述的相关度排序,相关度越大,越靠前;根据各大商城之间的统计越前),依据如下:(数据库中关于商品的爬取数量,数量越大,在计算出与相关度较高的网页中,利用类似的 PageR排序算法(基于“从许多优质的网页过来的网页,必定还是优质网页”的回归关系,来判定所有网页的重要性)计算出页面的得分,由得分的大小准
41、确地排列出页面结果集,并且能灵活快速的支持排序算法的可变性。另外,该模块需要负责对返回数据按照竞价规则进行质量属性要求:调整。能准确地按照重要性和相关性排列出结果,过顺序错误的文档数/文档总数来测得。商品排序用例图率不超过 1%,这个变量可以通用例图解释:1) 此模块与搜索模块返回的搜索结果关系及其密切,对外抽象为一个分数过滤器 SortingFilter,输入的为词。2) 计算用户查询语句中的每一个每一个结果页面的相关度。的搜索结果集,同时还传入了用户的查询关键在其所在文档中的重要性,从而计算出3) 将结果集先按相关度排序,取前面部分进行类 PageR算法的得分计算4) 对于上述单纯基于内容
42、正确性的结果集排序,再根据竞价等商业,对其中一些商业的进行微调,最终把排序返回给调用者。可能会修改的实现(次要排序算法竞价策略角色计算相关度)通过用户输入的进行语法分析匹配,计算文档中出现的次数、频率以及有效性,从而通过特定公式得出该文档与的相关度。计算得分对满足相关度最低要求的文档,通过类 PageR体算法步骤:PageR的具体算法:方法进行的得分计算。具将某个页面的 PageR除以存在于这个页面的正向,由此得到的值分别和的页面的 PageR。正向所指向的页面的 PageR相加,即得到了被概念图如下详细地研究一下,便可以得出提高 PageR的要点,大致有 3 个。反向反向反向数 (单纯的意义
43、上的受欢迎度指标)是否来自源页面的度高的页面 (有根据的受欢迎指标)数 (被选中的几率指标)PageR算法概念图PageR计算方法原理:作为最基本的考虑方法,就是用行列阵的形式来表达到另一张页面 j 的时,将其成分定义为 1,反之则定义为成分 aij 可以用:关系。从页面 i0 。即,行列阵 A 的来表示。文件数用 N 来表示的话,这个行列阵就成为 NN 的方阵。这个相当于在图表理论中的邻接行列。也就是说,Web 的关系可以看做是采用了邻接关系有向图表 S。总而言之,只要建立了,就应该有邻接关系。(*注)由点和点连接的线的图形被称为图表(graph)。这些点被称为顶点(vertex)或者节点(
44、node);这些线被称为边(edge)或者弧(arc)。图表分为两类,“边”没有方向的图表被称为无向图表(undirected graph),“边”带有方向的图表被称为有向图表(directed graph)。把有向图表想像成单向通行的道路就可以了。 图表能用各种的方法来表示,但一般用在数据结构上的是邻接行列(adjacency matrix)和邻接列表(adjacency list)。需要注意的是,如果是无向图表,邻接行列 A 就成为了对称行列,而如果是有向图表,A 就会成为不对称行列。以下是用位图表示的 Apache 的 排列时,表示这个页面有很多正向向排列时,表示这个页面有很多反向手册(
45、共 128 页)的邻接行列。当黑点呈横向(即向外导出的。);反之,当黑点呈纵邻接行列的例子(采用了 Apache 的手册)PageR的行列阵是把这个邻接行列倒置后(行和列互换),为了将各列(column)矢量的总和变成 1 (全概率), 把各个列矢量除以各自的数(非零要素数)。这样作成的行列被称为推移概率行列,含有状态之间的推移概率。倒置的理由是,PageRN 个概率变量,各个行矢量表示并非重视到多少地方而是重视被多少地方。PageR的计算,就是求属于这个推移概率行列最大特性值的固有矢量(优固有矢量)。 这是因为,当线性变换系 t 渐近时,能够根据变换行列的绝aij1 if(从页面 i 向页面
46、 j 有 的情况)0 if(从页面 i 向页面 j 没有的情况)对价值最大的特性值和属于它的固有矢量将其从根本上记述下来。换句话说,用推移概率行列表示的概率过程,是反复对这个行列进行乘法运算的一个过程,并且能够计算出前方状态的概率。再者,虽然听起来很难,但是求特性值和固有矢量的值是能够严密分析的一种基础的数学。能够地给矢量的初始值赋值,但是因为不断地将行列相乘,得到的矢量却会集中在一些特定数值的组合中。把那些稳定的数值的组合称为固有矢量,把固有矢量中特征性的标量(scalar)称为特性值,把这样的计算方法总称为分解特性值,把解特性值竞价称为特性值问题。对上一步计算了相关性之后的数值再考虑根据商
47、业规则竞价的,即有一张系统自身提供的可能会变换的默认权值表,要将得分加上这个默认的权值,以完成最后的计算。封装特定的算法公式和数据处理方法,供不同地方的大量数据计算使用。对外提供接口与爬取模块的接口:PublicvoidinjectedScore(Texturl,CrawlDatumdatum)throwsScoringFilterException;public void initialScore(Text url, CrawlDatum datum) throws ScoringFilterException;与搜索模块的接口:public float commerlScore (Text
48、 url, Nhdoc, CrawlDatum dbDatum,CrawlDatum fetchDatum, Parse parse,ScoringFilterException;public CrawlDatum getSortedResult ScoringFilterException;与进程通信相关的接口:Inlinks inlinks, float initScore) throws(Text url, CrawlDatum datum) throwspublic float generatorSortValue(Text url, CrawlDatum datum, float i
49、nitSort) throwsScoringFilterException;publicvoidupdateDbScore(Texturl,CrawlDatumold,CrawlDatumdatum, List inlinked) throws ScoringFilterException;4.2类图4.3类描述4.3.1 ScoringFilter 接口抽象接口 ScoringFilter 用于封装网页的得分计算算法,具体的算法子类继承ScoringFilter接 口 , 包 括 : LinkysisScoringFilter 、 OPICScoringFilter 、TLDScoringF
50、ilter、URLMetaScoringFilter。同时算法需要调用 webgraph 中的数据类的相关数据结构和图论算法计算相关得分。4.3.2 ScoringFilters 类ScroingFilters 类包含所有的算法集合以及调用接口,负责和其他模块的交互,对搜索结果进行排序。类方法publicvoidinjectedScore(Texturl,CrawlDatumdatum)throwsScoringFilterException:在添加新发现的网页时,计算初始化的得分public void initialScore(Text url, CrawlDatum datum) thro
51、ws ScoringFilterException:在注入新网页时,计算初始化的得分前置条件: 搜索模块完成并经过了商品信息过滤;后置条件: 获得正确词组,并初始化得分。publicfloatcommerlScore(Texturl,Nhdoc,CrawlDatumdbDatum,CrawlDatum fetchDatum, Parse parse, Inlinks inlinks, float initScore) throwsScoringFilterException:计算竞价前置条件:后置条件:处理后的分数竞价权重的配置文件修改完成;无异常错误警告,获得权重修改后的分数。public
52、float generatorSortValue(Text url, CrawlDatum datum, float initSort) throwsScoringFilterException:给页面计算新的分数前置条件: 请求计算得分;后置条件: 无异常错误警告,获得算法计算后的分数。publicvoidupdateDbScore(Texturl,CrawlDatumold,CrawlDatumdatum,List inlinked) throws ScoringFilterException:更新页面的得分到数据库中前置条件:请求更新数据;后置条件:无异常错误警告。public Craw
53、lDatum getSortedResult (Text url, CrawlDatumScoringFilterException:获得排序结果前置条件:正确排序后置条件:正确返回排序后的数据datum) throws4.3.3. WebGraph 类排序算法的数据类型。类方法public void createWebGraath webGraphDb, Path segments,normalize,filter) throws IOException:创建网页图前置条件:获取相关页面数据之后请求分析后置条件:无异常错误4.3.4 LinkR类计算方法的工具类。类方法public void
54、yze(Path webGraphDb) throws IOException:分析网页连接图的数前置条件:WebGraph 已经生成;后置条件:无异常错误4.4 重要协作顺序图状态图4.5 使用的设计模式4.5.1 策略模式策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们之间可以相互替换。策略模式让算法独立于使用它的客户而独立变化。它提供了一种替代继承的方法,而且既保持了继承的优点(代码重用),还比继承更灵活(算法独立,可以任意扩展)。同时避免程序中使用多重条件转移语句,使系统更灵活,并易于扩展。策略模式还遵守大部分 GRASP 原则和常用设计原则,如下图所示:聚、低偶合。在排
55、序模块中,由于质量属性中明确提出排序算法可能会在以后变更,因此必项将各个算法模块封装起来,实现接口 injectedScore() , initialScore() , commer lScore (),getSortedResult (),generatorSortValue(),updateDbScore(),以便以后可以方便地修改。如果要新增算法,增加一个算法类,实现上述接口,并在类并更新类的的时候将指向新的算法类即可;如果要移除算法,移除对应的算法的即可;如果要修改算法,可在不修改接口的前提下修改算法即可,保证了聚和低耦合。类图体现:patibler 模块5.5.1 概述承担的需求(主
56、要)获得商品查询的排序结果后,向客户端返回商品信息,并需要兼容不同内核的浏览器。商品展示用例图可能会修改的实现(次要)浏览器的类型在将来可能会增加商品展示形式可能在将来会变更角色商品搜索排序后的结果,并以合理的方式显示;兼容不同内核的浏览器对外提供接口JSP/HTML 文件中调用的 JS 接口:showGoods(ShowGoodsArrStrategy,MyBrowserFun,List)5.2类图5.3类描述首先,由于 JavaScript 并不支持面象的语言,没有提供对类的支持,因此我们不能像在传统的语言里那样用 class 来定义类,但可以用 js 的闭包封装机制来实现js 类。同样,
57、 js 中也不支持类继承机制,但可以通过将父类prototype中的成员方法到子类的 prototype 中来实现。因此,图中描述的 class, abstractclass 都是为了体现设计模式的抽象。5.3.1 Shower 类Shower 类确切的来说应该算是一个 JavaScript 文件,其中有一个方法叫做showGoods(ShowGoodsArrStrategy,List)。类方法 showGoods(ShowGoodsArrStrategy,List):其中 ShowGoodsArrStrategy 指定商品展示的形式(以哪种方法展示商品列表),List为商品搜索结果排序模块传
58、入的排序后的商品列表。前置条件:搜索到的商品已经排序完毕;后置条件:商品以规定的格式展现给用户。5.3.2 ShowGoodsArrStrategy 抽象类ShowGoodsArrStrategy 类封装了不同的商品显示算法,它由不同的具体子类实现。5.3.3 ShowGoodsArrStrategyA、ShowGoodsArrStrategyB 类具体的子类,继承自 ShowGoodsArrStrategy 抽象类,按照不同的展现形式对showArray(List,MyBrowserFunction)实现了不同的算法。5.3.4 MyBrowserFunction 接口接口中定义了 show
59、Goods()中用到的与浏览器有关的对 DOM 文档的操作方法,它用于封装不同浏览器对文档操作的差异,提供的接口。5.3.5 MyFunctionAdapterA 类MyFuctionAdapterA 为一个适配器,内核为 A 类型的浏览器,它们对 DOM 文档的操作接口(由 KernalA 提供)通过 MyFunctionAdapterA 适配器被转化为符合 MyBrowserFunction 的接口。MyFunctionAdapterB 类与 MyFunctionAdapterB 类功能类似。5.3.6 KernalA 类KernalA 确切的来说并不是一个类,它是内核类型为 A 的浏览器
60、对 DOM 文档的各种各样不同的操作,这些操作方法在 MyFunctionAdapterA 中被调用,以转化组 符合 MyBrowserFunction 的接口。5.4 重要协作顺序图5.5 使用的设计模式5.5.1 适配器模式适配器模式可以使使用一个已经存在的类,虽然该类的接口不符合的需求,但是通过适配器对它进行转化,可以将其封装成需要的接口。在商品信息展示模块中,不同浏览器对于 DOM 文档的操作会因为浏览器内核的不同而有所差异,要的接口形式:为了兼容各种浏览器,通过 Adapter 将它们转化成需Request(Request(AdapteeSpecificRequestCnt5.5.2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026江苏宿迁市卫生健康委员会所属事业单位招聘11人备考题库及参考答案详解【模拟题】
- 2026河南漯河市临颍县公益性岗位招聘53人备考题库(全优)附答案详解
- 2026云南白药集团春季校园招聘备考题库及答案详解【易错题】
- 2026陕西蒲城高新医院招聘25人备考题库附答案详解【研优卷】
- 2026福建福州福清市侨乡幼儿园招聘备考题库及参考答案详解ab卷
- 2026河北邯郸幼儿师范高等专科学校春季博硕人才选聘26人备考题库含完整答案详解(全优)
- 2026广东惠州市惠城职业技术学校春季学期招聘化工实训室管理员(外聘合同制)1人备考题库及完整答案详解(夺冠系列)
- 2026东旅文化运营(东山)有限公司招聘19人备考题库及参考答案详解【培优a卷】
- 2026安徽池州市直学校招聘教师14人备考题库【历年真题】附答案详解
- 2026上半年四川事业单位统考安州区考试招聘教师26人备考题库附参考答案详解(b卷)
- 2026江苏南京市雨花台区征收拆迁安置办公室招聘编外人员3人笔试参考题库及答案解析
- 乐山市市中区2026年上半年公开招聘城市社区专职网格员(禁毒社工)(24人)笔试备考题库及答案解析
- 内部财务交叉检查制度
- 柔性传感器介绍
- 抖音直播营销案例分析
- 2025青岛国企社会招聘笔试题及答案解析
- 7s管理制度标准规范
- 2026年金融监管机构面试问题集含答案
- 血站安全教育培训课件
- 厂房拆除施工验收标准
- 农商行考试题及答案
评论
0/150
提交评论