基于Delphi的Web文本获取方法

2016-03-21 12:58刘建培
计算机时代 2016年3期

刘建培

摘 要: 提出基于delphi的Web文本获取方法,从网页中获取Web页面格式的源文件(.html文件),分析它的结构信息,处理它的控制符,通过分析过滤源文件的格式来提取网页中的文本信息。利用标点符号对文本信息进行章节、段落、句子等预处理,将文本信息转换成句子序列,让用户快速地定位到需要了解的内容,从而让用户远离钓鱼网站、恶意广告、欺诈信息以及在浏览网页内容时产生的骚扰,提高互联网体验。

关键词: Delphi; 文本获取; HTML; 控制符

中图分类号:TP391 文献标志码:A 文章编号:1006-8228(2016)03- -03

A Web text acquisition method

Liu Jianpei

(Educational technology center of Guangdong university of finance & economics, Guangzhou, Guangdong 510320, China)

Abstract: In this paper, a method of Web text acquisition with Delphi is proposed, which obtains the source files of the Web page format (.Html file) from the Web page, analyzes its structure information, deals with its control character, and extracts the text information from the Web page by analyzing and filtering the source files formats. The method makes use of punctuation marks to preprocess the text information for sections, paragraphs and sentences, converts the text information into sentence sequences, which allows the users to quickly navigate to the contents needed to know, allows the users to stay away from phishing sites, malicious advertising, fraud information and the harassment generated by browsing the content of Web pages, and improves their Internet experience.

Key words: Delphi; text acquisition; HTML; control character

0 引言

互联网时代,各式各样的站点中积累了丰富的文档资料,其中不仅有名目繁多的技术资料和新闻资讯,还有众多用户的观点和评论。人们浏览网页文档资料获得所需要的信息,也难免受到钓鱼网站、恶意广告、欺诈信息及各种骚扰,用户为个人隐私及数据安全而烦恼。本文提出基于delphi的Web文本获取,快速地定位需要了解的内容,从而让用户远离烦恼,提高互联网体验。

1 实现步骤

⑴ 获取论坛文档:输入一个论坛文档的网址,获取网页源码,对网页源码过滤,最终获取文档文本。

⑵ 文本处理:能利用标点符号对文档进行章节、段落、句子等预处理工作,将文档转换成句子序列。

2 获取Web文本

系统首先在线从网页中获取Web页面[4]格式的源文件,通过分析过滤源文件(.html文件)的格式,提取网页中的文本信息。

网页信息是用HTML(Hypertext Markup Language)语言书写的,我们要对其中的文本信息进行提取,必须首先分析它的结构信息[5]。对网页进行分析之后,可以得出指导我们进行文本内容提取的特征。

⑴ 由文本和tag串组成。对于客户端接收到的信息,除去视频信息、音频信息等二进制数据外,剩余的文本信息可分为两部分:一是起控制作用的标识符,属于HTML语法的一部分,成为Tag String,它们的特点是由“<”和“>”以及它们中间的字串组成,如,<BR>等;二是文本字符串,就是浏览网页时真正看到的文字信息。这些文字信息才是网页的真正内容。<br>⑵ 结构信息明显。对于普通的文本文档,识别标题、小标题、段首句等结构信息是一项十分困难的工作,然而在HTML中,由于有控制标识符表明这些结构信息,识别它们就变得十分的简单,在分类过程中可以参考这些信息。<br>在HTML文档中出现的各种控制符号,我们不可能也没必要把所有的都考虑进去,为了简化分析处理过程而又能满足提取网页文本内容的需要,我们仅考虑下面的控制符。<br>⑶ 标题:即Web页面源代码中用<TITLE>和标记的文字。实际浏览时,它会出现在浏览器界面最上方标题栏中。标题中的内容与网页的主题关系非常密切,起着概括全篇的重要作用。

⑷ 关键字:在网页的头部说明中可以使用形式说明本页的关键字,这种信息在论文类文章中经常出现,而且一旦出现,就可以直接根据这些关键字确定文章类别。这些词汇对文章类别的决定程度远高于其他单词,通常,这些关键字都是专业词汇。

⑸ 页面描述:与关键字类似,在网页的头部说明中可以使用的形式来描述页面内容,类似于文章摘要,简要说明本页的内容。因此,在这种页面描述中出现的词汇同文章类别的关系要比正文中的词汇同正文的关系更密切。

在Delphi中,要用到第三方控件TLegHtmlParser,用它来解析网页,主要用于html网页的转换以及网页内容的抽取,关键代码:

procedure TForm1.LegHtmlParser1Text (Sender:

TObject; Token: String);

//获取html文本

begin

if Token <> #160 then //html转义字符不等于不断开空格

begin

richedit1.Text:=richedit1.Text+Token+' ';

CanBreak:=true

end

end;

procedure TForm1.LegHtmlParser1Tag (Sender:

TObject; HtmlTag: String; Attributes: TStringList);

//处理html标识符

begin

if ((CompareText (HtmlTag, 'br')=0) or

(CompareText (HtmlTag, 'p')=0) or

(CompareText (HtmlTag, '/p')=0) or

(CompareText (Copy (HtmlTag, 1, 1), 'h')=0) or

(CompareText (Copy (HtmlTag, 1, 2), '/h')=0))

and CanBreak then

begin

richedit1.lines.add ('');

richedit1.lines.add ('');

CanBreak:=false

end

end;

3 文本处理

文本处理的主要任务是对文档进行章节、段落、句子等划分,主要以标点符号为划分依据。符号对于语法或者语义的影响可能比较大,但是对于文本处理而言,符号就是句子间隔,将输入的原文本按照其所属章节、段落和句子等信息进行标记。

另外中心主旨的句式多为陈述句,像感叹句、疑问句等特殊句式,一般不直接表达文章的中心主旨,考虑这些因素,因此在文档处理分析时,不对该类句式进行处理。在进行文档划分时,还应该考虑到全角、半角标点标号的区别,为保证文本标识的准确性,还要处理文本的各种标点符号,识别文本的结构,最终达到以句子为单位对文本进行分隔的目的。

处理各种标点符号的代码本文不一一列举,在此仅列举分段、分句的代码:

intpcount:=0; //段落数

s:=0; //句子数统计

line:=0; //行数

startposp:=0; //当前段落位置

startposs:=0; //当前句子位置

toendp:=length(richedit1.Text); //当前段落结束位置

foundatp:=richedit1.FindText(#13,startposp,toendp,

[stMatchCase]); //判断是否段落结束

while foundatp<>-1 do //段落没结束,则句子处理

begin

intscount:=0; //句子数

toends:=foundatp-startposs; //当前句子结束位置

foundats:=richedit1.FindText('。',startposs,toends,

[stMatchCase]); //判断是否句子结束

while foundats<>-1 do //句子没结束,则字符处理

begin

richedit1.SelStart:=startposs; //选取字符开始位置

richedit1.SelLength:=foundats+2-startposs; //字符长度

if length(trim(richedit1.SelText))>=4 then

//判断是字符,则处理字符

begin

intscount:=intscount+1; //句子统计

stringgrid1.RowCount:=line+1; //列数加1

stringgrid1.Rows[line].add(trim(richedit1.SelText));

//把字符写入当前列

stringgrid4.RowCount:=line+2; //换列

line:=line+1; //换行

end;

startposs:=foundats+2; //当前句子位置

toends:=foundatp-startposs; //下一句子结束位置

foundats:=richedit1.FindText('。',startposs,toends,

[stMatchCase]); //判断下一句是否结束

end;

if intscount<>0 then

begin

intpcount:=intpcount+1; //段落加1,统计段落数

richedit2.Lines.Add('第'+inttostr(intpcount)+'段被分

解为'+inttostr(intscount)+'个句子'); //输出“第X段被分解为X个句子”

s:=s+intscount; //句子加1,统计句子数

end;

startposp:=foundatp+2; //当前段落位置

toendp:=length(richedit1.Text)+3-startposp;

//下一段落结束位置

foundatp:=richedit1.FindText(#13,startposp,toendp,

[stMatchCase]); //判断下一段落是否结束

end;

SetOptimalGridCellWidth(stringgrid1,[]);

//设置输出网格的合适列宽

richedit2.Lines.add('文档共分为'+inttostr(intpcount)+'段,'

+inttostr(s)+'句。'); //输出“文档共分为X段X句”

4 结束语

本系统采用Delphi 7.0进行设计,Delphi是全新的可视化编程环境,为我们提供了一种方便、快捷的Windows应用程序开发工具。通过Delphi开发Web文本获取,分析过滤源文件的格式来提取网页中的文本信息, 将文本信息转换成句子序列,让用户快速地定位需要了解的内容,从而让用户远离烦恼,提高互联网体验。

参考文献(References):

[1] (美)Steve Teixeira Xavier Pacheco著.Delphi 6开发人员指

南[M].机械工业出版社,2002.

[2] (美)Marco Cantu著.Delphi 7从入门到精通[M].电子工业出

版社,2003.

[3] 王秀娟编著.Delphi 4.0/5.0 高级类参考详解[M].清华大学

出版社,1999.

[4] 韩客松,王永成,腾伟.Web页面中文文本主题的自动提取研

究[J].情报学报,2001.4:33-36

[5] 王继成,武港山.一种篇章结构指导的中文Web文档自动摘

要方法[J].计算机研究与发展,2003.40(3):398-404