Commit 494cbd3a authored by Pärtel Lippus's avatar Pärtel Lippus

Lisa: intonatsioonifraasid ja klassifitseeritud lisamärgid

parent 13ceddb2
......@@ -19,6 +19,7 @@ Skriptid on jagatud kahte jaotusesse: Kontrollskriptid kontrollivad Praati objek
Plugin ühildub kõigi OP-süsteemidega, millega Praatgi (vt http://www.praat.org). Plugina skriptid kasutavad uuemat Praati süntaksit ja et see töötaks, kasuta Praati versiooni 5.4 (või veel uuemat).
VERSIOONID
v.1.0.2 - 26.06.2015
Parandatud näpukas, täiendatud valemärkide nimekirja.
......
#######################################################
# _____ _ __ ___ _ __ _____ _ __ #
# | ___| | |/ / / __| | |/ / | ___| | |/ / #
# | |___ | / | /_ | / | |___ | / #
# | ___| | < \_ \ | < | ___| | < #
# | |___ | \ __| | | \ | | | \ #
# |_____| |_|\_\ |___/ |_|\_\ |_| |_|\_\ #
# TÜ eesti keele spontaanse kıne foneetiline korpus #
################INTONATSIOONIFRAASIDE MÄRGENDAMINE#######################
# märgib uuele kihile intonatsioonifraaside piirid
# 1) IP piiriks on paus > 40 ms
# 2) venitus
# 3) üneemid IP lõppu
#
# Pärtel Lippus, 14.02.2008
# Täiendatud 3.06.2015
# IF osa lisatud 29.09.2015
##############################################################
form Intonatsioonifraaside märgendamine
comment IP piiriks on paus ja venitus, üneemid IP järel jäävad IP sisse.
sentence fail SKK001-001_M
positive Pausi_lavi_(sek) 0.04 (= lühem paus ei ole IF piiriks)
endform
clearinfo
kontrolliTegevus = 0
# Loeme seadete kataloogist võimalikud SAMPA sümbolid
seaded$ = preferencesDirectory$ + "/plugin_PhonCorpTools/seaded/"
vokaalid$ = readFile$: seaded$ + "SAMPA_vokaalid.txt"
konsonandid$ = readFile$: seaded$ + "SAMPA_konsonandid.txt"
# klassifitseeritud lisamärgid sisaldab tääge <üneemid><tagasiside><muu><mittedeskriptiivne>
lsd$ = readFile$: seaded$ + "klassifitseeritud_lisamargid.txt"
# võtame lisamärkide klassifikatsiooni tükkideks
lisa_yneem$ = mid$(lsd$, index(lsd$, "<üneemid>"), index(lsd$, "</üneemid>")-index(lsd$, "<üneemid>"))
lisa_tagasi$ = mid$(lsd$, index(lsd$, "<tagasiside>"), index(lsd$, "</tagasiside>")-index(lsd$, "<tagasiside>"))
lisa_muu$ = mid$(lsd$, index(lsd$, "<muu>"), index(lsd$, "</muu>")-index(lsd$, "<muu>"))
lisa_desk$ = mid$(lsd$, index(lsd$, "<mittedeskriptiivne>"), index(lsd$, "</mittedeskriptiivne>")-index(lsd$, "<mittedeskriptiivne>"))
lisa_lexFB$ = mid$(lsd$, index(lsd$, "<lextagasiside>"), index(lsd$, "</lextagasiside>")-index(lsd$, "<lextagasiside>"))
# kontrollime, kas on vajalikud märgenduskihid
selectObject: "TextGrid "+ fail$
kihte = Get number of tiers
sonaKiht = 0
ipKiht = 0
hKiht = 0
for k to kihte
k$ = Get tier name: k
if k$ = "sõnad"
sonaKiht = k
elsif k$ = "IP-piirid"
ipKiht = k
elsif k$ = "häälikud"
hKiht = k
endif
endfor
if sonaKiht = 0
exitScript: "Sõnakihti ei leitud!"
elsif hKiht = 0
exitScript: "Pausipikkuse arvestamiseks peab olema ka häälikutasandil märgendatud!"
endif
# kontrollime, kas lausungikiht on juba olemas ja kui on, siis küsime, kas kirjutada üle või mitte
if ipKiht > 0
beginPause: "Lausungid on juba märgendatud kihile " + string$(ipKiht) + ". Jätkates kirjutatakse üle!"
kontrolliTegevus = endPause: "Katkesta", "Edasi", 2,1
if kontrolliTegevus = 1
goto END
endif
Remove tier: ipKiht
else
ipKiht = kihte + 1
endif
# Editoriaknad kinni ja hakkab lausungikihi loomine!
@suleEditor
#teeb uue lausungitasandi kihi
Insert interval tier: ipKiht, "IP-piirid"
### Tuvastame IPd
selectObject: "TextGrid " + fail$
sonu = Get number of intervals: sonaKiht
eels$ = "#"
s = 1
repeat
sona$ = Get label of interval: sonaKiht, s
#kui sõnal on mingi lisamärk, viskame selle välja
sona$ = if index(sona$, "/") > 0 then left$(sona$, index(sona$, "/")-1) else sona$ fi
# kui pole lex sõna,
if left$(sona$, 1) = "."
# üneem
if index(lisa_yneem$, """" + sona$ + """") > 0
sona$ = "#YN"
# fiidbäkk
elsif index(lisa_tagasi$, """" + sona$ + """") > 0
sona$ = "#FB"
else
# muu
sona$ = "#"
endif
endif
# järgmine sõna:
if s < sonu
jargs = s+1
jargs$ = Get label of interval: sonaKiht, jargs
# kui järgmine sõna on on paus, kontrollime, et oleks pikem kui pausilävi
if jargs$ = "#" or left$(jargs$, 1) = "."
s_alg = Get start point: sonaKiht, jargs
h_int = Get interval at time: hKiht, s_alg
h_alg = Get start point: hKiht, h_int
h_lop = Get end point: hKiht, h_int
# kui jääb alla pausi läve, otsime järgmise sõna peale pausi
if h_lop - h_alg < pausi_lavi
jargs = Get interval at time: sonaKiht, h_lop
jargs$ = Get label of interval: sonaKiht, jargs
endif
endif
#kui järgmisel sõnal on mingi lisamärk, viskame selle välja
jargs$ = if index(jargs$, "/") > 0 then left$(jargs$, index(jargs$, "/")-1) else jargs$ fi
# kui pole lex sõna,
if left$(jargs$, 1) = "."
# üneem
if index(lisa_yneem$, """" + jargs$ + """") > 0
jargs$ = "#YN"
# fiidbäkk
elsif index(lisa_tagasi$, """" + jargs$ + """") > 0
jargs$ = "#FB"
else
# muu
jargs$ = "#"
endif
endif
# kui on viimane sõna, siis järgmiseks #
else
jargs$ = "#"
endif
# kui see on sõna ja järgmine ka,
if left$(sona$,1) <> "#" and left$(jargs$,1) <> "#"
# otsime, ega ei ole venitust, ja kui on siis paneme piiri
s_alg = Get starting point: sonaKiht, s
s_lop = Get end point: sonaKiht, s
h_int_alg = Get high interval at time: hKiht, s_alg
h_int_lop = Get low interval at time: hKiht, s_lop
haaldus$ = ""
h_xy = if h_int_lop - h_int_alg >2 then h_int_alg+1 else h_int_alg fi ; kui on pikem sõna, ignoreerime venitust sõna esimeses häälikus
for hx from h_xy to h_int_lop
hx$ = Get label of interval: hKiht, hx
haaldus$ = haaldus$ + hx$
endfor
if index (haaldus$, "::") > 0
# kui see ei ole nagunii väga pausi lähedal (nt venitus + kaks venitamata häälikut, nii 200 ms)
mis_on200_ms = Get interval at time: hKiht, s_lop + 0.2
mis_on200_ms$ = Get label of interval: hKiht, mis_on200_ms
if not mis_on200_ms$ = ""
nocheck Insert boundary: ipKiht, s_lop
#leibel: ip
ip_int = Get low interval at time: ipKiht, s_lop
Set interval text: ipKiht, ip_int, "ip"
endif
endif
# kui on sõna ja järgmine #, lisame tg-le piiri
elsif left$(sona$,1) <> "#" and left$(jargs$,1) = "#"
# kui jargmine on #YN, siis piir selle järele, muidu sõna lõppu
if jargs$ = "#YN"
s_lop = Get end point: sonaKiht, jargs
jargs += 1
else
s_lop = Get end point: sonaKiht, s
endif
nocheck Insert boundary: ipKiht, s_lop
#leibel: ip
ip_int = Get low interval at time: ipKiht, s_lop
Set interval text: ipKiht, ip_int, "ip"
# kui on paus ja järgmine on sõna: PAUS | JUTT
elsif left$(sona$,1) = "#" and left$(jargs$,1) <> "#"
s_lop = Get end point: sonaKiht, s
nocheck Insert boundary: ipKiht, s_lop
#leibel: #
ip_int = Get low interval at time: ipKiht, s_lop
Set interval text: ipKiht, ip_int, "#"
# kui on kaks pausi järjest,
elsif left$(sona$,1) = "#" and left$(jargs$,1) = "#"
# kui on FB või YN, siis paneme piiri
if sona$ <> jargs$
#piir
s_lop = Get end point: sonaKiht, s
nocheck Insert boundary: ipKiht, s_lop
#leibel
ip_int = Get low interval at time: ipKiht, s_lop
if sona$ = "#"
Set interval text: ipKiht, ip_int, "#"
elsif sona$ = "#YN"
Set interval text: ipKiht, ip_int, "he"
elsif sona$ = "#FB"
Set interval text: ipKiht, ip_int, "ts"
endif
endif
endif
s = jargs
until s = sonu
endif
###### KEERUKA OSA LÕPP
## käime läbi ühesõnalised ip-d ja kui on lexFB, märgime ts-ks
ipd = Get number of intervals: ipKiht
for ip to ipd
ip$ = Get label of interval: ipKiht, ip
if ip$ = "ip"
start = Get start point: ipKiht, ip
stop = Get end point: ipKiht, ip
s_alg = Get high interval at time: sonaKiht, start
s_lop = Get low interval at time: sonaKiht, stop
if s_lop - s_alg = 0
sona$ = Get label of interval: sonaKiht, s_alg
sona$ = if index(sona$, "/") > 0 then left$(sona$, index(sona$, "/")-1) else sona$ fi
if index(lisa_lexFB$, """" + sona$ + """") > 0
Set interval text: ipKiht, ip, "ts"
endif
endif
endif
endfor
## tagasiside lõpp
label END
if kontrolliTegevus = 1
appendInfoLine: fail$ + " Midagi uut ei tehtud, intonatsioonifraasid juba olemas kihil " + string$(ipKiht)
elsif kontrolliTegevus <> 1
appendInfoLine: fail$ + " lisati intonatsioonifraaside kiht " + string$(ipKiht) + ", pausi lävi: " + string$(pausi_lavi) + " sek" + newline$ + "---kontrolli üle---"
endif
# protseduur, mis paneb avatud Editori aknad kinni, et skript graafika tõttu aeglaseks ei jääks
procedure suleEditor
repeat
nocheck editor: "TextGrid " + fail$
info$ = nocheck Editor info
return = if info$ = "" then 0 else 1 fi
if return
Close
endif
nocheck endeditor
until return = 0
endproc
#skripti lõpp
\ No newline at end of file
This diff is collapsed.
......@@ -141,7 +141,7 @@
[701] ".qöä" ".qöö" ".qü" ".ree" ".rqee"
[706] ".rr" ".s" ".s-" ".se" ".sea"
[711] ".see" ".seje" ".seq" ".sh" ".siq"
[716] ".sise" ".sisse" ".smõ" ".snt" ".snõ"
[716] ".sisse" ".smõ" ".snt" ".snõ"
[721] ".sq" ".sqõ" ".ss" ".sss"
[726] ".ssssõh" ".sst" ".ssõ" ".st" ".sts"
[731] ".sõ" ".sõe" ".sõee" ".sõõ" ".sõõs"
......@@ -220,8 +220,8 @@
[37] ".norra" ".näideldud" ".ohates"
[40] ".peenikese_häälega" ".prantsuse" ".pressitud"
[43] ".rootsi" ".rögin" ".saksa"
[46] ".setu" ".släng"
[46] ".setu"
[49] ".soome" ".sosin" ".sosistades"
[52] ".takerdumine" ".vaikne"
[55] ".vaikselt" ".vene" ".venitus"
[58] ".võru"
\ No newline at end of file
[58] ".võru" ".pealkiri"
\ No newline at end of file
......@@ -43,6 +43,7 @@ Add menu command: "Objects", "Praat", "Korpuse haldus", "Technical", 0, ""
Add menu command: "Objects", "Praat", "Silbitamine...", "Lisa", 2, "lisa/SKK_silbitamine.praatscript"
Add menu command: "Objects", "Praat", "Taktistamine...", "Lisa", 2, "lisa/SKK_konetaktide_ettevalmistus.praatscript"
Add menu command: "Objects", "Praat", "Lausungid-pausid...", "Lisa", 2, "lisa/SKK_lausungid_IPUd.praatscript"
Add menu command: "Objects", "Praat", "Intonatsioonifraasid...", "Lisa", 2, "lisa/SKK_intonatsioonifraasid.praatscript"
# Kõnetuvastus
Add menu command: "Objects", "Praat", "--ASR--", "Lisa", 2, ""
Add menu command: "Objects", "Praat", "ASR-ist sõnad TextGridile...", "Lisa", 2, "lisa/SKK_ASR_sonad_textgridile.praatscript"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment