ELAN-Сегментации
Новые перспективы до сегментации
Сейчас мы большесвто материала сегментироваем руком, и я вижу что часто у нашим файлов есть так многи говорющи что автоматические методы не работают так хорошо. В этого блог люди недавно говорили об один метода с программа Praat. Я тоже ему пробывал сегодня, да в принципе он дал ресултатов который не плохие.
https://blogs.soas.ac.uk/elar/2017/06/15/elanpraat-machine-segmenting/
А как я вижу, часть работы после импортизавия до ЭЛАН есть немного трудный, и есть очень лёгки сделать ошыбки в этого степена. Мы ранше говорили об это Pympi библиотека для Python, и я пробывал с ему импортировать Praat TextGrid файля в маниере более автоматические.
import pympi
# We have to define somehow who is the principal speaker and who are the others
# Надо как нибыд сохранить информация об это кто принципальный говорющи, для этого что все сегменты будут в одну слою
main_speaker = ['ZPF-F-1926']
other_speakers = ['NTP-M-1986', 'MSF-F-1968']
# Here we give the Praat file
# Здесь надо дать Praat файль
praat_file = pympi.TextGrid(file_path="kpv_izva20160622-04-b16.TextGrid")
segment_file = praat_file.to_eaf()
elan_file = pympi.Elan.Eaf(file_path=None, author='Niko Partanen')
# Here we add types and other nonrecursive stuff
# Здесь у нас типы и другие который только раз надо
elan_file.add_linguistic_type(lingtype='refT', timealignable=True, graphicreferences=False)
elan_file.add_linguistic_type(lingtype='orthT', timealignable=False, graphicreferences=False, constraints='Symbolic_Association')
elan_file.add_linguistic_type(lingtype='wordT', timealignable=False, graphicreferences=False, constraints='Symbolic_Subdivision')
elan_file.add_linguistic_type(lingtype='posT', timealignable=False, graphicreferences=False, constraints='Symbolic_Subdivision')
elan_file.add_linguistic_type(lingtype='lemmaT', timealignable=False, graphicreferences=False, constraints='Symbolic_Subdivision')
elan_file.add_linguistic_type(lingtype='morphT', timealignable=False, graphicreferences=False, constraints='Symbolic_Subdivision')
elan_file.add_language(lang_def='http://cdb.iso.org/lg/CDB-00131321-001', lang_id='kpv', lang_label='Komi-Zyrian (kpv)')
# This is a function for adding speakers
# С этом метхода можем каждый говорющии сохранить
def add_speaker(elan_file, participant):
elan_file.add_tier(tier_id='ref@' + participant, ling='refT')
elan_file.add_tier(tier_id='orth@' + participant, ling='orthT', parent='ref@' + participant)
elan_file.add_tier(tier_id='word@' + participant, ling='wordT', parent='orth@' + participant, language='kpv')
for participant in main_speaker + other_speakers:
add_speaker(elan_file, participant)
# We copy here the content of tier "silences" and merge that with the wanted upper level tier
# Здесь копируемся материаль из этого новая слоя и сливаемся эту с который нам надо
segment_file.copy_tier(elan_file, 'silences')
elan_file.merge_tiers(tiers=['silences', 'ref@' + ''.join(main_speaker)], tiernew = 'ref@' + ''.join(main_speaker))
# These tiers are not needed
# Эти слой нам не надо, удалимся
elan_file.remove_tiers(['default', 'silences'])
# Media file
# Медиа файль
elan_file.add_linked_file('kpv_izva20160622-04.wav')
# Here we write the file
# Сохранямся файль
elan_file.to_file(file_path="kpv_izva20160622-04.eaf")
Конечно тоже после этого есть очень много работа, сегментации все в одну слой, много надо изменить, а можем быть это помогит, посмотрим.
