Module:IPA-nl
Doel
bewerkenDeze module controleert op veelgemaakte fouten bij het invoeren van de gestandaardiseerde weergave van de uitspraak van Nederlandse woorden en gebruikt deze weergave om het aantal lettergrepen te tellen.
Parameters
bewerkenEr is één parameter: de IPA-weergave, gestandaardiseerd volgens de afspraken op de pagina Standaardweergave uitspraak Nederlands.
Gebruik
bewerkenDe module is alleen bedoeld om de functionaliteit van het sjabloon {{IPA-nl-standaard}} uit te breiden; het is niet bedoeld om los daarvan te worden gebruikt. Dit sjabloon roept het hulpsjabloon {{IPA-nl-standaard-ltrgrp}} aan en geeft deze één parameter mee: het resultaat van de funnctie main in deze module als die op zijn beurt de fonemische weergave van het woord als parameter heeft meegekregen. Dit hulpsjabloon krijgt op die manier één keer een getal mee en kan dit zowel voor de tekst op het lemma als de toe te voegen categorieën gebruiken.
Werking
bewerkenIn de fonemische weergave worden eerst de diftongen die met twee klinkertekens worden weergegeven teruggebracht tot één klinkerteken. Ook worden de <sup>-tags verwijderd. Hierna wordt eenvoudig geteld hoeveel klinkertekens er in de tekst staan. In een Nederlandse lettergreep zit altijd precies één uitgesproken klinker of diftong, daardoor komt het aantal klinkertekens nu overeen met het aantal lettergrepen.
De functie main geeft alleen het aantal tekens als een string. Om de werking van deze functie te kunnen nagaan is er ook een functie test die laat zien hoe de aangepaste tekst er voor het tellen uit ziet.
local p = {}
-- nog te doen: afvangen rechte haakjes
function p.main(frame)
lgr = 0
insjwa = 0
tekst = ""
local ipa = frame.args[1]
ipa = mw.ustring.gsub(ipa, "ɛi", "ɛ")
ipa = mw.ustring.gsub(ipa, "ɑu", "ɑ")
ipa = mw.ustring.gsub(ipa, "œy", "œ")
ipa, insjwa = mw.ustring.gsub(ipa, "<sup>ə</sup>", "")
_, lgr = mw.ustring.gsub(ipa, "[aɑeɛəiɪoɔyʏuøœ]", "")
if insjwa > 0 then
insjwa = lgr + insjwa
tekst = lgr .. " of " .. insjwa
else
tekst = tostring(lgr)
end
return tekst
end
function p.ongeldig(frame)
local ipa = frame.args[1]
ipa = mw.ustring.gsub(ipa, "<sup>ə</sup>", "")
ipa = mw.ustring.gsub(ipa, "%([əeɡkntu]%)", "")
ipa = mw.ustring.gsub(ipa, "[ɑɛiɔʏyuœ]ː", "")
ipa = mw.ustring.gsub(ipa, "œy", "") -- omdat œ alleen niet correct is
ipa = mw.ustring.gsub(ipa, "[ɑ̃ɛ̃ɔ̃]", "") -- apart gehouden voor ontluizen
ipa = mw.ustring.gsub(ipa, "[aɑeɛəiɪoɔyʏuøˈ ˌpbfvtdszxɣkɡmnŋlrjhwʃʒcɲɱʔ]", "")
return ipa
end
function p.fout(frame)
local melding = ""
local ipa = p.ongeldig(frame)
if ipa ~= "" then melding = "[[Categorie:WikiWoordenboek:IPA-nl-fout/ongeldig teken]]" end
return melding
end
function p.klem(frame)
local ipa = frame.args[1]
ipa = mw.ustring.gsub(ipa, "ɛi", "ɛ")
ipa = mw.ustring.gsub(ipa, "ɑu", "ɑ")
ipa = mw.ustring.gsub(ipa, "œy", "œ")
ipa = mw.ustring.gsub(ipa, "<sup>ə</sup>", "ə")
ipa = mw.ustring.gsub(ipa, "[%(%)]", "")
local lettergrepen = 0
local klemtoon = 0
local beginklemtoon = 0
local melding = ""
for teken in mw.ustring.gmatch( ipa, "." ) do
if mw.ustring.find( " ˈˌ", teken) then
if lettergrepen == 0 then
if klemtoon ~= 0 then melding = melding .. "[klemtoonteken zonder lettergreep]]" end
elseif lettergrepen == 1 then
if klemtoon ~= 0 and teken ~= " " then melding = melding .. "[klemtoontekens te dicht opeen]]" end
elseif lettergrepen > 4 then
melding = melding .. "[veel lettergrepen zonder klemtoon]]"
end
if teken == "ˌ" then
beginklemtoon = 1
if klemtoon == 0 then klemtoon = 1 end
end
if teken == "ˈ" then
if beginklemtoon == 0 and lettergrepen == 0 then beginklemtoon = 2 end
if klemtoon == 2 then melding = melding .. "[te veel hoofdklemtonen]]"
else klemtoon = 2 end
end
if teken == " " then
beginklemtoon = 1
if klemtoon ~= 2 then melding = melding .. "[hoofdklemtoon ontbreekt]]" end
klemtoon = 0
end
lettergrepen = 0
elseif mw.ustring.find( "aɑeɛəiɪoɔyʏuøœ", teken) then
lettergrepen = lettergrepen + 1
end
end
if klemtoon ~= 2 and lettergrepen ~= 1 then melding = melding .. "[hoofdklemtoon ontbreekt]]" end
if beginklemtoon == 2 and lettergrepen == 1 then melding = melding .. "[klemtoon eenlettergrepig woord]]" end
if lettergrepen > 4 then melding = melding .. "[veel lettergrepen zonder klemtoon]]" end
if lettergrepen == 0 and klemtoon > 0 then melding = melding .. "[klemtoonteken zonder lettergreep]]" end
melding = mw.ustring.gsub(melding, "%[", "[[Categorie:WikiWoordenboek:IPA-nl-fout/")
return melding
end
function p.test(frame)
local ipa = frame.args[1]
ipa = mw.ustring.gsub(ipa, "ɛi", "ɛ")
ipa = mw.ustring.gsub(ipa, "ɑu", "ɑ")
ipa = mw.ustring.gsub(ipa, "œy", "œ")
ipa = mw.ustring.gsub(ipa, "</?sup>", "")
return ipa
end
return p