University of Turku

Suomen kielen tavutus

Suomen kielen tavutus on yksinkertaista, kun sen osaa. Jopa tietokonekin on mahdollista opettaa tavuttamaan. Omituista on se, että Suomen kieltä tavutetaan TAKAPERIN.

Yksinkertaisin tavustusalgoritmi toimii siten, että lähdetään sanana lopusta. jokaisen vastaantulevan konsonantin (tai tavumerkin) eteen pistetään tavuviiva.
Tällä algoritmilla selvitään yksinkertaisista sanoista, esim AUTO (AU-TO), TALO (TA-LO), SIKA (SI-KA).

Algoritmi ei toimi, jos konsonantteja on peräkkäin useampia, esim PORKKANA (PORK-KA-NA), joka tavuttuisi tällä säännöllä seuraavasti: POR-K-K-A-NA.
Tehdään lisäsääntö: jatketaan tavuttamatta, kunnes on ohitettu vähintään yksi vokaali. Nyt PORKKANA taipuu oikein: PORK-KA-NA.

Sääntö ei kuitenkaan ole täydellinen vieläkään. Esimerkiksi sana KAUNIAINEN (KAU-NI-AI-NEN) tavuttuukin nyt KAU-NIAI-NEN. tarvittaisiin siis vielä tätä koskeva lisäsääntö. Samaten VALTIONYHTIÖ on edelleen VAL-TIO-NYH-TIÖ (huono esimerkki) ja OHIO on O-HIO

Virheetkin huomioiden yksinkertaisella menetelmällä on päästy kohtuullisen hyvään tulokseen.

Alla on listaus QuickBasicilla kirjoitetusta ohjelmasta, joka demonstroi tätä algoritmia. Olen kirjoittanut tämän ohjelman joskus 198x -luvulla, enkä ole hionut tätä versiota silloin enkä sen jälkeen. Parhaimmillaan olen joskus saanut tämän algoritmin sullottua neljälle Basic-riville


input "Anna tavutettava sana";sana$
sana$ = UCASE$(sana$)
CALL TAVUTA(sana$)
PRINT "Tavutettu sana"; sana$
END

SUB TAVUTA (sana$) STATIC
l = LEN(sana$)
an$ = "AEIOUYÄÖ"				'vokaalit
FLAG = 0
vok = 1
ANA$ = RIGHT$(sana$, 1) 			'sanan viimeinen merkki

FOR u = l - 1 TO 1 STEP -1
	k$ = MID$(sana$, u, 1)
	v = 0
	IF INSTR(an$, k$) > 0 THEN 
		'löytyi vokaali
		v = 1: vok = 1
	ENDIF

	IF FLAG = 0 THEN
		T$ = "-"  
		IF v = 1 THEN T$ = ""
		IF (T$ = "-") AND (vok = 0) THEN T$ = ""
		IF T$ = "-" THEN FLAG = 1: vok = 0
	ELSE
		FLAG = 0
	END IF

	IF u = 1 THEN T$ = ""
	ANA$ = T$ + k$ + ANA$
	T$ = ""

NEXT
sana$ = ANA$
END SUB

PTMUSTA at UTU.FI