第三章、 系統設計
3.6 填充句替換
由於生成文章結果中,某些填充句可能非使用者所期望,但使用者又想不出 其它可替換的句子時,站在輔助使用者的立場,本系統提供填充句替換的功能,
以讓使用者能參考更多的填充句例子。在此可分成兩部分,第一部分即為對 Google 做萬用字元的搜尋,並擴展其長度的變化。第二部分則是對 Google 傳回 的填充句,做與原填充句的語意、文法相似度比對。其主要流程如下圖 3-19:
填充句
擴展搜尋
詞性詞義 相似度比對
結果 欲替換之
圖 3-19:填充句替換流程圖
3.6.1 擴展搜尋
在此期望填充句的資料來源能夠符合時代語言用法的變化,且豐富多元,故 本系統在填充句替換時,以 Google 為資料來源,做萬用字元的搜尋。萬用字元 的搜尋通常會用“*"來代表一單字元,“?"來代表一句子,而 Google 的萬用 字搜尋只支援單字元“*",故“*"的數量會影響搜尋所取得填充句資料的長 度。
基於以上理由,本系統對 Google 做擴展搜尋時,會在萬用字元前、後加上 原本替換句前、後的關鍵詞,並以原本填充句的長度為依據,適當的前、後增加 一字元長度,以期能找到適當的填充句,方法主要如下:
若其原填充句長度為 N:
If 2<N<6:則萬用字元長度為 N-1,N+1,N Else if N<=2:則萬用字元長度為 2,3,4 Else if N>=6:則萬用字元長度為 4,5,6
由以上方法,可將搜尋字串用邏輯符號“or"串連起來,一次對 Google 做 萬用字員搜尋,例子如下所示:
若有一句子為“爸爸 [不知不覺的] 睡著"其中:
關鍵字為:“爸爸"、“睡著"
原填充句為:不知不覺的
因為此例子之填充句的長度為 5,2<5<6,故萬用字元分別前、後擴展為 5-1、
5+1,故丟入 Google 之字串如下:
“爸爸****睡著" or “爸爸*****睡著" or “爸爸******睡著"
其中搜尋之結果有可能包含廣告、新聞或技術類的專業文章,故將搜尋範圍 鎖定在部落格文章。而由於 Google 所提供的部落格搜尋結果較少,有些部落格 服務內的文章並不會涵蓋進來,故在搜尋字串最後加上“blog",把搜尋的範圍 鎖定在網誌類的文章,較符合本系統之需求。
3.6.2 詞性詞義相似度比對
上一節對 Google 做萬用字搜尋後,即可得到至多 100 筆的替換句,但若直 接把這些替換句按照 Google 未經特別的排序回傳給使用者,也會造成使用者一 定程度的負擔,故本系統對於傳回來的替換句,會即時自動傳給 CKIP 做斷詞,
再和原填充句做詞性和詞義的相似度比對,下面將詳細敘述。
文章的組成是由一句又一句的句子串連起來而形成,每個句子最重要的 2 個屬性即是文法和其所表達之語意;我們將從 CKIP 斷好詞的填充句,取其中的 POS 詞性和原填充句做 Edit Distance 相似度演算法,當作文法的相似度;取原 本個別的字和原填充句做 Edit Distance 相似度演算法,當作語義相似度。其 Edit Distance 相似度演算法如下圖 3-20 所示:
d[i, j] := minimum(
int EditDistance(char s[1..m], char t[1..n]) declare int d[0..m, 0..n]
for i from 0 to m d[i, 0] := i
圖 3-20:Edit Distance 演算法
由於單純的只參考詞性或詞義相似度,可能會造成期替換句不盡客觀,故在 此詞性和詞義相似度的值分別加總,取值最小的為最相近。如下式:
S={Si|i=1,2,3,……,N} Google 取得之第 i 候選填充句為 Si G={Gi|i=1,2,3,……,N} Si 和原句之詞性相似度為 Gi
W={Wi|i=1,2,3,……,N} Si 和原句之詞義相似度為 Wi