本系統使用的資料來源為 PDF 格式電子書,我們先對電子書進行資料前處 理,接著對資料建立索引並擷取資料中的重要字詞。此章將說明處理的各個步 驟。
4.1 句子擷取
本系統利用 Apache PDFBox(
http://pdfbox.apache.org/ )對 PDF 電子書內容
進行處理。PDFBox 為 Apache open source JAVA PDF Library 的一個 tool ,主要 功能如下:1. 對 PDF 文件進行切割或合併。
2. 擷取 PDF 文件的文字內容轉換成一般純文字。
本系統以頁為單位對電子書進行切割,將其儲存為純文字檔案,如圖 4.1 所 示 。 此 外 我 們 會 對 文 字 內 容 進 行 斷 句 , 以 英 文 大 寫 字 母 為 開 頭 , 結 尾 是 ‖ . ‖、‖ ! ‖、‖ ? ‖ 等結束符號當作一個完整句。依照上述規則使用 JAVA 正規 表示式(Regular Expression)進行句子擷取,所擷取出的句子即是本系統之文句 集。
19
4.2 建立文句索引
本系統利用 Apache Lucene 對文句集建立索引,目的是提升句子檢索的效率。
建立索引之前我們會先對文句集中的句子進行兩步驟的處理。
<1>移除停用字(stopwords removal)
停用字(stopwords)泛指在一般文章中出現詞頻次數很高,但卻沒有實質意義 的字詞,例如,‖it‖、‖that‖、‖or‖等字詞,這類字詞其詞性大多是介係詞、代名 詞以及連接詞等。由於停用字的詞頻出現次數偏高,但又沒有實質的意義,可能 影 響 後 續 評 估 句 子 語 意 關 聯 的 效 果 , 因 此 我 們 採 用 TEXT FIXER
136 CHAPTER 11
This code breaks all the rules of abstract data structures by assuming a par- ticular representation for the priority queue (during each loop, the priority queue resides in a[l], . . . , a[k-1]), but it is reasonable to do this here because we are implementing a sort, not a priority queue. The priority queue proce- dures are being used only for descriptive purposes: in an actual implementa- tion of the sort, we would simply use the code from the procedures to avoid doing so many unnecessary procedure calls.
It is actually a little better to build the heap by going backwards through it, making little heaps from the bottom up. Note that every position in the array is the root of a small heap, and downheap will work equally well for such small heaps as for the big heap. Also, we’ve noted that remove can be implemented by exchanging the first and last elements, decrementing N, and calling downheap(1). This leads to the following implementation of
Heapsort:ure heapsort;
圖 4. 1PDF 電子書部分純文字內容
20
(http://www.textfixer.com/resources/common-english-words.txt) 網 站所提 供 的停 用 字列表,在進行其他步驟處理前,會參照這個表移除停用字。
<2>字詞原型化
一般來說,在英文文章中,大部分的字會因為時態或是主被動文法的關係,
導致一個字可能以多種不同的型態出現,例如,‖classify‖、‖classifies‖、‖classified‖
以及‖classifying‖等,這些字詞都是在表示‖classify‖的語意。如果在系統中將這 些字視為不同字的話,不僅會浪費空間,而且可能影響計算詞頻和擷取特徵的效 果,所以必頇將字詞進行原型化處理。本系統使用了 Porter Stemming Algorithm 進行字詞原型化處理,此演算法由 Martin Porter 於 1980 年所提出,至今仍然被 廣泛使用,我們採用這個演算法 JAVA 版本的 Open source 應用於系統上。
經過上述的兩步驟處理後,本系統採用 Apache Lucene 對句子依所包含字建 立索引。Lucene 是 Apache open source 項目之下的一個以 JAVA 語言建立的全文 檢索引擎,提供了完整的程式介面,不僅能大大提升全文索引和檢索的效率,並 且易於嵌入於系統之中使用。目前有許多網站使用 Lucene 實作站內的內容檢索 服務,例如科技新聞網站 CNet。
本系統採用詞組搜尋(phrase search)的方式對於查詢詞彙進行搜尋,當查詢詞 彙是一個字詞以上組合而成時,例如,‖greedy algorithm‖,則系統會自文句集中 找出同時出現‖greedy‖和‖algorithm‖的句子,而且兩個字詞必頇是連續出現,中 間不出現其他字詞。
21
4.3 詞性標記及產生概念詞集
本研究是以句子為基本單位,句子大多是由數十個字詞所組成。我們認為句 子中有意義的概念字詞多是由句子內名詞或是名詞片語所形成,所以我們對 4.1 的斷句文字內容進行進一步處理,以取出概念詞供後續處理使用。
4.3.1 詞性標記
本 研 究 採 用 美 國 史 丹 佛 大 學 自 然 語 言 處 理 研 究 小 組 研 發 的 Standford
Log-linear Part-Of-Speech Tagger 套件,對於句子中每個字詞標記詞性,如圖 4.2 所示,在 ‖ / ‖ 之後顯示的是字詞的詞性。
4.3.2 產生概念詞集
本研究認為句子中出現的名詞和名詞片語可表示句子中重要概念,因此我們 訂定以下規則擷取出句中的概念詞,各個規則以正規表示法表示如下:
(1) Noun+:單一名詞,或是多個名詞組成的複合名詞,例如,‖complexity‖。
(2) Adj (Vbg | Noun)+:形容詞後接著一個或多個名詞或是動名詞,例如,‖optimal solution‖。
a/dt decision/nn tree/nn is/vbz a/dt full/jj binary/jj tree/nn that/wdt represents/vbz the/dt comparisons/nns between/in elements/nns that/wdt are/vbp performed/vbn by/in a/dt particular/jj sorting/vbg algorithm/nn operating/vbg on/in an/dt input/nn of/in a/dt given/vbn size/nn ./.
圖 4. 2 句子詞性標記結果
22
(3) Det (Vbg | Noun)+:定冠詞後接著一個或多個名詞或是動名詞,由此規則找出 之概念詞會去掉定冠詞。例如,出現‖the comparison sort‖會找出‖comparison
sort‖。
一個句子𝑠中符合上述規則的字詞皆會被擷取出,稱為𝑠的概念詞集,以 𝑠𝑒𝑛_𝐶𝑜𝑛𝑐𝑒𝑝𝑡(𝑠)表示。
23