Module:IPA-nl

Uit WikiWoordenboek

Doel[bewerken]

Deze 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[bewerken]

Er is één parameter: de IPA-weergave, gestandaardiseerd volgens de afspraken op de pagina Standaardweergave uitspraak Nederlands.

Gebruik[bewerken]

De 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[bewerken]

In 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