第三章 研究方法
3.2.3 語句單位比對
國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
29
3.2.3 語句單位比對
語句比對的做法是先將如《詩經》、《楚辭》、《全唐詩》、《全宋詩》和《全宋 詞》的語料先以詩名、詞牌名切分,刪除括號內的注釋,並以標點符號將詩、詞 的內容斷為多個語句。之後再分別由選定作品中的每個語句出發,比對另一作品 的每一個語句,並記錄比對結果。
如何判斷兩個語句像或者是不像呢?因為兩作品一些相同的詞彙,已經在作 品單位比對的時候被輸出,語句單位比對的目的,是為了找出兩作品之間,比較 像的語句,因此,我們選擇兩語句以 3 個包含重複共用字為門檻,做為輸出篩選 的標準。
語句比對的方法會先算出兩語句長度 m、n,為了防止語句過短而造成無效 的比對,因此當 m、n 皆大於 3,再比較兩語句的包含重複共用字,檢查包含重 複共用字是否也超過設定的門檻,以此為篩選標準,可以為我們挑出一些可能的 對應狀況。至於會設定語句長度門檻值的原因,是為了避免在兩語句過短,例如 一些單字詞構成的句子,但仍需要比對的狀況。通過篩選標準後,系統會輸出兩 語句的包含重複共用字、共用字集合、初步共用詞彙、最長初步共用詞彙,也分 別記錄兩語句的長度、共用字覆蓋率以及共用字構詞彙。
由於詩詞常為了押韻,或是其他原因,而改變詞彙的順序,甚至改變辭彙中 字的構成順序,因此,只判斷兩語句不論順序的各項相同特徵,而無針對兩語句 相同順序的共用詞彙,可能會缺少一些依據更進一步判斷兩語句的關係,舉例兩 語句對,《詩經》國風中〈七月〉35的一語句「春日遲遲」和《全唐詩》胡曾的
35《詩經》,國風·豳風〈七月〉:
七月流火,九月授衣。一之日觱發,二之日栗烈。無衣無褐,何以卒歲?
三之日於耜,四之日舉趾。同我婦子,饁彼南畝。田畯至喜。七月流火,九月授衣。
春日載陽,有鳴倉庚。女執懿筐,遵彼微行,爰求柔桑。
春日遲遲,采蘩祁祁。女心傷悲,殆及公子同歸。
七月流火,八月萑葦。蠶月條桑,取彼斧斨。以伐遠揚,猗彼女桑。
‧
因此我們計算同順序狀況下的比對狀況,採用 Python 字串比對模組 difflib 中的 SequenceMatcher,其方法採用 Ratcliff-Obershelp 演算法39,求得兩個已知序 列 X 和 Y 中的按照順序的共用字。若兩語句按照順序的共用字數和兩語句包含 重複共用字數量不相同,則兩語句共用字可能有前後交換的現象。
Ratcliff-Obershelp 演算法的概念,如圖 3.6 的範例,若標點符號不計,以 A 字串為賀鑄〈晚雲高〉40的一個片段「二十四橋明月夜,弭蘭橈。玉人何處教吹。
39 Ratcliff, John W. and David E. Metzener. Pattern matching: The gestalt approach, Journal of Dr.
Dobbs, 7, 46, 1988.
40《全宋詞》,賀鑄〈晚雲高〉:
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
31
可憐宵。」,B 字串為杜牧〈寄揚州韓綽判官〉41的一個片段「二十四橋明月夜,
玉人何處教吹簫。」為例。Ratcliff-Obershelp 演算法,在兩字串共用字順序不改 易時,能找出兩字串用字相同的部分。
秋盡江南葉未凋。晚雲高。青山隱隱水迢迢。接亭皋。
二十四橋明月夜,弭蘭橈。玉人何處教吹。可憐宵。
41《全唐詩》,卷 523,杜牧〈寄揚州韓綽判官〉:
青山隱隱水迢迢,秋盡江南草木凋。二十四橋明月夜,玉人何處教吹簫。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
32
Input: A、B 兩字串
A=二十四橋明月夜,弭蘭橈。玉人何處教吹。可憐宵。
B=二十四橋明月夜,玉人何處教吹簫。
Output: A、B 兩字串按照順序的共用字
1. 找出兩字串的 longest common substring
A=二十四橋明月夜,弭蘭橈。玉人何處教吹。可憐宵。
B=二十四橋明月夜,玉人何處教吹簫。
2. 根據第 1 步的結果,將 A、B 兩字串 longest common substring 右側 剩餘字串,回到第 1 步執行,得「玉人何處教吹」
A𝑅=弭蘭橈。玉人何處教吹。可憐宵。
BR =玉人何處教吹簫。
3. 根據第 1 步的結果,將 A、B 兩字串 longest common substring 左側 剩餘字串,回到第 1 步執行,無 longest common substring
A𝐿 = ""
BL= ""
4. 直到左右側的剩餘字串都無 longest common substring,或是已找出 longest common substring 為止,得兩字串按照順序共用字為:
二十四橋明月夜 玉人何處教吹
圖 3.6 Ratcliff-Obershelp 演算法示例
以下例子如表 3.7 為程式輸出,以唐詩人杜牧的作品〈寄揚州韓綽判官〉42 中一語句「二十四橋明月夜」,比對宋詞人陳克的作品〈謁金門〉43中一語句「今
42《全唐詩》,卷 523,杜牧,〈寄揚州韓綽判官〉:
青山隱隱水迢迢,秋盡江南草木凋。二十四橋明月夜,玉人何處教吹簫。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
33
夜月明何處宿」,兩語句包含重複共用字也為「夜月明」,共用字構兩語句分別為
「明月夜」及「夜月明」,按照順序共用字數為 1,不等於包含重複共用字數 3,
兩語句共用字有前後交換的現象。
表 3.7 語句的比對程式輸出結果
特徵 值 計數
共用字集合 夜、月、明 3
包含重複共用字 夜、月、明 3
初步共用詞彙 0
最長初步共用詞彙 0
按照順序共用字 明 1
語句長度 〈寄揚州韓綽判官〉:7
〈謁金門〉:7
共用字覆蓋率 〈寄揚州韓綽判官〉:42.86%
〈謁金門〉:42.86%
共用字是否有前後交換 1 兩句是否完全相同 0
表 3.8《全唐詩》劉禹錫作品〈石頭城〉中一語句「夜深還過女牆來」和表 3.9《全宋詞》周邦彥〈西河·大石金陵〉中一語句「夜深月過女牆來」為例,兩 語句只有一個字有所不同,程式輸出如表 3.10。
43《全宋詞》,陳克,〈謁金門〉:
春漏促。誰見兩人心曲。罨畫屏風銀蠟燭。淚珠紅蔌蔌。懊惱歡娛不足。
只許夢中相逐。今夜月明何處宿。畫橋春水綠。
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
34
表 3.8 劉禹錫〈石頭城〉
唐詩 劉禹錫 〈石頭城〉
山圍故國周遭在。潮打空城寂寞回。淮水東邊舊時月,夜深還過女牆來。
表 3.9 周邦彥〈西河·大石金陵〉
宋詞 周邦彥 〈西河·大石金陵〉
佳麗地,南朝盛事誰記?山圍故國繞清江,髻鬟對起。怒濤寂寞打孤城,風檣 遙度天際。斷崖樹、猶倒倚,莫愁艇子誰係?空餘舊跡鬱蒼蒼,霧沉半壘。夜 深月過女牆來,傷心東望淮水。酒旗戲鼓甚處市?想依稀,王謝鄰裏,燕子不 知何世,向尋常巷陌人家。相對如說興亡,斜陽裏。
表 3.10 〈石頭城〉和〈西河·大石金陵〉的語句比對狀況
特徵 值 計數
共用字集合 夜、深、過、女、牆、來 6
包含重複共用字 夜、深、過、女、牆、來 6
初步共用詞彙 夜深、過女牆來 2
最長初步共用詞彙 過女牆來 4
按照順序共用字 夜深 過女牆來 6
語句長度 〈石頭城〉:7
〈西河·大石金陵〉:7 共用字覆蓋率 〈石頭城〉:85.71%
〈西河·大石金陵〉:85.71%
共用字是否有前後交換 0 兩句是否完全相同 0
‧ 國
立 政 治 大 學
‧
N a tio na
l C h engchi U ni ve rs it y
35