• 沒有找到結果。

填充句替換

第三章、 系統設計

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

相關文件