summaryrefslogtreecommitdiff
path: root/info/tex-virtual-academy-pl/prog/hyph.html
blob: 2f396f07a6a510c5af2a59c77964674482a659ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
<meta http-equiv="Content-language" content="pl">
<meta name="Author" content="W³odzimierz Macewicz">
<meta name="Keywords" content="tex, dzielenie wyrazów, Wirtualna Akademia">
<title>Tam gdzie minus oznacza dzielenie</title>
</head>
<body bgcolor=#a0F0f0>

<center>
<h2>Tam gdzie minus oznacza dzielenie</h2>

<i></i><p>
<i></i><p>
autor: <i>
Bogus³aw Jackowski,
Marek Ryæko
</i><p>

<i></i><p>
</center>

<hr>

<i></i><p>
<i></i><p>
<h3>Spis tre¶ci</h3>
<dd><b><a href=#r1>Regu³y dzielenia wyrazów w jêzyku polskim </a></b>
<dd><b><a href=#r2>Jak TeX dzieli wyrazy </a></b>
<dd><b><a href=#r3>Automatyczne tworzenie danych dla algorytmu dzielenia 
        wyrazów</a></b>
<dd><b><a href=#r4>Rêczne tworzenie danych dla algorytmu dzielenia 
        wyrazów</a></b>
<dd><b><a href=#r5>Inne aspekty automatycznego dzielenia wyrazów</a></b>
<dd><b><a href=#r6>Uwagi koñcowe</a></b>

<i></i><p>
<i></i><p>
<hr>

Ten nieco przewrotny tytu³ dotyczy oczywi¶cie przenoszenia, czyli inaczej
dzielenia wyrazów, zwyczajowo zaznaczanego w tekstach kresk± przypominaj±c±
minus.

<p>
Automatyczne dzielenie wyrazów nale¿y do podstawowych zadañ
wykonywanych przez programy komputerowe s³u¿±ce do sk³adania tekstów.

<p>
Jednym z najciekawszych algorytmów dzielenia wyrazów, a przy tym 
dok³adnie opisanych i udokumentowanych, pos³uguje siê system TeX. 
Jego ,,ciekawo¶æ'' polega na tym, ¿e jest to
algorytm uniwersalny, tzn. daj±cy siê przystosowaæ do dzielenia wyrazów
w ró¿nych jêzykach, a jednocze¶nie zdumiewaj±co prosty i efektywny
w implementacji. Warto siê temu algorytmowi przyjrzeæ.

<h3><a name=r1>Regu³y dzielenia wyrazów w jêzyku polskim</a></h3>

¯eby zrozumieæ, jak trudne zadanie postawi³ przed sob± Knuth, zajmijmy siê
przez chwilê regu³ami dzielenia wyrazów w jêzyku polskim. M. Szymczak
(,,S³ownik ortograficzny jêzyka polskiego'', PWN, Warszawa, 1986) pisze:


<p>
,,(...) Dzielenie wyrazów przy przenoszeniu wyrazów z jednego wiersza do
nastêpnego opiera siê w ortografii polskiej na dwóch kryteriach: fonetycznym
i morfologicznym. Kryterium fonetyczne nakazuje przenoszenie czê¶ci wyrazu
z jednego wiersza do drugiego zgodnie z podzielno¶ci± na sylaby,
np. "bu&nbsp;rza", "nie&nbsp;wy trzy&nbsp;ma&nbsp;nie", "li&nbsp;to¶æ",
"po&nbsp;na&nbsp;pi&nbsp;sy&nbsp;wa&nbsp;li&nbsp;by", "za&nbsp;nie&nbsp;po&nbsp;ko&nbsp;jo&nbsp;ny", "wy&nbsp;so&nbsp;ko", "le&nbsp;piej",
"te&nbsp;go", "prze&nbsp;ciw". Kryterium morfologiczne nakazuje przenoszenie
czê¶ci wyrazu z jednego wiersza do drugiego zgodnie z podzielno¶ci± na
przedrostek i rdzeñ, a w wyrazach z³o¿onych --- w miejscu z³o¿enia,
np. "przed&nbsp;murze", "pod&nbsp;punkt", "wy&nbsp;brze¿e", "roz&nbsp;³±ka",
"od&nbsp;d¼wiêk", "przy&nbsp;k³ad", "za&nbsp;p³ata", "na&nbsp;trafiæ", "wy&nbsp;¶cigi",
"o&nbsp;brona", "bez&nbsp;wstyd", "u&nbsp;k³adowy", "po&nbsp;dró¿", "pod&nbsp;oficer",
"pod&nbsp;oddzia³", "na&nbsp;przód", "pod&nbsp;o&nbsp;pieczny", "po&nbsp;dmuch", "noc&nbsp;leg",
"konio&nbsp;krad". (...)''

<p>

przy czym

<p>
,,(...) kryterium morfologiczne jest nadrzêdne w stosunku do kryterium
fonetycznego (...)''


<p>
Zasady ogólne wygl±daj± prosto i przejrzy¶cie. Omówienie zasad szczegó³owych
zajmuje Szymczakowi piêæ stron i o ile cz³owiekowi mog³oby to wystarczyæ,
to jednak zalecenia takie jak:

<p>

,,(...) Je¿eli przejrzysto¶æ podzia³u na przedrostek i rdzeñ jest w <i><b>
dzisiejszej ¶wiadomo¶ci jêzykowej zatarta</b></i> (podkr. aut.), grupy
spó³g³oskowe znajduj±ce siê na granicy cz±stek dzielimy dowolnie,
np. "o&nbsp;b³ok" a. "ob&nbsp;³ok", "o&nbsp;trêby" a. "ot&nbsp;rêby", (...)''

<p>
bardzo trudno zalgorytmizowaæ.

<p>
Spróbujmy siê zastanowiæ, czy nie ma takich zasad, od których nie
by³oby wyj±tków.

<p>
Dobrym kandydatem wydawaæ by siê mog³a regu³a niedzielenia g³osek "cz",
"dz", "rz" oraz "sz". Niestety, s± wyj±tki od tej regu³y:
"tysi±c&nbsp;z³otowy", "pod&nbsp;zwrotnikowy", "mar&nbsp;zn±æ" i "em&nbsp;es&nbsp;zet".
Podobnie miêkkie "ni" mo¿e ulec rozbiciu, na przyk³ad w s³owie
"in&nbsp;iekcja".

<p>
To mo¿e chocia¿ da siê ustaliæ, ¿e sylaba nie mo¿e sk³adaæ siê z samych
spó³g³osek? Jest to w zasadzie dobra regu³a, ale ma (co najmniej) jeden
wyj±tek: szkocki przedrostek "Mc" wolno oddzieliæ. Na przyk³ad nazwisko
"McMillan" wolno podzieliæ "Mc-Millan". Oczywi¶cie implikuje to k³opoty
z rzymskim zapisem liczb --- rok "MCMXCII" komputer móg³by uznaæ za
szkockie nazwisko.

<p>
W takim razie mo¿e istniej± nie zakazy, a nakazy dzielenia, od których nie ma
wyj±tków? Np. nakaz rozdzielania par identycznych spó³g³osek ("¶wiec&nbsp;cy",
"Jagie³&nbsp;³o", "³am&nbsp;my", "pan&nbsp;na", "ar&nbsp;ras", "las&nbsp;so", "get&nbsp;to" itp.).
Odpowied¼, jak ³atwo by³o przewidzieæ, brzmi: ,,nie''.  Np. kryterium
morfologiczne nakazuje podzia³ "ode&nbsp;ssie", a nie "odes&nbsp;sie", chyba ¿e chodzi
o "Odessê". A je¶li siê zgodziæ, ¿e przedrostek rodzimy musi byæ oddzielony,
to bêdzie k³opot ze s³owem "zeppelin", bo jak komputer mia³by siê domy¶liæ,
¿e w tym przypadku nie chodzi o przedrostek "ze"? Móg³by wprawdzie
wiedzieæ, ¿e ¿adne s³owo w jêzyku polskim nie zaczyna siê od "pp" (chocia¿
jest s³owo zaczynaj±ce siê od trzech spó³g³osek, z czego dwie pierwsze to
"ww" --- proszê zgadn±æ jakie to s³owo). Ale je¶li jaki¶ autor chcia³by
oddaæ mowê j±kaj±cego siê bohatera pisz±c np. "zeppsuuty", to co wtedy?

<p>
Niejednoznaczno¶ci typu ,,"odessie"'' stanowi± dla komputera trudno¶æ
praktycznie nie do pokonania. Choæ jest ich niewiele, to jednak zdarzaj± siê
i utrudniaj± ¿ycie, np.: "podró¿owaæ" --- byæ w podró¿y lub pokryæ ró¿em
lica; "odziewaæ" --- ubieraæ lub odpowiedzieæ w taki sam sposób komu¶, kto
ziewn±³; "podrobiæ" --- np. karmê ptactwu lub podpis;
"Tarzanie" --- s³owo to mo¿e oznaczaæ wzywanie znanego bohatera komiksów
lub czynno¶æ tarzania siê; "narwali" --- to s³owo z kolei mo¿na rozumieæ
jako czas przesz³y dokonany albo dope³niacz liczby mnogiej.

<p>
W sytuacjach tego typu jedynie kontekst semantyczny decyduje o podziale
s³owa. Rozs±dnie jest nie ¿±daæ zbyt wiele od programów sk³adaj±cych teksty
i zostawiæ cz³owiekowi mo¿liwo¶æ ingerencji w bardziej skomplikowanych
przypadkach.

<p>
Sporo trudno¶ci  nastrêcza dzielenie 
nazwisk  i nazw w³asnych. O nazwiskach
szkockich ju¿ by³a mowa. Ale i polskie nazwy potrafi± sprawiæ k³opot. Na
przyk³ad czy w nazwisku "Utnik" g³oskê "u" nale¿y traktowaæ jako
przedrostek, tak jak w s³owie "u&nbsp;tnie"? Szczególnie trudne do podzia³u s±
s³owa bêd±ce zbitk± dwóch lub wiêcej s³ów. Zalecany jest oczywi¶cie podzia³
w miejscu z³o¿enia: "noc&nbsp;leg", "trzech&nbsp;set&nbsp;letni" itp. Zdarzaj± siê jednak
czasem bardzo osobliwe nazwy w³asne, np. "Wierzch&nbsp;las". Chocia¿ taki w³a¶nie
podzia³ wydaje siê uzasadniony, to przecie¿ trudno daæ g³owê, ¿e nazwy tej
nie da siê wywie¶æ od "wierzenia" i "chlastania". Podobnie gdyby jaka¶
miejscowo¶æ nazywa³a siê "Szynkwas", to nazwa mog³aby siê wywodziæ
ostatecznie --- choæ jest to ma³o prawdopodobne --- od "szyn" i "kwasu".

<p>
"Zeppelin" i "szynkwas" to przyk³ady s³ów obcych b±d¼ obcego
pochodzenia, które zadomowi³y siê w naszym jêzyku. S³owa tej kategorii, takie
jak np. "er&nbsp;zac", "jazz&nbsp;man" czy "soft&nbsp;ware", to ¼ród³o nowych
utrapieñ dla kogo¶, kto chcia³by sformalizowaæ regu³y dzielenia wyrazów
w jêzyku polskim.


<p>
W tej sytuacji nie dziwi± wyniki testów porównawczych W. Puzy
(W. Puza, praca magisterska pt. ,,Analiza porównawcza wybranych programów
Desktop Publishing (DTP)'', Instytut Poligrafii Politechniki Warszawskiej),
który stwierdzi³, co nastêpuje:

<p>
,,(...) Test sprawdzaj±cy poprawno¶æ dzielenia polskich s³ów
wyodrêbni³ 3 ró¿ne poziomy skuteczno¶ci testowanych programów:

<ul>
<li>Cyfroset, TeX -- ok. 10% b³êdów

<li>Dywiz (dedykowany dla Quark'a) -- powy¿ej 20% b³êdów

<li>Bizon (dedykowany Calamusowi), VP Commander (dedykowany
 Venturze) -- powy¿ej 50% b³êdów. (...)''
</ul>

Tak wiêc pozornie trywialny problem okazuje siê w praktyce trudnym
orzechem do zgryzienia.


<p>
Mo¿na oczywi¶cie polemizowaæ z wytycznymi jêzykoznawców. Zalecany przez
Szymczaka podzia³ "za&nbsp;jrzeæ" lub "po&nbsp;jmaæ" wydaje siê dzi¶ anachroniczny.
Pój¶cie dalej tym tropem, przy równoczesnym zas³anianiu siê ,,wymaganiami
komputerów'', powoduje, ¿e zbyt kusz±ce staje siê maksymalne upraszczanie
regu³, oczywi¶cie z uszczerbkiem dla jêzyka polskiego.

<p>
Autor TeX-a obra³ zupe³nie inn± drogê: szuka³ takiego algorytmu, który
by³by w zasadzie niezale¿ny od regu³ dzielenia wyrazów; regu³y dzielenia
mia³yby byæ okre¶lone za pomoc± danych do tego algorytmu. Algorytm
spe³niaj±cy te wymagania skonstruowa³ F. M. Liang (rozprawa doktorska
pt. ,,Word Hy-phen-a-tion by Com-put-er'', Uniwersytet Stanforda, USA,
1983). Uda³o mu siê nawet co¶ wiêcej: dane s± stosunkowo ³atwe do
utworzenia, nie jest do tego bynajmniej potrzebna wiedza informatyczna.

<h3><a name=r2>Jak TeX dzieli wyrazy</a></h3>

Algorytm dzielenia wyrazów jest niezwykle prosty. Oczywi¶cie przy za³o¿eniu,
¿e odpowiednie dane zosta³y utworzone. Za³ó¿my wiêc, ¿e te dane mamy.
Sk³ada siê na nie zbiór ci±gów utworzonych na przemian z liter
i cyfr, np.: <code>2s0z1z0</code>, <code>2s0z0l0n0</code>, <code>2t1æ0</code> itp. Zamiast cyfry skrajnej mo¿e
wyst±piæ kropka, np.: <code>.w0e3s2</code>, <code>.w0w8</code>, <code>8r0s0z.</code>, <code>8r0z0³.</code> itp. Ci±gi te
nazywaæ bêdziemy wzorcami.

<p>
Przypu¶æmy teraz, ¿e mamy dane jakie¶ s³owo, np. <code>odkaszln±æ</code>. Najpierw
zamieniamy je na postaæ tak±, jak± maj± wzorce, wstawiaj±c pomiêdzy literami
cyfrê <code>0</code>, a na brzegach kropki, otrzymuj±c <code>.o0d0k0a0s0z0l0n0±0æ.</code>
(kropka --- jak st±d widaæ --- oznacza skraj s³owa). Nastêpnie wyszukujemy
w naszym zbiorze danych wszystkie wzorce, które na to s³owo daj± siê na³o¿yæ
w taki sposób, ¿e zgadzaj± siê po³o¿enia liter i kropek, ale niekoniecznie
cyfr; w szczególno¶ci cyfra mo¿e siê nak³adaæ na kropkê, ale nie na literê.
Powiedzmy, ¿e znale¼li¶my nastêpuj±ce wzorce: <code>.o2d2</code>, 
<code>.o0d3k2</code>, <code>0±1</code>,
<code>2d1k0</code>, <code>2l1n0</code>, <code>2s0z1l0</code>, 
<code>2s0z0l0n0</code>, <code>8æ.</code>, <code>0a1</code>, 
<code>0o1</code>, <code>0s4z0</code>. Je¶li
je na³o¿ymy na s³owo <code>.o0d0k0a0s0z0l0n0±0æ.</code> i spo¶ród cyfr 
nak³adaj±cych siê
na siebie we¼miemy najwiêksze, to otrzymamy <code>.o2d3k2a2s4z2l1n0±8æ.</code> --- i to
ju¿ wszystko. Zgodnie z algorytmem Lianga s³owo wolno podzieliæ jedynie
w takim miejscu, w którym pojawia siê cyfra nieparzysta. Oznacza to, ¿e
algorytm dopuszcza w tym wypadku dwa punkty podzia³u: "od-kaszl-n±æ".

<p>
Wzorce przechowywane s± w pamiêci komputera jako struktura drzewiasta
(dok³adniej  "trie"; p. D. E. Knuth, ,,The Art of
Computer Programming'', tom 3, ,,Sorting and Searching''). Pozwala to na
znaczne upakowanie danych przy zachowaniu szybkiego dostêpu do informacji,
a równocze¶nie struktura danych i algorytm s± stosunkowo ³atwo
implementowalne.

<p>
Warto podkre¶liæ, ¿e dziêki efektywno¶ci zastosowanej metody TeX mo¿e
przechowywaæ w pamiêci kilka ró¿nych zestawów wzorców i dzieliæ wyrazy
w kilku jêzykach w obrêbie jednego dokumentu (a nawet akapitu).


<p>
Problem jedynie w tym sk±d wzi±æ wzorce?

<h3><a name=r3>Automatyczne tworzenie danych dla algorytmu dzielenia 
wyrazów</a></h3>

G³ówna czê¶æ pracy Lianga dotyczy³a metody tworzenia wzorców na podstawie
s³ownika zawieraj±cego s³owa poprawnie podzielone. Przygotowanie takiego
s³ownika jest oczywi¶cie czaso- i pracoch³onne, ale za to dalsza czê¶æ
zadania jest ju¿ wzglêdnie ³atwa. W najwiêkszym uproszczeniu algorytm Lianga
mo¿na zapisaæ nastêpuj±co:

<pre>
 <i>m </i> := maksymalna d³ugo¶æ wzorca
 <b>for</b> <i>c := 1</i> <b>to</b> <i>9</i> <b>do</b>
   <b>begin</b>
        ustal kryteria akceptowalno¶ci dla wzorców
     <b>for</b> <i>l:=1</i> <b>to</b> <i>m</i> <b>do</b>
       <b>begin</b>
            dla ka¿dego s³owa w s³owniku sprawd¼, czy nie 
	    dostarcza ono informacji o mo¿liwo¶ci wstawienia 
	    cyfry <i>c</i> we wzorcach d³ugo¶ci <i>l</i> przy 
	    zadanych kryteriach akceptowalno¶ci
       <b>end</b>
  <b>end</b>
</pre>

Innymi s³owy program uzupe³nia zestaw wzorców kolejno dla coraz
wiêkszych cyfr i coraz d³u¿szych wzorców, zostawiaj±c u¿ytkownikowi na ka¿dym
etapie mo¿liwo¶æ ingerencji. Kryteria akceptowalno¶ci okre¶la siê przez
podanie trzech liczb: wagi dla podzia³ów poprawnych <i>w<sub>p</sub></i>, 
wagi dla podzia³ów niepoprawnych <i>w<sub>n</sub></i> i poziomu 
akceptowalno¶ci <i>p</i>. Wzorzec jest akceptowany,
gdy <i>{k<sub>p</sub>w<sub>p</sub>-k<sub>n</sub>w<sub>n</sub>&gt;= p}</i>, 
gdzie <i>k<sub>p</sub></i> i <i>k<sub>n</sub></i> oznaczaj± odpowiednio
liczbê poprawnych i niepoprawnych podzia³ów generowanych przez dany wzorzec.

<p>
W niektórych przypadkach mo¿e siê zdarzyæ, ¿e program nie znajdzie zestawu
wzorców dziel±cego poprawnie wszystkie s³owa. Powodem mog± byæ b³êdne dane
(np. w s³owniku mo¿e siê znale¼æ dwa razy to samo s³owo, ale inaczej
podzielone) b±d¼ niew³a¶ciwy dobór liczb <i>w<sub>p</sub></i>, 
<i>w<sub>n</sub></i> oraz <i>p</i> w kolejnych
iteracjach. Ró¿ne strategie dobierania warto¶ci tych wspó³czynników wp³ywaj±
na objêto¶æ wynikowego zestawu wzorców. Minimalizacja liczby wzorców
w wygenerowanym automatycznie zestawie wymaga pewnej wprawy
i --- oczywi¶cie --- przestudiowania pracy doktorskiej Lianga, gdzie
zagadnienie to jest szczegó³owo omówione.

<p>
Jak widaæ ,,nauczenie'' TeX-a zasad dzielenia wyrazów w danym jêzyku jest
w³a¶ciwie kwesti± odpowiednio zasobnego s³ownika podzielonych poprawnie
wyrazów. Dostarczenie takiego s³ownika to zadanie dla jêzykoznawców.
Natomiast dalszy etap jest ideowo prosty, nie wymaga znajomo¶ci technik
programowania, ani ¿adnych innych specjalnych umiejêtno¶ci. Potrzebna jest
jedynie cierpliwo¶æ.

<h3><a name=r4>Rêczne tworzenie danych dla algorytmu dzielenia wyrazów</a></h3>

Mo¿liwo¶æ automatycznego tworzenia zestawu wzorców nie wyklucza mo¿liwo¶ci
stworzenia takiego zestawu rêcznie. Pocz±tkowo wydawa³o siê, ¿e jêzyk polski
ma na tyle regularne zasady dzielenia wyrazów, ¿e ³atwiej bêdzie utworzyæ
zestaw wzorców w ten w³a¶nie sposób.

<p>
W 1984 J. D&eacute;sarm&eacute;nienowi uda³o siê zamkn±æ regu³y dzielenia 
wyrazów dla
jêzyka francuskiego w zestawie licz±cym 804 wzorce i dla jêzyka w³oskiego
w zestawie licz±cym zaledwie 88 wzorców, podczas gdy standardowy zestaw
wzorców dla amerykañskiego TeX-a zawiera ich 4447 
(J. D&eacute;sarm&eacute;nien,
,,The use of TeX in French: hyphenation and
typography'', w: D. Lucarella (ed.), ,,TeX for Scientific Documentation,
Proc. of the First European Conference, Addison-Wesley, 1984). Sukces
podej¶cia D&eacute;sarm&eacute;niena zainspirowa³ H. Ko³odziejsk±, która
w roku 1987 opublikowa³a listê 2168 wzorców dla jêzyka polskiego
(H. Ko³odziejska, ,,Dzielenie wyrazów w systemie TeX'', Sprawozdania
Instytutu Informatyki Uniwersytetu Warszawskiego, nr 165, 1987).

Wynik Ko³odziejskiej zdawa³ siê potwierdzaæ wstêpne za³o¿enia. Niestety. Po
kilku latach intensywnego testowania (maczali w tym palce m.in. autorzy
niniejszej pracy) wzorców znacznie przyby³o. Po gruntownej przeróbce
liczebno¶æ zestawu wzorców wzros³a do 4053 i wolno przypuszczaæ, ¿e to
jeszcze nie koniec.

<p>
W tych warunkach zasadne staje siê pytanie, czy nie nale¿a³oby zrewidowaæ
za³o¿enia o regularno¶ci zasad podzia³u s³ów w jêzyku polskim. Jest
prawdopodobne, ¿e program Lianga móg³by wygenerowaæ mniej liczny zestaw
wzorców.

<p>
Tym niemniej, jak wynika³o z porównañ poczynionych przez Puzê (p. wy¿ej),
zestaw wzorców dla jêzyka polskiego w swojej obecnej postaci daje wyniki
zadowalaj±ce. Zwa¿ywszy, ¿e Puza w istocie dysponowa³ jedn± z wersji
po¶rednich zestawu i ¿e zestaw aktualny jest znacznie udoskonalony w stosunku
do tamtej wersji, mo¿na oczekiwaæ jeszcze lepszych rezultatów.

<p>
Najaktualniejsza wersja tego zestawu wchodzi w sk³ad pakietu MeX (polskiej
adaptacji TeX-a). Pakiet ten jest dystrubuowany w postaci ¼ród³owej jako
produkt "public domain" przez
GUST.

<h3><a name=r5>Inne aspekty automatycznego dzielenia wyrazów</a></h3>

Automatyczne znajdowanie miejsc podzia³u s³ów nie wyczerpuje spraw zwi±zanych
z dzieleniem wyrazów do celów sk³adu komputerowego. Jak zosta³o ju¿
wspomniane, czasami ingerencja cz³owieka staje siê niezbêdna. Poprawnie
zaprojektowany system sk³adu tak± ingerencjê powinien umo¿liwiaæ. U¿ytkownik
powinien mieæ w szczególno¶ci mo¿liwo¶æ wprowadzenia zakazu dzielenia
niektórych s³ów.

<p>
W przypadku TeX-a nierozs±dne by³oby manipulowanie za ka¿dym razem przy
zestawie wzorców. U¿ytkownik TeX-a mo¿e podzieliæ s³owo wed³ug w³asnego
uznania na dwa sposoby.

<p>
Pierwszy sposób to umieszczenie go na li¶cie wyj±tków, nadrzêdnej w stosunku
do wzorców. Jest to, niestety, metoda wygodna jedynie w jêzykach
niefleksyjnych. W jêzyku polskim umieszczenie jakiego¶ s³owa na li¶cie
wyj±tków wi±¿e siê (w przypadku TeX-a) z podaniem od razu wszystkich jego
odmian, co jest raczej nieporêczne. Na szczê¶cie problem taki nie pojawia siê
zbyt czêsto. G³ównym powodem tego typu zabiegów bywaj± s³owa z³o¿one lub
obcego pochodzenia (b±d¼ i jedno, i drugie).

<p>
Drugi sposób polega na wskazaniu w tek¶cie dodatkowych miejsc podzia³u
(ang. <em>discretionary hyphens</em>). Wiêkszo¶æ systemów DTP
oferuje tak± mo¿liwo¶æ u¿ytkownikom. W przypadku TeX-a nale¿y ostro¿nie
pos³ugiwaæ siê t± metod±, bo mo¿na przeszkodziæ TeX-owi w automatycznym
wstawianiu drobnych odstêpów miêdzy znakami (inaczej podciêæ, ang. <em>implicit
kerns</em>).

<p>
TeX oferuje u¿ytkownikowi jeszcze parê innych mo¿liwo¶ci, pozwalaj±cych
na panowanie nad algorytmem podzia³u wyrazów.

<p>
Zabronienie podzia³u wyrazu jest w TeX-u spraw± trywialn±, wystarczy wyraz
,,zamkn±æ'' w tzw. pude³ko (TeX-owa komenda <code>\hbox</code>).

<p>
U¿ytkownik mo¿e te¿ okre¶liæ minimaln± d³ugo¶æ oddzielonego pocz±tku
i koñca s³owa. Domy¶lnie TeX nie podzieli s³owa krótszego ni¿
piêcioliterowe: pocz±tek nie mo¿e byæ krótszy ni¿ dwie litery, koniec --- nie
krótszy ni¿ trzy litery.  Przy sk³adaniu w w±skiej szpalcie mo¿e siê pojawiæ
konieczno¶æ z³agodzenia tych rygorów, zw³aszcza ¿e w jêzyku polskim za
dopuszczalne uznaje siê oddzielanie pojedynczej samog³oski na pocz±tku s³owa
i dwuliterowej sylaby na koñcu. Z drugiej strony w sk³adzie wysokiej jako¶ci
powinno siê unikaæ dzielenia wyrazów w ogóle, a tym bardziej na zbyt krótkie
fragmenty.  Mo¿liwo¶æ sterowania wielko¶ci± dzielonego s³owa jest wiêc bardzo
przydatna w praktyce.

<p>
Zasady dobrego sk³adu wymagaj±, aby wyrazy dzielone nie pojawia³y siê
w s±siednich wierszach i by ostatni wiersz na prawej stronie nie zawiera³
s³owa dzielonego. Sk³ady nie spe³niaj±ce tych wymogów uwa¿a siê (i s³usznie)
za brzydkie. TeX dostarcza parametrów pozwalaj±cych skutecznie utrudniaæ
brzydkie sk³adanie. W szczególno¶ci mo¿na wrêcz zabroniæ umieszczania s³owa
dzielonego w ostatnim wierszu na stronie. Mo¿e to sprawiæ pewne k³opoty
algorytmowi ³ami±cemu wiersze na strony, ale to ju¿ zupe³nie inna historia.

<p>
Zostaje jeszcze problem s³ów zawieraj±cych ³±cznik, np. "bia³o-czerwony".
W jêzyku angielskim s³owa takie jak "machine-oriented" przenosi siê


<pre>
 "machine-"
 "oriented"
</pre>

podczas gdy w jêzyku polskim stanowczo zaleca siê dostawienie
dodatkowo ³±cznika na pocz±tku nastêpnego wiersza:


<pre>
"bia³o-"
"-czerwony"
</pre>

TeX pozwala do³±czyæ do zestawu komend standardowych komendy definiowane
przez u¿ytkownika. W MeX-u zosta³a zdefiniowana komenda <code>\=</code>, 
któr± nale¿y podczas przygotowywania tekstu umie¶ciæ w miejscu ³±cznika.
Kontynuuj±c przyk³ad, "bia³o-czerwony" nale¿a³oby podaæ TeX-owi jako
<code>bia³o\=czerwony</code>. U¿ytkownik musi pamiêtaæ o konsekwentnym
przestrzeganiu tej zasady, a o resztê zadba ju¿ TeX. Pozostawienie zwyk³ego
³±cznika oznacza s³owo niepodzielne. Jest to przydatne w przypadku takich
s³ów jak np. "K-202", których oczywi¶cie dzieliæ nie nale¿y.

<h3><a name=r6>Uwagi koñcowe</a></h3>

Jak widaæ zagadnienie automatycznego dzielenia wyrazów to problem bardzo
obszerny. Wchodz± tu w grê zagadnienia jêzykoznawcze, typograficzne
i informatyczne.

<p>
Praktyka pokazuje, ¿e bardzo efektywny algorytm automatycznego podzia³u s³ów,
w po³±czeniu z niekoniecznie bardzo wygodnymi mo¿liwo¶ciami ingerowania
rêcznego, stwarza u¿ytkownikowi mo¿liwo¶æ panowania w pe³ni nad procesem
dzielenia s³ów przez system komputerowego sk³adu tekstów.

<p>
Wydaje siê nam, ¿e rozwi±zania zastosowane przez Knutha s± na tyle
uniwersalne (a do tego sprawdzone w praktyce), ¿e warto je szerzej
rozpropagowaæ. Mog± siê okazaæ szczególnie przydatne w Polsce, gdzie rynek
software'owy dopiero powstaje i dobre <i>nomen omen</i> wzorce s± rzecz± nie
do pogardzenia.


<hr>
Zredagowa³:
<em>W³odzimierz Macewicz</em>
<hr>
</body>
</html>