3 研究方法
3.1 前處理
在前處理的階段,主要的目的是將 pdf 的內容轉成以章節為單位 的純文字,供後續程式處理。而細部流程包括:(1)擷取章節內容、(2) 標註詞性、及(3)產生字詞-句子或段落-句子矩陣。
首先擷取章節內容會將 PDF 文件讀入,並依據其文字屬性(首字 大寫粗體等)來獲取標題。這是由於期刊、研討會都會規定投稿論文 格式,並且大致相同,因此就能夠利用這些規則,將學術論文的標題 擷取出來,此模組負責將讀入的 PDF 文件利用 PDFBox 來擷取文字 資訊,包括字型(例如: font、fontsize、width、height 等)及位置資訊(例 如: xloc 與 yloc),透過這些基本資訊,本研究就能判斷標題所在位置,
進而對文件做標記。再來透過標題位置來切分論文,以大的章節(第 二層標題)來將論文區分成較小單位的文件。將文件以標題區分成章 節的文件,此動作不但能提升運算速度,且矩陣也能夠有效的縮減,
減少稀疏矩陣的產生機率。同時透過區分章節能夠避免製作簡報時發 生內容與內文對應不一致的問題,因為無論是文件摘要或主題概念擷
14
取中,都只能夠擷取出重要的句子,文件摘要或主題概念擷取並不會 記錄句子應屬於哪一章節的句子,因此若先行將文章區分成不同章節,
再以這些章節擷取摘要句,隨後加入簡報當中,就不會造成不該出現 在摘要的句子,卻出現在摘要當中。
第二本論文使用 Stanford Tagger(2012-05-22 版本)進行詞性標註 (供 NTU 及 LSA-sp(段落-句子)),目的在於擷取句子中的名詞與動詞,
來幫助我們將文件斷句並且對字詞標注上詞性,雖然 Stanford tagger 可以斷句,但卻仍需微調,由於 Stanford Tagger 在斷句時,有可能會 發生斷句錯誤的問題。以圖 3 及圖 4 為例,紅色區域所框起來的文 字,能明顯的看出段行的差別,圖 3 紅色區域的第一句話,就明顯 看出有兩個羅馬數字的標號,反觀圖 4 卻只有一個羅馬數字的標號,
這種錯誤就會影響矩陣的正確性(原本該向量只應該會有 2 個非 0 的 值,卻因為錯誤斷句造成該向量變成 3 個非 0 的值),進而連帶影響 最後摘要結果,一旦選到不正確的句子,只會讓人更看不懂句子想表 達的意義,例如圖 3 中第二句話(Combining both approaches for improved coverage and accuracy 3. ),其實該句尾的 3 應為下一句的標 號,但若在此出現,會讓人困惑 accuracy 3 指的應為什麼意思。
圖 3 未重組的文章片段
15
圖 4 已重組文章片段
圖 5 虛擬程式碼
因此本論文提出句子重整法來修正標號錯位的問題,透過句子重 整能夠讓原本被 Stanford Tagger 錯誤斷句的情形進行復原,讓句子結 構更嚴謹。此動作是本論文一定要進行的前處理動作,雖然 NTU 法 和 LSA-sp 法,在計算句子重要度時不會有任何影響(因為都只記錄名 詞或是動詞,標號等都會被移除),但在進行 LSA-ts(字對句子)的版本 的時候,由於我們所用的矩陣是字詞-句子的二維矩陣,因此當句子 的斷句出錯時,連帶影響這二維矩陣的正確性。
圖 5 所顯示的是本論文句子重整的虛擬程式碼,本論文只重整 標號的問題,因為 Stanford Tagger 所做出來的句子已相當正確,只有
16
標號錯誤的問題,但標號只限定是羅馬數字(I、II、III…等)及一般數 字,除此之外還有一些特殊標號(例如: Definition 1、Definition 2…等),
若再遇到沒有設定的標號,則程式將無法處理。
除了上述的問題外,在儲存章節前,行尾的連字號也需移除否則 字詞數會暴增,如圖 6 所示,紅色所框起來的單字,都有被"-"符號 所切開的情形產生,英文的連字號可以使文件對齊但卻會被視為是不 同的字詞(e.g. algorithm vs. algo-rithm)。這是由於 PDFBox 擷取文字的 方式,都是以一行為單位,且 Stanford Tagger 並不會做拼字檢查,而 我們修正這錯誤後,得到的句子就更加正確了,如圖 7 所示,紅色 所框起來的文字,不再被"-"符號所切開。所以這三項作業都相當重要,
少了任何一個動作,都將影響最後的簡報內容。
圖 6 有連字號的情形
圖 7 無連字號的情形
第三產生字詞-句子或段落-句子矩陣主要是供 LSA 法使用,在過 去許多 LSA 的研究當中,其矩陣都是以字詞-文件的形式所建立,但 他們所關心的是多篇文件中的共有主題,與本研究並不相符,因此我
17
們修改矩陣的建構方式。在此說明本研究中所使用的句子,都是透過 Stanford Tagger 所斷出來的句子為基準。首先說明本研究第一種矩陣 字詞-句子(如表 1 所示),其水平方向是代表第 N 個句子,垂直方向 是代表第 M 個字詞(Term),而表 1 中的 K 值是以 TF填入,TF 為字 詞在所有句子中出現的次數。再來介紹本研究第二種矩陣段落-句子 (如表 2 所示),其水 S(|S|=M)表示 D 中所有句子(sentences)所形成的 集合,且 P(|P|=N)為文件 D 中段落(paragraphs)所形成的集合。此處的 nij代表子句 si在段落 pj中出現的次數,而句子是以各句子的名詞所代 表,並不是完整的句子(移除動詞、副詞、介系詞…等等),表 2 中的 K 值是以 TFi填入,在此要特別說明 K 值的計算方式,我們會記 錄各別段落中名詞的 TF(同樣的名詞,在不同段落中的 TF值不一樣),
當要計算 K 值時,會將該句子的所有名詞 TF 加總,再除上該句子的 名 詞 數 量 k , 最 後 再 開 根 號 , 以 數 學 式 表 示 即 為
K1,1= (S1中各個名詞的TF)
k 。
表 1 字詞-句子次數矩陣
S1 S2 … SN
T1 K1,1 K1,2 … K1,N
T2 K2,1 K2,2 … K2,N
…
TM KM,1 KM,2 … KM,N
這 些 工 具 (LSA, pLSA) 可 幫 助 使 用 者 從 「 字 詞 - 文 件 (term-document)關係」或「字詞-類別(term-category)關係」中分析出 其潛藏其中的主題,相同主題的字詞會被歸成同一群。再由各主題下 挑選權重高的字詞,但我們的摘要是要摘句並非摘字,
故使用句子-18
段落矩陣。相同主題的句子會被歸成同一群。並從各主題中挑選出代 表的句子。
本論文實作的模組是建立於曾士昌 2011 的系統上,在系統建置 的過程中,我們發現 LSA-ts 在建立矩陣時,TF 的計算是錯誤的,該 系統 TF 的值永遠只會是 1,所以其矩陣相對只是在記錄字有無出現 在句子當中,因此本論文修正此錯誤,讓字詞-句子的矩陣是正確的。
表 2 段落-句子次數矩陣
S1 S2 … SN
P1 K1,1 K1,2 … K1,N P2 K2,1 K2,2 … K2,N
…
PM KM,1 KM,2 … KM,N