ELAN-Сегментации

Материал из Wiki FU-Lab
Перейти к навигации Перейти к поиску

Новые перспективы до сегментации

Сейчас мы большесвто материала сегментироваем руком, и я вижу что часто у нашим файлов есть так многи говорющи что автоматические методы не работают так хорошо. В этого блог люди недавно говорили об один метода с программа 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")

Elan automatic segments.png

Конечно тоже после этого есть очень много работа, сегментации все в одну слой, много надо изменить, а можем быть это помогит, посмотрим.