劉建培
摘 要: 提出基于delphi的Web文本獲取方法,從網(wǎng)頁中獲取Web頁面格式的源文件(.html文件),分析它的結(jié)構(gòu)信息,處理它的控制符,通過分析過濾源文件的格式來提取網(wǎng)頁中的文本信息。利用標點符號對文本信息進行章節(jié)、段落、句子等預(yù)處理,將文本信息轉(zhuǎn)換成句子序列,讓用戶快速地定位到需要了解的內(nèi)容,從而讓用戶遠離釣魚網(wǎng)站、惡意廣告、欺詐信息以及在瀏覽網(wǎng)頁內(nèi)容時產(chǎn)生的騷擾,提高互聯(lián)網(wǎng)體驗。
關(guān)鍵詞: 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 引言
互聯(lián)網(wǎng)時代,各式各樣的站點中積累了豐富的文檔資料,其中不僅有名目繁多的技術(shù)資料和新聞資訊,還有眾多用戶的觀點和評論。人們?yōu)g覽網(wǎng)頁文檔資料獲得所需要的信息,也難免受到釣魚網(wǎng)站、惡意廣告、欺詐信息及各種騷擾,用戶為個人隱私及數(shù)據(jù)安全而煩惱。本文提出基于delphi的Web文本獲取,快速地定位需要了解的內(nèi)容,從而讓用戶遠離煩惱,提高互聯(lián)網(wǎng)體驗。
1 實現(xiàn)步驟
⑴ 獲取論壇文檔:輸入一個論壇文檔的網(wǎng)址,獲取網(wǎng)頁源碼,對網(wǎng)頁源碼過濾,最終獲取文檔文本。
⑵ 文本處理:能利用標點符號對文檔進行章節(jié)、段落、句子等預(yù)處理工作,將文檔轉(zhuǎn)換成句子序列。
2 獲取Web文本
系統(tǒng)首先在線從網(wǎng)頁中獲取Web頁面[4]格式的源文件,通過分析過濾源文件(.html文件)的格式,提取網(wǎng)頁中的文本信息。
網(wǎng)頁信息是用HTML(Hypertext Markup Language)語言書寫的,我們要對其中的文本信息進行提取,必須首先分析它的結(jié)構(gòu)信息[5]。對網(wǎng)頁進行分析之后,可以得出指導我們進行文本內(nèi)容提取的特征。
⑴ 由文本和tag串組成。對于客戶端接收到的信息,除去視頻信息、音頻信息等二進制數(shù)據(jù)外,剩余的文本信息可分為兩部分:一是起控制作用的標識符,屬于HTML語法的一部分,成為Tag String,它們的特點是由“<”和“>”以及它們中間的字串組成,如
⑷ 關(guān)鍵字:在網(wǎng)頁的頭部說明中可以使用
⑸ 頁面描述:與關(guān)鍵字類似,在網(wǎng)頁的頭部說明中可以使用的形式來描述頁面內(nèi)容,類似于文章摘要,簡要說明本頁的內(nèi)容。因此,在這種頁面描述中出現(xiàn)的詞匯同文章類別的關(guān)系要比正文中的詞匯同正文的關(guān)系更密切。
在Delphi中,要用到第三方控件TLegHtmlParser,用它來解析網(wǎng)頁,主要用于html網(wǎng)頁的轉(zhuǎn)換以及網(wǎng)頁內(nèi)容的抽取,關(guān)鍵代碼:
procedure TForm1.LegHtmlParser1Text (Sender:
TObject; Token: String);
//獲取html文本
begin
if Token <> #160 then //html轉(zhuǎn)義字符不等于不斷開空格
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 文本處理
文本處理的主要任務(wù)是對文檔進行章節(jié)、段落、句子等劃分,主要以標點符號為劃分依據(jù)。符號對于語法或者語義的影響可能比較大,但是對于文本處理而言,符號就是句子間隔,將輸入的原文本按照其所屬章節(jié)、段落和句子等信息進行標記。
另外中心主旨的句式多為陳述句,像感嘆句、疑問句等特殊句式,一般不直接表達文章的中心主旨,考慮這些因素,因此在文檔處理分析時,不對該類句式進行處理。在進行文檔劃分時,還應(yīng)該考慮到全角、半角標點標號的區(qū)別,為保證文本標識的準確性,還要處理文本的各種標點符號,識別文本的結(jié)構(gòu),最終達到以句子為單位對文本進行分隔的目的。
處理各種標點符號的代碼本文不一一列舉,在此僅列舉分段、分句的代碼:
intpcount:=0; //段落數(shù)
s:=0; //句子數(shù)統(tǒng)計
line:=0; //行數(shù)
startposp:=0; //當前段落位置
startposs:=0; //當前句子位置
toendp:=length(richedit1.Text); //當前段落結(jié)束位置
foundatp:=richedit1.FindText(#13,startposp,toendp,
[stMatchCase]); //判斷是否段落結(jié)束
while foundatp<>-1 do //段落沒結(jié)束,則句子處理
begin
intscount:=0; //句子數(shù)
toends:=foundatp-startposs; //當前句子結(jié)束位置
foundats:=richedit1.FindText('。',startposs,toends,
[stMatchCase]); //判斷是否句子結(jié)束
while foundats<>-1 do //句子沒結(jié)束,則字符處理
begin
richedit1.SelStart:=startposs; //選取字符開始位置
richedit1.SelLength:=foundats+2-startposs; //字符長度
if length(trim(richedit1.SelText))>=4 then
//判斷是字符,則處理字符
begin
intscount:=intscount+1; //句子統(tǒng)計
stringgrid1.RowCount:=line+1; //列數(shù)加1
stringgrid1.Rows[line].add(trim(richedit1.SelText));
//把字符寫入當前列
stringgrid4.RowCount:=line+2; //換列
line:=line+1; //換行
end;
startposs:=foundats+2; //當前句子位置
toends:=foundatp-startposs; //下一句子結(jié)束位置
foundats:=richedit1.FindText('。',startposs,toends,
[stMatchCase]); //判斷下一句是否結(jié)束
end;
if intscount<>0 then
begin
intpcount:=intpcount+1; //段落加1,統(tǒng)計段落數(shù)
richedit2.Lines.Add('第'+inttostr(intpcount)+'段被分
解為'+inttostr(intscount)+'個句子'); //輸出“第X段被分解為X個句子”
s:=s+intscount; //句子加1,統(tǒng)計句子數(shù)
end;
startposp:=foundatp+2; //當前段落位置
toendp:=length(richedit1.Text)+3-startposp;
//下一段落結(jié)束位置
foundatp:=richedit1.FindText(#13,startposp,toendp,
[stMatchCase]); //判斷下一段落是否結(jié)束
end;
SetOptimalGridCellWidth(stringgrid1,[]);
//設(shè)置輸出網(wǎng)格的合適列寬
richedit2.Lines.add('文檔共分為'+inttostr(intpcount)+'段,'
+inttostr(s)+'句。'); //輸出“文檔共分為X段X句”
4 結(jié)束語
本系統(tǒng)采用Delphi 7.0進行設(shè)計,Delphi是全新的可視化編程環(huán)境,為我們提供了一種方便、快捷的Windows應(yīng)用程序開發(fā)工具。通過Delphi開發(fā)Web文本獲取,分析過濾源文件的格式來提取網(wǎng)頁中的文本信息, 將文本信息轉(zhuǎn)換成句子序列,讓用戶快速地定位需要了解的內(nèi)容,從而讓用戶遠離煩惱,提高互聯(lián)網(wǎng)體驗。
參考文獻(References):
[1] (美)Steve Teixeira Xavier Pacheco著.Delphi 6開發(fā)人員指
南[M].機械工業(yè)出版社,2002.
[2] (美)Marco Cantu著.Delphi 7從入門到精通[M].電子工業(yè)出
版社,2003.
[3] 王秀娟編著.Delphi 4.0/5.0 高級類參考詳解[M].清華大學
出版社,1999.
[4] 韓客松,王永成,騰偉.Web頁面中文文本主題的自動提取研
究[J].情報學報,2001.4:33-36
[5] 王繼成,武港山.一種篇章結(jié)構(gòu)指導的中文Web文檔自動摘
要方法[J].計算機研究與發(fā)展,2003.40(3):398-404