劉建培
摘 要: 提出基于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