基于Delphi的Web文本获取方法
2016-03-21刘建培
刘建培
摘 要: 提出基于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,它们的特点是由“<”和“>”以及它们中间的字串组成,如
⑷ 关键字:在网页的头部说明中可以使用
⑸ 页面描述:与关键字类似,在网页的头部说明中可以使用的形式来描述页面内容,类似于文章摘要,简要说明本页的内容。因此,在这种页面描述中出现的词汇同文章类别的关系要比正文中的词汇同正文的关系更密切。
在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