Ruben Tsui commited on
Commit
c278a4b
·
1 Parent(s): 7476873

Fix mangled markdown grid tables

Browse files
fix_other_tables.py ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import re
2
+
3
+ file_path = 'src/index.qmd'
4
+
5
+ with open(file_path, 'r', encoding='utf-8') as f:
6
+ text = f.read()
7
+
8
+ replacements = {
9
+ # Table 1: Opus
10
+ """+-----------------------------------------------------------------------+
11
+ | Opus Corpus 首頁 |
12
+ | |
13
+ | ![](media/image5.png) |
14
+ +=======================================================================+
15
+ +-----------------------------------------------------------------------+""":
16
+ """::: {.callout-note appearance="minimal"}
17
+ Opus Corpus 首頁
18
+
19
+ ![](media/image5.png)
20
+ :::""",
21
+
22
+ # Table 2: Alice
23
+ """+-----------------------------------------------------------------------+
24
+ | ![](media/AliceWonderland_search.png) |
25
+ | |
26
+ | 輸入 down the rabbit 可以搜尋到2筆:目錄及第一章的標題。 |
27
+ | |
28
+ | ![](media/AliceWonderland_Ch01.png) |
29
+ +=======================================================================+
30
+ +-----------------------------------------------------------------------+""":
31
+ """::: {.callout-note appearance="minimal"}
32
+ ![](media/AliceWonderland_search.png)
33
+
34
+ 輸入 down the rabbit 可以搜尋到2筆:目錄及第一章的標題。
35
+
36
+ ![](media/AliceWonderland_Ch01.png)
37
+ :::""",
38
+
39
+ # Table 3: Zed
40
+ """ ----------------------------------------------------------------------- ![](media/Zed_start_screen.png) -----------------------------------------------------------------------
41
+
42
+ -----------------------------------------------------------------------""":
43
+ "![](media/Zed_start_screen.png)",
44
+
45
+ # Table 4: Li Qingzhao
46
+ """ ----------------------------------------------------------------------- ![](media/Li_Qingzho.png) -----------------------------------------------------------------------
47
+
48
+ -----------------------------------------------------------------------""":
49
+ "![](media/Li_Qingzho.png)",
50
+
51
+ # Table 5: Regex search image
52
+ """+-----------------------------------------------------------------------+
53
+ | 在搜尋方塊輸入:`\d+`(\\.`\d+`)?\\s?(km\|GB\|%) |
54
+ | |
55
+ | ![](media/image3.png){width="5.854166666666667in" |
56
+ | height="2.736111111111111in"} |
57
+ +=======================================================================+
58
+ +-----------------------------------------------------------------------+""":
59
+ """::: {.callout-note appearance="minimal"}
60
+ 在搜尋方塊輸入:`\d+(\.\d+)?\s?(km|GB|%)`
61
+
62
+ ![](media/image3.png){width="5.854166666666667in" height="2.736111111111111in"}
63
+ :::""",
64
+
65
+ # Table 6: Regex explanation
66
+ """+--------------+-------------------------------------------------------+
67
+ | `\d` | 數字(1或多個;代表整 |
68
+ | +(\\.`\d+`)?\ | 數部分),後面有「可有可無」的小數點及1或多個數字」\ |
69
+ | \\s?\ | 空格「可有可無」\ |
70
+ | (km\|GB\|%) | 3選1: km 或 GB 或 % |
71
+ | | |
72
+ | 解釋以上要出 | |
73
+ | 現在同一行: | |
74
+ | 分 3 rows | |
75
+ +==============+=======================================================+
76
+ +--------------+-------------------------------------------------------+""":
77
+ """
78
+ | Regex 部分 | 解釋 |
79
+ | :--- | :--- |
80
+ | `\d+` | 數字(1或多個;代表整數部分) |
81
+ | `(\.\d+)?` | 後面有「可有可無」的小數點及1或多個數字 |
82
+ | `\s?` | 空格「可有可無」 |
83
+ | `(km|GB|%)` | 3選1:km 或 GB 或 % |
84
+
85
+ """,
86
+
87
+ # Table 7: Throw under the bus image
88
+ """ ----------------------------------------------------------------------- ![](media/image4.png){width="5.854166666666667in" height="2.2916666666666665in"} -----------------------------------------------------------------------""":
89
+ "![](media/image4.png){width=\"5.854166666666667in\" height=\"2.2916666666666665in\"}"
90
+ }
91
+
92
+ for old, new in replacements.items():
93
+ text = text.replace(old, new)
94
+
95
+ with open(file_path, 'w', encoding='utf-8') as f:
96
+ f.write(text)
fix_table.py ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import re
2
+
3
+ file_path = 'src/index.qmd'
4
+
5
+ with open(file_path, 'r', encoding='utf-8') as f:
6
+ text = f.read()
7
+
8
+ # We need to find the section between "## 正規表示式摘要\n\n" and "\n\n例如,若欲找出文件中"
9
+ start_marker = "## 正規表示式摘要"
10
+ end_marker = "例如,若欲找出文件中"
11
+
12
+ start_idx = text.find(start_marker)
13
+ end_idx = text.find(end_marker)
14
+
15
+ if start_idx != -1 and end_idx != -1:
16
+ before = text[:start_idx + len(start_marker)]
17
+ after = text[end_idx:]
18
+
19
+ clean_table = """
20
+
21
+ | 字元 | 意義 / 用法 | 備註 |
22
+ | :--- | :--- | :--- |
23
+ | **字面意義的字元**<br>(literal characters) | 例如:`a` `b` `1` `2` `_` `"` `<` `>` | |
24
+ | **特殊字元**<br>**metacharacters** | | |
25
+ | `\\t` | **t**ab(定位字元) | |
26
+ | `\\n` | **n**ewline(換行字元);<br>Windows:`\\r\\n`(CR LF)<br>UNIX/Linux/macOS:`\\n`(LF) | |
27
+ | `\\s` | white **s**pace(空白字元) | 包含空格(space)及 tab 等 |
28
+ | `.`(*句點*) | 比對任意字元(`\\n` 除外) | |
29
+ | **元字元**<br>(必須以 `\\` 跳脫才能進行文字比對) | | |
30
+ | `\\` | 跳脫 (escape) 字元 | |
31
+ | `|` | 替代(或) | |
32
+ | `()` | 群組;`(?:)` 為非擷取群組 | |
33
+ | `[]` | 字元類別;恰好比對一個字元 | 範例:比對任一英文母音字母 `[aeiou]` |
34
+ | `{}` `*` `?` `+` | 量詞 | |
35
+ | `^` `$` | 錨點(零寬度) | |
36
+ | `?` | (1) 作為量詞時,作用於緊鄰其左方的一個字元、字元類別或群組;<br>(2) 作為非貪婪 non-greedy 或懶惰 lazy 指定符 | |
37
+ | **錨點 anchor**<br>(零寬度:僅比對位置,不比對字元) | | |
38
+ | `\\b` | 詞邊界 | 範例:空白字元(或標點符號)與文字字元之間的位置 |
39
+ | `^` | 脫字符號:字串開頭 | |
40
+ | `$` | 錢字符號:字串結尾 | |
41
+ | **量詞 quantifier**<br>(作用於緊鄰其左方的一個字元、字元類別或群組) | | |
42
+ | `*` | 零次或多次 | |
43
+ | `+` | 一次或多次 | 亦即「至少出現一次」 |
44
+ | `?` | 零次或一次 | 亦即「可有可無」 |
45
+ | `{n}` | 恰好 *n* 次 | |
46
+ | `{n,m}` | 至少 *n* 次,至多 *m* 次 | |
47
+ | `{n,}` | 至少 *n* 次,無上限 | |
48
+ | **字元類別** | 以 `[]` 括起的字元 ── 恰好比對一個字元 | |
49
+ | **範圍** | `[a-z]` 比對任一英文小寫字母;<br>`\\p{Han}`(最完整的寫法)或 `[一-龥]` 或 `[\\u4E00-\\u9FFF]` 或 `[\\x{4E00}-\\x{9FFF}]`,共 20,992 個基本中文字元 | 起始字元的 Unicode 碼位必須較小;中日韓統一表意文字(CJK Unified Ideographs)涵蓋最常見的 CJK 字元;Zed 及 Calibre ebook-viewer 皆可接受;CudaText 使用最後一種格式處理一般 Unicode 範圍 |
50
+ | **快捷寫法** | `^` 在 `[]` 中表示該類別的「相反」(也就是所有此類別以外的字元) | 範例:比對*任何*非英文母音的字元 `[^aeiou]` |
51
+ | `\\d` | 數字,等同於 `[0-9]` | |
52
+ | `\\w` | 「文字」字元;`\\d` 加上 `[a-zA-Z]` 加上 `_`(底線字元;underscore),對於非英文字母書寫的語言可能還包含更多字元 | `\\w` 的定義取決於特定的正規表示式引擎;部分引擎會納入中日韓字元及含附加符號的字元(如 é、ç、ü);其他引擎則不會。 |
53
+ | `\\D` `\\S` `\\W`<br>`\\P{Han}`<br>(相反集合) | 代表對應小寫字元類別之**否定**的字元類別 | `\\D`、`\\S`、`\\W`、`\\P{Han}` 分別為非數字、非空白、非文字及非中日韓字元 |
54
+
55
+ """
56
+
57
+ with open(file_path, 'w', encoding='utf-8') as f:
58
+ f.write(before + clean_table + after)
59
+ print("Table 1 fixed.")
60
+ else:
61
+ print("Markers not found.")
src/index.qmd CHANGED
@@ -21,12 +21,11 @@ title: "第三章 從使用工具到建立資源:語料、檢索與雙語平
21
 
22
  在公開的平行語料資源中,OPUS 是很值得譯者認識的一個入口。OPUS 網站(Open Parallel Corpora, 公開平行語料庫,網址:https://opus.nlpl.eu)長年彙整各種可公開取得的平行語料與多語資料。截至 2026 年初,其官方首頁顯示已收錄超過一千個語料集、超過一千種語言,以及上千億級的句對。雖然這個數量本身不代表品質一定好,但至少說明了一件事:譯者若學會搜尋與篩選,其實可以接觸到遠比過去多的雙語材料,有助於擴大其翻譯的視野與能力。
23
 
24
- +-----------------------------------------------------------------------+
25
- | Opus Corpus 首頁 |
26
- | |
27
- | ![](media/image5.png) |
28
- +=======================================================================+
29
- +-----------------------------------------------------------------------+
30
 
31
  OPUS 的優點,不只是量大,也在於來源多樣。其收錄的語料包含字幕、技術文件、開源軟體在地化資料、政府與國際組織文件、新聞評論、教育內容等。這代表譯者不必只停留在「有沒有例句」的層次,而是可以進一步問:「這些例句來自哪種文本?」「是否符合我的領域需求?」「是否接近我要交付的文體?」例如在翻譯口語對話、影視字幕或遊戲文本時,字幕型語料可能比法律文件更有參考價值;反之,若在翻譯技術說明、使用者介面或開發者文件,像 Mozilla、MDN Web Docs 這類來源就可能比電影字幕有用。
32
 
@@ -52,7 +51,7 @@ OPUS 的優點,不只是量大,也在於來源多樣。其收錄的語料包
52
 
53
  對照查詢的核心價值,在於能把「語言單位」放回「語言環境」。譯者很少只翻一個詞,而是翻一個出現在特定句型中的詞。例如 account 不一定都是「帳號」;在會計文本裡可能是「帳戶」,在敘事語境裡可能是「敘述」、「說法」。若只查閱字典,很容易被高頻義項誤導;若觀察 concordance line,便能了解這個詞與哪些動詞、介系詞、修飾語反覆出現,進一步判斷這個詞在目前文本中的功能。
54
 
55
- 這種檢索能力,不必依賴昂貴平台才能做到。傳統的「對照檢索軟體」(concordancer[^1])可以勝任,很多日常工具也可以部分完成同樣的工作。以 Calibre 的 ebook-viewer 為例,這套工具原本是電子書閱讀器,卻很適合被譯者挪用為中小型語料檢索介面。官方文件指出,ebook-viewer 不只支援一般搜尋,也支援 whole words、nearby words 與 regex搜尋模式,並提供 Reference mode 方便定位段落,以及 highlight 與 annotation 功能協助做人工標記。若將整理好的雙語文件或單語參考資料做成 EPUB、或匯入為可閱讀文本,calibre 其實能成為相當順手的例句檢索工具。
56
 
57
  Calibre **Regex 工具使用方式**
58
 
@@ -71,14 +70,13 @@ Calibre 為一開源 (open source)電子書及文件格式轉換軟體,內
71
 
72
  Ctrl-F (Windows) 或 ⌘F (macOS)可進入搜尋。搜尋方塊下方的下拉式選單中可點選以 regex 搜尋。
73
 
74
- +-----------------------------------------------------------------------+
75
- | ![](media/AliceWonderland_search.png) |
76
- | |
77
- | 輸入 down the rabbit 可以搜尋到2筆:目錄及第一章的標題。 |
78
- | |
79
- | ![](media/AliceWonderland_Ch01.png) |
80
- +=======================================================================+
81
- +-----------------------------------------------------------------------+
82
 
83
  同樣地,許多支援正規表示式搜尋的文字編輯器,也能扮��輕量 concordancer的角色。例如 VS Code、CudaText、Zed、Sublime Text等,都可以對單檔或整個資料夾做全文檢索。對譯者來說,這很有用,因為實務上的目的並非進行大型語言研究,而是要在一批已知資料裡快速找到某種形式的句子、標記或對應模式。若資料來自一套雙語網站、一批舊譯稿或特定客戶過去的中英對照文件,那麼文字編輯器加上 regex,通常便足以解決多數問題。
84
 
@@ -86,17 +84,13 @@ Regex 工具 (2):Zed (開源文字編輯軟體;下載網址:[[https://zed.
86
 
87
  安裝完成後可以編輯純文字檔案 (.txt)。按下 Ctrl-F (Windows) 或 ⌘F (macOS) 顯示搜尋方塊,再按下 **.\*** 圖示進入 regex 搜尋模式。
88
 
89
- ----------------------------------------------------------------------- ![](media/Zed_start_screen.png) -----------------------------------------------------------------------
90
-
91
- -----------------------------------------------------------------------
92
 
93
  關鍵詞檢索、對照查詢與 regex 的關係可以如此理解:關鍵詞搜尋是找字串,concordancing 是看上下文,而regex 係將搜尋條件表達得更精準。當檢索需求從「找這個詞」變成「找所有帶有百分比與括號的句子」、「找所有未翻譯的英文字串」、「找所有第 X 條、第 X 項」,甚至是如「戚戚然」、「營營役役」的疊詞時,regex 就會變得非常有用。
94
 
95
- 下載《李清照集》([[https://www.degruyterbrill.com/document/doi/10.1515/9781501504518/html]{.underline}](https://www.degruyterbrill.com/document/doi/10.1515/9781501504518/html))英譯 EPUB 檔,以 Calibre ebook-viewer 搜尋 regex: ``(\p{Han})\1(\p{Han})\2`` 可找到9筆AABB式疊詞:
96
 
97
- ----------------------------------------------------------------------- ![](media/Li_Qingzho.png) -----------------------------------------------------------------------
98
-
99
- -----------------------------------------------------------------------
100
 
101
  正規表示式本質上是一種在文本中尋找特定文字出現形式、次序或規律(pattern)的語言。正規表示式通常不是在找某一個固定詞(不過一定要如此也可以),而是在描述一類字串長什麼樣子。舉例來說,若欲尋找所有阿拉伯數字,可以用`\d+`;若欲尋找小數,可以用 `\d+`(?:\\.`\d+`)?;若欲尋找百分比,可以在後面再接 %。這種寫法看起來像程式語言,但其實只要抓住幾個核心符號,譯者就已經能處理很多工作。
102
 
@@ -104,129 +98,39 @@ Regex 工具 (2):Zed (開源文字編輯軟體;下載網址:[[https://zed.
104
 
105
  ## 正規表示式摘要
106
 
107
- +-----------------+-----------------------------+---------------------+
108
- | 字元 | | 備註 |
109
- +=================+=============================+=====================+
110
- | **字 | 例如:a b 1 2 \_ \" \< \> | |
111
- | 面意義的字元** | | |
112
- | | | |
113
- | (literal | | |
114
- | characters) | | |
115
- +-----------------+-----------------------------+---------------------+
116
- | **特殊字元 | | |
117
- | | | |
118
- | metacharacters** | | |
119
- +-----------------+-----------------------------+---------------------+
120
- | `\t` | **t**ab(定位字元) | |
121
- +-----------------+-----------------------------+---------------------+
122
- | `\n` | **n**ewline(換行字元\ | |
123
- | | Windows:`\r\n`(CR LF | |
124
- +-----------------+-----------------------------+---------------------+
125
- | | UNIX/Linux/macOS\\n(LF) | |
126
- +-----------------+-----------------------------+---------------------+
127
- | `\s` | white **s**pace空白字元) | 包含空格(space)及 |
128
- | | | tab |
129
- +-----------------+-----------------------------+---------------------+
130
- | .(*句點*) | 比對任意字元(`\n` 除外) | |
131
- +-----------------+-----------------------------+---------------------+
132
- | **| | |
133
- | 字元**(必須以 | | |
134
- | `\` | | |
135
- | 跳脫才能 | | |
136
- | 進行文字比對| | |
137
- +-----------------+-----------------------------+---------------------+
138
- | `\` | 跳脫 (espace) 字元 | |
139
- +-----------------+-----------------------------+---------------------+
140
- | `|` | 替代(或) | |
141
- +-----------------+-----------------------------+---------------------+
142
- | `()` | 群組;(?:) 為非擷取群組 | |
143
- +-----------------+-----------------------------+---------------------+
144
- | `[]` | 字元類別;恰好比對一個字元 | 範例:比對任一英 |
145
- | | | 文母音字母\[aeiou\] |
146
- +-----------------+-----------------------------+---------------------+
147
- | `{}` `*` `?` `+` | 量詞 | |
148
- +-----------------+-----------------------------+---------------------+
149
- | `^` `$` | 錨點(零寬度) | |
150
- +-----------------+-----------------------------+---------------------+
151
- | ? | \(1\) | |
152
- | | 作為 | |
153
- | | 量詞時,作用於緊鄰其左方的 | |
154
- | | 一個字元、字元類別或群組; | |
155
- | | | |
156
- | | \(2\) 作為非貪婪 non-greedy | |
157
- | | 或懶惰 lazy 指定符 | |
158
- +-----------------+-----------------------------+---------------------+
159
- | **錨點 | | |
160
- | anchor**(零寬 | | |
161
- | 度:僅比對位置 | | |
162
- | ,不比對字元) | | |
163
- +-----------------+-----------------------------+---------------------+
164
- | `\b` | 詞邊界 | 範例:空白字 |
165
- | | | 元(或標點符號)與 |
166
- | | | 文字字元之間的位置 |
167
- +-----------------+-----------------------------+---------------------+
168
- | `^` | 脫字符號:字串開頭 | |
169
- +-----------------+-----------------------------+---------------------+
170
- | `$` | 錢字符號:字串結尾 | |
171
- +-----------------+-----------------------------+---------------------+
172
- | **量詞 | | |
173
- | q | | |
174
- | uantifier**(作 | | |
175
- | 用於緊鄰其左方 | | |
176
- | 的一個字元、字 | | |
177
- | 元類別或群組) | | |
178
- +-----------------+-----------------------------+---------------------+
179
- | `*` | 零次或多次 | |
180
- +-----------------+-----------------------------+---------------------+
181
- | `+` | 一次或多次 | 亦 |
182
- | | | 即「至少出現一次」 |
183
- +-----------------+-----------------------------+---------------------+
184
- | ? | 零次或一次 | 亦即「可有可無」 |
185
- +-----------------+-----------------------------+---------------------+
186
- | {*n*} | 恰好 *n* 次 | |
187
- +-----------------+-----------------------------+---------------------+
188
- | {*n*,*m*} | 至少 *n* 次,至多 *m* 次 | |
189
- +-----------------+-----------------------------+---------------------+
190
- | {*n*,} | 至少 *n* 次,無上限 | |
191
- +-----------------+-----------------------------+---------------------+
192
- | **字元類別** | 以 \[\] 括起的字元 ── | |
193
- | | 恰好比對一個字元 | |
194
- +-----------------+-----------------------------+---------------------+
195
- | **範圍** | \[a-z\] | 起始字元的 Unicode |
196
- | | 比對任一英文小寫字母; | 碼位必須較小;中日 |
197
- | | | 韓統一表意文字(CJK |
198
- | | `\p{Han}`(最完整的寫法)或 | Unified |
199
- | | `[一-龥]` 或 | Ideog |
200
- | | \[\\u4E00-\\u9FFF\] 或 | raphs)涵蓋最常見的 |
201
- | | \[\\x{4E00}-\\x{9FFF}\],共 | CJK 字元;Zed 及 |
202
- | | 20,992 個基本中文字元 | Calibre |
203
- | | | ebook-viewer |
204
- | | | 皆可接受;CudaText |
205
- | | | 使用最 |
206
- | | | 後一種格式處理一般 |
207
- | | | Unicode 範圍 |
208
- +-----------------+-----------------------------+---------------------+
209
- | **快捷寫法** | \^ 在 \[\] | 範例:比對*任 |
210
- | | 中表示該類別的「相反」(也 | 何*非英文母音的字元 |
211
- | | 就是所有此類別以外的字元) | `[^aeiou]` |
212
- +-----------------+-----------------------------+---------------------+
213
- | `\d` | 數字,等同於 \[0-9\] | |
214
- +-----------------+-----------------------------+---------------------+
215
- | `\w` | 「文字」字元;`\d` 加上 | `\w` |
216
- | | \[a-zA-Z\] 加上 | 的定義取 |
217
- | | \_(底線字元;und | 決於特定的正規表示 |
218
- | | erscore),對於非英文字母書 | 式引擎;部分引擎會 |
219
- | | 寫的語言可能還包含更多字元 | 納入中日韓字元及含 |
220
- | | | 附加符號的字元(如 |
221
- | | | é、ç、ü) |
222
- | | | ;其他引擎則不會。 |
223
- +-----------------+-----------------------------+---------------------+
224
- | \\D \\S \\W | 代表對應小寫字 | \\D、 |
225
- | \\P{Han}\ | 元類別之**否定**的字元類別 | \\S、\\W、\\P{Han} |
226
- | (相反集合) | | 分別為 |
227
- | | | 非數字、非空白、非 |
228
- | | | 文字及非中日韓字元 |
229
- +-----------------+-----------------------------+---------------------+
230
 
231
  例如,若欲找出文件中所有可能的變數或 placeholder,可以用\\{\[\^}\]+\\} 或 \\{\\{\[\^}\]+\\}\\}之類的模式。若欲找出所有數值加單位的表達,例如 5 km、3.5 GB、20%,可以寫成`\d+`(\\.`\d+`)?\\s?(km\|GB\|%)。若欲擷取英文術語後面緊接中文括號說明的寫法,例如Application Programming Interface(API) 或workspace(工作區),可以針對英文字串與全形括號組合設計模式。這些檢索方式之所以有用,是因為這些模式不是把文字當作一串字,而是把文字當成一種可辨識的形式。
232
 
@@ -287,7 +191,7 @@ Regex 工具 (2):Zed (開源文字編輯軟體;下載網址:[[https://zed.
287
 
288
  ... **throwing** *you* under the bus.\ ... **throw** *me* under the bus!\ I **threw** *four people* under the bus for \$35,000, ... 等等
289
 
290
- ----------------------------------------------------------------------- ![](media/image4.png){width="5.854166666666667in" height="2.2916666666666665in"} -----------------------------------------------------------------------
291
 
292
  -----------------------------------------------------------------------
293
 
@@ -435,7 +339,7 @@ Regex 工具 (2):Zed (開源文字編輯軟體;下載網址:[[https://zed.
435
 
436
  自建資源若要變成長期資產,還需要定期除污。所謂除污,包括刪除版本過時內容、移除低品質OCR 句對、合併重複資料、標記已棄用用詞、區分不同客戶或品牌的 style guide,並避免把明顯不該重用的材料一路保留。例如短期促銷文案、活動slogan、一次性公告、錯誤頁訊息的舊版本,都可能在某個時點失去重用價值。若不定期整理,資料庫只會越來越大,卻越來越不可信。
437
 
438
- 在這裡,Excel、TMX與其他格式之間其實不是互斥關係,而是不同層次的配合。很多譯者可以先用Excel 做整理與人工作業,等品質穩定後再匯出成 TMX 匯入CAT;同時又保留原始 HTML、TXT、EPUB 或 Markdown檔作為檢索層。這種多層結構雖然看起來麻煩,但長期而言反而最穩。因為這種分層做法尊重不同格式的用途:表格適合管理、純文字適合搜尋、TMX適合 CAT。
439
 
440
  若要把這件事具體化,可以把「從雙語網站到CAT」想成一條最小可行流程。第一步,挑選一組可信網站,先人工確認二十組中英文頁面是真正翻譯關係。第二步,保留原始HTML 或 PDF,另外抽出正文成為 raw_text。第三步,用 regex與人工檢查去掉導覽列、頁尾、重複標題與格式噪音。第四步,把每份文本依標題、段落、列表項切成較穩定的單位。第五步,再進入句子層對齊,並把可疑項標記為待驗證。第六步,把人工看過的一批高品質句對先放進Excel 或CSV,補齊來源、語區、領域與版本資訊。第七步,只有在這一批資料已經足夠乾淨時,才匯出成TMX 並導入 CAT工具。這條流程看起來保守,但優點在於每一層都能回頭修正,不會因為一次匯入就把污染擴散到整個工作環境。
441
 
 
21
 
22
  在公開的平行語料資源中,OPUS 是很值得譯者認識的一個入口。OPUS 網站(Open Parallel Corpora, 公開平行語料庫,網址:https://opus.nlpl.eu)長年彙整各種可公開取得的平行語料與多語資料。截至 2026 年初,其官方首頁顯示已收錄超過一千個語料集、超過一千種語言,以及上千億級的句對。雖然這個數量本身不代表品質一定好,但至少說明了一件事:譯者若學會搜尋與篩選,其實可以接觸到遠比過去多的雙語材料,有助於擴大其翻譯的視野與能力。
23
 
24
+ ::: {.callout-note appearance="minimal"}
25
+ Opus Corpus 首頁
26
+
27
+ ![](media/image5.png)
28
+ :::
 
29
 
30
  OPUS 的優點,不只是量大,也在於來源多樣。其收錄的語料包含字幕、技術文件、開源軟體在地化資料、政府與國際組織文件、新聞評論、教育內容等。這代表譯者不必只停留在「有沒有例句」的層次,而是可以進一步問:「這些例句來自哪種文本?」「是否符合我的領域需求?」「是否接近我要交付的文體?」例如在翻譯口語對話、影視字幕或遊戲文本時,字幕型語料可能比法律文件更有參考價值;反之,若在翻譯技術說明、使用者介面或開發者文件,像 Mozilla、MDN Web Docs 這類來源就可能比電影字幕有用。
31
 
 
51
 
52
  對照查詢的核心價值,在於能把「語言單位」放回「語言環境」。譯者很少只翻一個詞,而是翻一個出現在特定句型中的詞。例如 account 不一定都是「帳號」;在會計文本裡可能是「帳戶」,在敘事語境裡可能是「敘述」、「說法」。若只查閱字典,很容易被高頻義項誤導;若觀察 concordance line,便能了解這個詞與哪些動詞、介系詞、修飾語反覆出現,進一步判斷這個詞在目前文本中的功能。
53
 
54
+ 這種檢索能力,不必依賴昂貴平台才能做到。傳統的「對照檢索軟體」(concordancer[^1])可以勝任,很多日常工具也可以部分完成同樣的工作。以 Calibre 的 ebook-viewer 為例,這套工具原本是電子書閱讀器,卻很適合被譯者挪用為中小型語料檢索介面。官方文件指出,ebook-viewer 不只支援一般搜尋,也支援 whole words、nearby words 與 regex搜尋模式,並提供 Reference mode 方便定位段落,以及 highlight 與 annotation 功能協助做人工標記。若將整理好的雙語文件或單語參考資料做成 ePub、或匯入為可閱讀文本,calibre 其實能成為相當順手的例句檢索工具。
55
 
56
  Calibre **Regex 工具使用方式**
57
 
 
70
 
71
  Ctrl-F (Windows) 或 ⌘F (macOS)可進入搜尋。搜尋方塊下方的下拉式選單中可點選以 regex 搜尋。
72
 
73
+ ::: {.callout-note appearance="minimal"}
74
+ ![](media/AliceWonderland_search.png)
75
+
76
+ 輸入 down the rabbit 可以搜尋到2筆:目錄及第一章的標題。
77
+
78
+ ![](media/AliceWonderland_Ch01.png)
79
+ :::
 
80
 
81
  同樣地,許多支援正規表示式搜尋的文字編輯器,也能扮��輕量 concordancer的角色。例如 VS Code、CudaText、Zed、Sublime Text等,都可以對單檔或整個資料夾做全文檢索。對譯者來說,這很有用,因為實務上的目的並非進行大型語言研究,而是要在一批已知資料裡快速找到某種形式的句子、標記或對應模式。若資料來自一套雙語網站、一批舊譯稿或特定客戶過去的中英對照文件,那麼文字編輯器加上 regex,通常便足以解決多數問題。
82
 
 
84
 
85
  安裝完成後可以編輯純文字檔案 (.txt)。按下 Ctrl-F (Windows) 或 ⌘F (macOS) 顯示搜尋方塊,再按下 **.\*** 圖示進入 regex 搜尋模式。
86
 
87
+ ![](media/Zed_start_screen.png)
 
 
88
 
89
  關鍵詞檢索、對照查詢與 regex 的關係可以如此理解:關鍵詞搜尋是找字串,concordancing 是看上下文,而regex 係將搜尋條件表達得更精準。當檢索需求從「找這個詞」變成「找所有帶有百分比與括號的句子」、「找所有未翻譯的英文字串」、「找所有第 X 條、第 X 項」,甚至是如「戚戚然」、「營營役役」的疊詞時,regex 就會變得非常有用。
90
 
91
+ 下載《李清照集》([[https://www.degruyterbrill.com/document/doi/10.1515/9781501504518/html]{.underline}](https://www.degruyterbrill.com/document/doi/10.1515/9781501504518/html))英譯 ePub 檔,以 Calibre ebook-viewer 搜尋 regex: ``(\p{Han})\1(\p{Han})\2`` 可找到9筆AABB式疊詞:
92
 
93
+ ![](media/Li_Qingzho.png)
 
 
94
 
95
  正規表示式本質上是一種在文本中尋找特定文字出現形式、次序或規律(pattern)的語言。正規表示式通常不是在找某一個固定詞(不過一定要如此也可以),而是在描述一類字串長什麼樣子。舉例來說,若欲尋找所有阿拉伯數字,可以用`\d+`;若欲尋找小數,可以用 `\d+`(?:\\.`\d+`)?;若欲尋找百分比,可以在後面再接 %。這種寫法看起來像程式語言,但其實只要抓住幾個核心符號,譯者就已經能處理很多工作。
96
 
 
98
 
99
  ## 正規表示式摘要
100
 
101
+ | 字元 | 意義 / 用法 | 備註 |
102
+ | :--- | :--- | :--- |
103
+ | **字面意義的字元**<br>(literal characters) | 例如:`a` `b` `1` `2` `_` `"` `<` `>` | |
104
+ | **特殊元**<br>**metacharacters** | | |
105
+ | `\t` | **t**ab(定位字元) | |
106
+ | `\n` | **n**ewline(換行字元);<br>Windows:`\r\n`(CR LF)<br>UNIX/Linux/macOS:`\n`(LF) | |
107
+ | `\s` | white **s**pace(空白字元) | 包含空格(space)及 tab 等 |
108
+ | `.`(*句點*) | 比對任意字元(`\n` 除外) | |
109
+ | **元字元**<br>(必須以 `\` 跳脫才能進行文字比對) | | |
110
+ | `\` | 跳脫 (escape) 字元 | |
111
+ | `|` | 替代(或) | |
112
+ | `()` | 群組;`(?:)` 為非擷取群組 | |
113
+ | `[]` | 字元類別;恰好比對一個字元 | 範例:比對任一英文母音字母 `[aeiou]` |
114
+ | `{}` `*` `?` `+` | 量詞 | |
115
+ | `^` `$` | 錨點(零寬度) | |
116
+ | `?` | (1) 作為量詞時,作用於緊鄰其左方的一個字元、字元類別或群組<br>(2) 作為非貪婪 non-greedy 或懶惰 lazy 指定符 | |
117
+ | **錨點 anchor**<br>(零寬度:僅比對位置,不比對字元 | | |
118
+ | `\b` | 詞邊界 | 範例:空白字元(或標點符號)與文字字元之間的位置 |
119
+ | `^` | 脫字符號字串開頭 | |
120
+ | `$` | 錢字符號:字串結尾 | |
121
+ | **量詞 quantifier**<br>作用於緊鄰其左方的一個字元、字元類別或群組) | | |
122
+ | `*` | 零次或多次 | |
123
+ | `+` | 一次或多次 | 亦即「至少出現一次」 |
124
+ | `?` | 零次或一次 | 亦即「可有可無」 |
125
+ | `{n}` | 恰好 *n* 次 | |
126
+ | `{n,m}` | 至少 *n* 次,至多 *m* 次 | |
127
+ | `{n,}` | 至少 *n* 次,無上限 | |
128
+ | **字元類別** | 以 `[]` 括起的字元 ── 恰好比對一個字元 | |
129
+ | **範圍** | `[a-z]` 比對任一英文小寫字母;<br>`\p{Han}`(最完整的寫法)或 `[一-龥]` 或 `[\u4E00-\u9FFF]` 或 `[\x{4E00}-\x{9FFF}]`,共 20,992 個基本中文字元 | 起始字元的 Unicode 碼位必須較小;中日韓統一表意文字(CJK Unified Ideographs)涵蓋最常見的 CJK 字元;Zed 及 Calibre ebook-viewer 皆可接受;CudaText 使用最後一種格式處理一般 Unicode 範圍 |
130
+ | **快捷寫法** | `^` 在 `[]` 中表示該類別的「相反」(也就是所有此類別以外的元) | 範例:比對*任何*非英文母音的字元 `[^aeiou]` |
131
+ | `\d` | 數字,等同於 `[0-9]` | |
132
+ | `\w` | 「文字」字元;`\d` 加上 `[a-zA-Z]` 加上 `_`(底線字元;underscore),對於非英文字母書寫的語言可能還包含更多字元 | `\w` 的定義取決於特定的正規表示式引擎;部分引擎會納入中日韓字元及含附加符號的字元(如 é、ç、ü);其他引擎則不會。 |
133
+ | `\D` `\S` `\W`<br>`\P{Han}`<br>(相反集合) | 代表對應小寫字元類別之**否定**的字元類別 | `\D`、`\S`、`\W`、`\P{Han}` 分別為非數字、非空白、非文字及非中日韓字元 |
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
134
 
135
  例如,若欲找出文件中所有可能的變數或 placeholder,可以用\\{\[\^}\]+\\} 或 \\{\\{\[\^}\]+\\}\\}之類的模式。若欲找出所有數值加單位的表達,例如 5 km、3.5 GB、20%,可以寫成`\d+`(\\.`\d+`)?\\s?(km\|GB\|%)。若欲擷取英文術語後面緊接中文括號說明的寫法,例如Application Programming Interface(API) 或workspace(工作區),可以針對英文字串與全形括號組合設計模式。這些檢索方式之所以有用,是因為這些模式不是把文字當作一串字,而是把文字當成一種可辨識的形式。
136
 
 
191
 
192
  ... **throwing** *you* under the bus.\ ... **throw** *me* under the bus!\ I **threw** *four people* under the bus for \$35,000, ... 等等
193
 
194
+ ![](media/image4.png){width="5.854166666666667in" height="2.2916666666666665in"}
195
 
196
  -----------------------------------------------------------------------
197
 
 
339
 
340
  自建資源若要變成長期資產,還需要定期除污。所謂除污,包括刪除版本過時內容、移除低品質OCR 句對、合併重複資料、標記已棄用用詞、區分不同客戶或品牌的 style guide,並避免把明顯不該重用的材料一路保留。例如短期促銷文案、活動slogan、一次性公告、錯誤頁訊息的舊版本,都可能在某個時點失去重用價值。若不定期整理,資料庫只會越來越大,卻越來越不可信。
341
 
342
+ 在這裡,Excel、TMX與其他格式之間其實不是互斥關係,而是不同層次的配合。很多譯者可以先用Excel 做整理與人工作業,等品質穩定後再匯出成 TMX 匯入CAT;同時又保留原始 HTML、TXT、ePub 或 Markdown檔作為檢索層。這種多層結構雖然看起來麻煩,但長期而言反而最穩。因為這種分層做法尊重不同格式的用途:表格適合管理、純文字適合搜尋、TMX適合 CAT。
343
 
344
  若要把這件事具體化,可以把「從雙語網站到CAT」想成一條最小可行流程。第一步,挑選一組可信網站,先人工確認二十組中英文頁面是真正翻譯關係。第二步,保留原始HTML 或 PDF,另外抽出正文成為 raw_text。第三步,用 regex與人工檢查去掉導覽列、頁尾、重複標題與格式噪音。第四步,把每份文本依標題、段落、列表項切成較穩定的單位。第五步,再進入句子層對齊,並把可疑項標記為待驗證。第六步,把人工看過的一批高品質句對先放進Excel 或CSV,補齊來源、語區、領域與版本資訊。第七步,只有在這一批資料已經足夠乾淨時,才匯出成TMX 並導入 CAT工具。這條流程看起來保守,但優點在於每一層都能回頭修正,不會因為一次匯入就把污染擴散到整個工作環境。
345
 
src/media/messed_up_regex_summary_table.png ADDED

Git LFS Details

  • SHA256: 7d5214fd9fdb600b202eb55b690bd9125c547669c26305df98e964f2670bf843
  • Pointer size: 131 Bytes
  • Size of remote file: 207 kB