??xml version="1.0" encoding="utf-8" standalone="yes"?>
|页清洗主要分三步:首先是去除页面中的注释、脚本、样式表{无关信息。然后再页面划分ؓ若干块,包括文本块、链接块、图像块{。最后按照语义对各块作进一步区分,如从文本块中区分出广告等非关键信息块Q从链接块中区分相关链接块、导航链接块、广告链接块{不同内宏V经q上q处理后QWeb面在结构和语义上都被划分ؓl粒度的信息块,从而后箋的信息加工处理工作得以顺利进行[3]?br>国内学者周源远{h开发了一个实验系lPageExtract来完成Web面的相xz工作[2]。但是由于网中包含的信息的形式多样化,有文本、图片、动甅R音频、视频等多种信息形式Q以及网中存在严重的冗余与无序的现象,q且信息内容本n也是不断更新的,使得|页清洗法J杂、不易实玎ͼ其清z结果也不能完全使h满意?br>周源q等人对随机选取?44个Web面Q页面大d?974KBQ进行了|页清洗试。随后,又从清洗的结果中随机选取?00个页面进行h工评分,分ؓ三个{Q好Q指面提取正确Q、一般(指有量一般性错误,但从整体上来看,可以接受Q、差Q指有严重错误或误差较多Q难以接受)。结果,得分?#8220;?#8221;?#8220;一?#8221;?#8220;?#8221;的文本块|页分别?1%?0%?9%。也是_高达19%的清z结果是完全不能接受的[2]?br>??? 本文提ZU专用于新闻|页的正则表辑ּ解析|页的算法。这U算法避开了网|z技术的~陷Q简便易行,效率很高Q准性也很高?br>2新闻|页的特征以及结构分?br>新闻|页是具有很强开发h值的一cȝ,它具有时效性强、信息量大、结构稳定、更新快、需求广泛、实用h值高{特炏V考虑到这些特点,Ҏȝ늚处理如果按照传统的网解析方法,不仅效率低,效果也不会理惟?br>??? 而有一cLȝ|为特D也更具有代表性,它们是各大门L站或新闻|站用来提供用户索新M用的新闻面Q这cL闻页面包含符合检索条件的若干条新闻记录,q些条新闻记录有标题、文摘、出处以及超链,可以用来指引用户查阅新闻全文。这cLȝ其实就是各大网站给自己站内的所有新ȝ늼?#8220;索引”Q能起到很好的说明和指示的作用。因此,只要能处理好q类有关某一主题的新ȝ,实际上就{于处理了绝大部分的与这一主题相关的网|闅R?br>?? ׃q些|页在各大网站所L作用怼Q而且功能相近Q所以这cȝ늚l构相当E_Q而且不会受到某一个具体网站的U束Q适用于大扚w地统一处理。比如新网和搜狐网Q百度网{新ȝ就基本一栗下面是新浪|站一个新ȝ늚实际例子Q?br><html>……<head>……</head><body>
<ul class=l15><a href="<!---qubo debug 分类=U技:大众U技--->
?</ul>
<ul class=l15><a href="<!---qubo debug 分类=汽R--->
?</ul>
………
<ul class=l15><a href="?
??? 可见Q这cȝ具有非常明昄l构特征Q对此结构展开如下Q??
?
可以看出Q这cȝ늚l构很清晎ͼ而我们所需要的也就是那些一个个新闻信息单元里面的内宏Vؓ此,我们完全不需要按照传l的解析|页的方法来一步步地细化网,而只要把<ul class=115>…</ul>q些信息单元直接匚w出来卛_Q而且q些信息单元里面同样也是l构化的Q下面就是某一?lt;ul class=115>…</ul>片断Q?br><ul class=l15><a href="> <font class=f15>背景资料Q先q的攀岩工具SRT</font></a><font color=#333333><i>2001/04/13 15:56</i></font><br>…最大问题,q次中外联合U考队用目前世界上最先进的攀岩工具SRT?lt;b> </b>SRT包括上升<b> </b>下降手柄{一pd工具l成Q攀岩者通过它借助自n?
<!---qubo debug 分类=U技:大众U技--->
?</ul>
?
对这些结构化的信息单元进行再匚wp得到每条新闻的所有重要信息,可以构成一个完整的新闻元数据:
新闻的超链:“http://tech.sina.com.cn/o/62874.shtml”
新闻的标题:“背景资料Q先q的攀岩工具SRT”
新闻的时间或出处Q?#8220;2001/04/13 15:56”
新闻的文摘:“...最大问题,q次中外联合U考队用目前世界上最先进的攀岩工具SRT。SRT包括上升Q下降手柄等一pd工具l成Q攀岩者通过它借助自n?”
而上面的每条新闻的元数据则是q行q一步信息重l和知识再现的最好素材。所以整个解析思\的核心就是直接匹配。而正则表辑ּ完全具备了解释上q新d数据的匹配功能。因此,可用正则表达式来实现相关解析工作?br>3正则表达式简?br>经生理学家McCulloch ?Pitts最早用正则表达式来描述经|络?956q_数学?Stephen Kleene 在此基础上,发表了一题名ؓ《神l网事g的表C法》的论文Q引入了正则表达式的概念。正则表辑ּ是用来描述他称之ؓ“正则集的代数”的表辑ּ。随后,Z发现可以此表达式应用于使用Ken Thompson 的计搜索算法的一些早期研I。正则表辑ּ的第一个实用应用程序就?Unix 中的qed ~辑器?br>正则表达式提供了一U从字符集合中搜ȝ定字W串的机制[4]。它可以让用户通过使用一pd的特D字W构建匹配模式,然后把匹配模式与数据文g、程序输入等目标对象q行比较Q根据目标对象中是否包含匚w模式Q执行相应的E序[5]?br>正则表达式有以下几个主要功能Q数据有效性验证功能,用于试字符串的某个模式是否有效。例如,可以对一个输入字W串q行试Q看此字W串是否W合email的模式。替换文本功能,用于在文档中使用匚w模式来标识特定文字,然后其删除或进行替换。提取子串功能,用于Ҏ模式匚wQ从字符串中提取一个子字符丌Ӏ?br>它主要有四类字符Q首先是匚w字符Q包含了需要搜索匹配的对象。例如,“.”号匹配Q一字符Q?#8220;[]”号匹配方括弧之间的Q一字符Q?#8220;[^]”号匹配不在方括弧之间的Q一字符。其ơ是重复操作W,描述了查找一个特定字W的ơ数。例如,“?”号匹配某一部分一ơ,“*”号匹配某一部分多次Q?#8220;+”号匹配某一部分一ơ或多次Q还?#8220;{n}”Q?#8220;{n,N}”{符受还有锚Q它指定了所要匹配的格式Q有“^”?#8220;$”?#8220;\>”?#8220;\<”?#8220;\b”{。当然还会有一些保留字W,需要用反斜杠来替换它们Q比?#8220;*”P是个保留字符Q如果要在表辑ּ里表C个特定的字符Q就得用“\*”q种形式?br>4正则表达式来处理解析匚w工作的算?br>SUN公司最新发布的JDK1.4中加入了java.util.regex包,全面提供Ҏ则表辑ּ的支持。而且Java.lang.StringcM的replaceAll和split函数也是调用的正则表辑ּ来实现的。正则表辑ּ可以利用模式匚w扑ֈW合条g的字W串以及判断相关字符丌Ӏjava.util.regex包中有三个类QPatternc,MatchercM及异常类patternSyntaxException。PatterncM要是按照正则表达式的语法Q针对要匚w的对象构造正则表辑ּ。所构造的表达式必L唯一的完全匹配。MatchercM要是用构造好的Pattern来匹配所要处理的对象Q异常类则用来处理表辑ּ可能出现的语法错误等情况[6]?br>下面l出在Java语言里运用正则表辑ּq行匚w的几个比较简单的例子?br>1Q字W串匚wQ这是不W合条g的,匚w不成功?br>?p = Pattern.compile("ac*b");
?m = p.matcher("bcaaab");
?b = m.matches();
2Q字W串匚wQ这是符合的条g的,匚w成功?br>p = Pattern.compile("cd*b");
?m = p.matcher("cdaaaab");
?b = m.matches();
3Q字W串替换Q操作成功?br>?p = Pattern.compile("ab");
?m = p.matcher("aaaaab");
?s = m.replaceAll("d");
对于前面所讨论的新ȝ,所构造的正则表达式需要完成两Q务。首先是从整个网中匚w所有的<ul class=115>…</ul>单元Q然后就是把每一个信息单元中代表新闻的字D(新闻的标题、新ȝ文摘、新ȝ链以及新闻的出处等Q从每个单元中解析出来,q作Z个完整的知识单元存入数据库中。所以每Q务都需要构造一个Pattern?br>W一个pattern是:
Pattern p=Pattern.compile("<ul([^>]*)>(.*?)</ul>"QPattern.MULTILINE | Pattern.DOTALL)
?
是能把每个<ul class=l15>…</ul>单元从整个网里面取出,<ul([^>]*)>(.*?)</ul> Q其中,“<ul”表示匚w单元必须以此开_“([^>]*)”表示匚w的是除字W?#8220;>”以外的Q意多字符Q然后以”>”l束Q这样就能找到相关的单元开始,剩下的就是只取一个单元?#8220;(.*?)”表示L多字W,“</ul>”表示以此标识l束。这样就很简单的匚wC个个<ul class=l15>…</ul>单元?#8220;Pattern.MULTILINE”表示可以多行匚wQ?#8220;Pattern.DOTALL”表示对大写不敏感?br>W二个pattern是解析出每个单元里面我们所需要的元数据的字段。即新闻的超铄字段?br>Pattern p1 = Pattern.compile("<a href=\"([^\"]*)\".*<font class=[^>]*>(.*)</font></a>.*<font color=[^>]*><i>(.*)</i></font><br>(.*).*"Q?Pattern.MULTILINE | Pattern.DOTALL)
?
W者还对其它门L站的新闻|页l构q行了分析,发现它们都具备与新浪|站的新ȝ늛似的l构。比如,搜狐|站的新ȝ就是由一个个<span class=blank>…</span>单元l成的新闻记录,每条新闻记录里面也同样包括新ȝ标题、文摘、出处、超铄。而网易则是由一个个<li>…<p>单元l成的新闻记录,记录里面的结构也怼。因此门L站和新闻|站的这cȝ在l构上基本相同,只是l节上有略微的差别。所以对各个|站的这cȝ늚解析法都可采用正则表达式方式,区别只在于正则表辑ּ的构造有所不同?br>5法评与应用实?br>?? W者分别从新浪、搜狐以及百度网站各随机抽取?67个?42个?27个(?36个页面,面大小d21546 KBQ新ȝ,Ҏ则表辑ּ法算法的解析l果q行评。测评工作主要分Z:速度和准度?br>?36个页面用正则表达式进行批处理解析Q共用时U?8U,q_每秒解析|页52个,q_速度?197KB/SQ而周源远{h研制的网|z系l的解析速度?91KB/S[2]。显然正则表辑ּ法׃是采用直接完全匹配的思\Q运行速度上要Z|页清洗解析|页的算法?br>从上q?36个页面中随机选取?50个页面,Ҏ则表辑ּ法解析的质量进行h工评分,分ؓ三个{Q好Q指面中所有相关主题的新闻记录都被准确提取Q每条新闻记录中的各重要信息也被准确提取Q、一般(指有量一般性错误,新闻记录有少量遗漏,或新闻记录中的重要信息有量错误Q但整体可以接受Q、差Q指有严重错误或误差较多Q难以接受)。结果,得分?#8220;?#8221;?#8220;一?#8221;?#8220;?#8221;的网|例分别ؓ78%?0%?%。也是_此算法解析网늚准确度在整体上有98Q是可接受的Q不可接受的仅ؓ2Q。之所以有q么高的准确度是因ؓ在掌握网늻构的前提下,法Ҏ处理的对象有很高的匹配成功率。但是仍然有2%的不可接受的l果Q那是因为网间在结构上q是有差异的Q比如像癑ֺ|的新闻|页Q网中的新闻记录有时有囄Q有时没有图片,q给法的编写带来了一定的隑ֺQ所以算法有q一步改善的可能?br>W者已上q正则表辑ּ解析新闻|页法成功应用于自d发的个性化|络新闻定制pȝ中。系l工作在Windows 2000 Server操作pȝ和SQL Server 2000数据库管理系l^収ͼWEB服务器ؓApache 2Q前台网站采用JSP(Java ServerPages)来处理,JSP引擎为resin2.1.6Q后台模块采用Java语言~写QJava虚拟ZؓJDK1.4Q按照个性化信息服务的工作模式提供新、网易、搜狐三大门L站的新闻定制服务。当成ؓ注册用户后,用户可以n受个性化新闻的定制服务。用戯入相关页面提交需要定制的新闻主题以及新闻提醒服务的Ş式,pȝ会定期按照用L需求,以网|邮g的Ş式把相关新闻信息推送给用户。系l分Z息采集、信息处理、信息代理服务三个模块,其中的信息处理模块的功能是采用正则表达式算法,对取回新L索结果页面进行处理,提取出系l所需新闻元数据,包括新闻标题、新L源、新L间、新L摘等字段?br>6 l束?br>本文在对新闻cȝ늚特定l构q行分析后,研究出利用正则表辑ּ来挖掘新ȝ늚新算法,它对|页中的一个个新闻记录单元q行解析匚wQ获得了很好的效果,解析效率高,速度快,而且E序~写单。最重要的是它是中文信息处理的一U新思\Q值得q一步深入研I。不q这U方法仍然存在很多问题,比如它要求被处理的网늻构比较稳定,而且事先也要人工对网늚l构q行分析Q然后才能构造正则表辑ּQ这L法就昑־不够灉|。因此,该方法也存在适用面不q,化不高的的局限性。但׃正则表达式的强大的解析、匹配的能力Q以及研I尚处于初期Q该法仍然hqK的前?/p>
用同步控制关键字synchronized来保护线E敏感数据,synchronized块中的内容可以保证同一时刻只能被一个线E访问,所以其中的数据是线E安全的?
用ObjectcM的wait()和notify()Ҏ可以实现U程间交互,但要Cwait()和notify()Ҏ只有发生在同一个对象上才能真正实现U程间交互。被某一对象wait()Ҏd的线E需要另外一个调用了同一对象notify()的线E干预才能恢复运行。notify()Ҏ一ơ唤醒一个被wait()Ҏd的线E,notifyAll()Ҏ可以一ơ唤醒所有被wait()Ҏd的线E?br>