From 97486e55992c04542b30fce0d6dfb31ab692db1b Mon Sep 17 00:00:00 2001 From: yemaozi88 <428968@gmail.com> Date: Mon, 22 Apr 2019 02:03:50 +0200 Subject: [PATCH] dataset for experiments in check_novoapi is updated. --- .vs/acoustic_model/v15/.suo | Bin 89600 -> 89600 bytes acoustic_model/acoustic_model.pyproj | 2 +- acoustic_model/check_novoapi.py | 109 ++++++++++++++------------- acoustic_model/fame_functions.py | 3 - acoustic_model/novoapi_functions.py | 20 +++++ acoustic_model/stimmen_functions.py | 14 ++++ 6 files changed, 90 insertions(+), 58 deletions(-) diff --git a/.vs/acoustic_model/v15/.suo b/.vs/acoustic_model/v15/.suo index 76815aa7195203ac4d36571c539e36db2df85334..f3153d3027b605c7aa0c1418a1abc1225dea308a 100644 GIT binary patch delta 1091 zcmb7@TS!zv7{|{X&e_&gYu#MX&GfXbt>q%-Ewan57t#_zDK8a7AcBNhhFvU^RVcNG zT=y$iEP{q0Er@oHSd@@dFJTZ^4?&W>6hbdO6l9>=e{2`Zhrod!-^@4vIWymX=6EMm z?}YlWS&o+ucfGvz^Bt>_Bx#b`3x{MATgfmon{Fj^Ag8qflaU=>IK>p(H^ zQH{}Q6-qNk+dv*LfLa<*%BsYS3nLM2h`C@3a71z5cz)`fMy49f?XgDq=Ohx0T!V@hA0kZrY@y|UK`^oMOOGCYFh4#f}ALA4@d@4 zU&PK)UxY_dU&55GZj3KLMktmH8K_=MO)(zkrct%dZ*nDmW|Gto#J+yS1)zIOj~On1 zJ~mhRzaYVB&^6m9#%+qfw_G`ct?24h2DSCRp%?O2^)kNph1&ZnsI)Iz?ZK#r<}I7a zetVO0J|foJlB$^TEJhvC<=>NCy4F$8j5ElH=C|01Upx|WFr&^MxLL|}8BYv;jA8P$ zDoMkLqDax`W1EA#x=%M}eN*{}94dHka{fwiH?~jTzq#OiG(I)`?11>{A9*-@6#W}G znOTn0`&fF8T4`lkLaul>IPtz5 W{O5?3)Ed0>SG_AKc240>?)(O_??Olb delta 1035 zcmaKqUq}>D6vpRHv$MPYsnwKhb=`G${X^=qrf!*;vl?bupqLfmi)c_`+Jl&8=-5MB zFR6P#?WKnyB6^VADYDv1w1=QT0wEy~Uj(6-2o)7_`);fv5ncFk&i&@xJAB`a8aAk5 z!?RW~e&J!?Sa5BY)e3^3P`B8_7WEY|mo-&F@PIhb1{@#-7(pS3L{}R6R8SGsN>Q`H zZqN!cff>|*O`N%k%8!;&zo~{kOL1rRL&*c}z#4se0M!jlz#rA>QN5rJ#DZK<4ft() zP!qu>Wtv^KljzQai{Jv_6UC^5yr)ZsO0zGj9;R`_n|SrxOV2}3AxGH?hK0U1=$km*G25p>)-zk^%nf$g-; z^)37VvYw3jZR?n&979@4IYgcSKg<(22e@-;G@nl1GJXvL58MWlhU!vj&U`kBf1d#+ z2#X*H_+D3HCK!w8>#>E>_5gpdW8gV6K)~#JLbgl}hud@m*WLtl|5J|M;izS%PV8<) z6T`=^HMiNoPgn%+O;Ogez25TuSP=s(Iv*sblQm z@KNT|FW((yA>Uk#<@HQf)uW#+-@jzMKlOG=H&Q}=lGNJR)Ex9H#?>rASP}&)_m}Xa z3QhWbWXm_vW`bLHR?O#Ws;FK6>sqZ#3OTzN3sbi%p!JHOUI&xIdj%oDD80{0O5db* zTMnjIlfNjBI?`uo+FoF|gRtIFx4niwH$BZqr~m)} diff --git a/acoustic_model/acoustic_model.pyproj b/acoustic_model/acoustic_model.pyproj index 487d08f..260ce6a 100644 --- a/acoustic_model/acoustic_model.pyproj +++ b/acoustic_model/acoustic_model.pyproj @@ -4,7 +4,7 @@ 2.0 4d8c8573-32f0-4a62-9e62-3ce5cc680390 . - fame_hmm.py + check_novoapi.py . diff --git a/acoustic_model/check_novoapi.py b/acoustic_model/check_novoapi.py index 2a3ae59..1c3e34d 100644 --- a/acoustic_model/check_novoapi.py +++ b/acoustic_model/check_novoapi.py @@ -29,48 +29,47 @@ forced_alignment_novo70 = True ## ===== load novo phoneset ===== -phoneset_ipa, phoneset_novo70, translation_key_ipa2novo70, translation_key_novo702ipa = novoapi_functions.load_phonset() +phoneset_ipa, phoneset_novo70, translation_key_ipa2novo70, translation_key_novo702ipa = novoapi_functions.load_novo70_phoneset() ## ===== extract pronunciations written in novo70 only (not_in_novo70) ===== -# As per Nederlandse phoneset_aki.xlsx recieved from David -# [ɔː] oh / ohr -# [ɪː] ih / ihr -# [iː] iy -# [œː] uh -# [ɛː] eh -# [w] wv in IPA written as ʋ. -david_suggestion = ['ɔː', 'ɪː', 'iː', 'œː', 'ɛː', 'w'] + ## read pronunciation variants. -stimmen_transcription_ = pd.ExcelFile(default.stimmen_transcription_xlsx) -df = pd.read_excel(stimmen_transcription_, 'frequency') -transcription_ipa = list(df['IPA']) +#stimmen_transcription_ = pd.ExcelFile(default.stimmen_transcription_xlsx) +#df = pd.read_excel(stimmen_transcription_, 'frequency') +#transcription_ipa = list(df['IPA']) -# transcription mistake? -transcription_ipa = [ipa.replace(';', 'ː') for ipa in transcription_ipa if not ipa=='pypɪl' and not pd.isnull(ipa)] -transcription_ipa = [ipa.replace('ˑ', '') for ipa in transcription_ipa] # only one case. -not_in_novo70 = [] -all_in_novo70 = [] -for ipa in transcription_ipa: - ipa = ipa.replace(':', 'ː') - ipa = convert_phone_set.split_ipa(ipa) +stimmen_test_dir = r'c:\OneDrive\Research\rug\_data\stimmen_test' +df = stimmen_functions.load_transcriptions_novo70(stimmen_test_dir) - # list of phones not in novo70 phoneset. - not_in_novo70_ = [phone for phone in ipa - if not phone in phoneset_ipa and not phone in david_suggestion] - not_in_novo70_ = [phone.replace('sp', '') for phone in not_in_novo70_] - not_in_novo70_ = [phone.replace(':', '') for phone in not_in_novo70_] - not_in_novo70_ = [phone.replace('ː', '') for phone in not_in_novo70_] + - if len(not_in_novo70_) == 0: - all_in_novo70.append(''.join(ipa)) +## transcription mistake? +#transcription_ipa = [ipa.replace(';', 'ː') for ipa in transcription_ipa if not ipa=='pypɪl' and not pd.isnull(ipa)] +#transcription_ipa = [ipa.replace('ˑ', '') for ipa in transcription_ipa] # only one case. - #translation_key.get(phone, phone) - not_in_novo70.extend(not_in_novo70_) -not_in_novo70_list = list(set(not_in_novo70)) +#not_in_novo70 = [] +#all_in_novo70 = [] +#for ipa in transcription_ipa: +# ipa = ipa.replace(':', 'ː') +# ipa = convert_phone_set.split_ipa(ipa) + +# # list of phones not in novo70 phoneset. +# not_in_novo70_ = [phone for phone in ipa +# if not phone in phoneset_ipa and not phone in david_suggestion] +# not_in_novo70_ = [phone.replace('sp', '') for phone in not_in_novo70_] +# not_in_novo70_ = [phone.replace(':', '') for phone in not_in_novo70_] +# not_in_novo70_ = [phone.replace('ː', '') for phone in not_in_novo70_] + +# if len(not_in_novo70_) == 0: +# all_in_novo70.append(''.join(ipa)) + +# #translation_key.get(phone, phone) +# not_in_novo70.extend(not_in_novo70_) +#not_in_novo70_list = list(set(not_in_novo70)) ## check which phones used in stimmen but not in novo70 @@ -85,41 +84,43 @@ not_in_novo70_list = list(set(not_in_novo70)) # [ʊ] 'ʊ'(1) --> can be ʏ (uh)?? # [χ] --> can be x?? -def search_phone_ipa(x, phone_list): - x_in_item = [] - for ipa in phone_list: - ipa_original = ipa - ipa = ipa.replace(':', 'ː') - ipa = convert_phone_set.split_ipa(ipa) - if x in ipa and not x+':' in ipa: - x_in_item.append(ipa_original) - return x_in_item +#def search_phone_ipa(x, phone_list): +# x_in_item = [] +# for ipa in phone_list: +# ipa_original = ipa +# ipa = ipa.replace(':', 'ː') +# ipa = convert_phone_set.split_ipa(ipa) +# if x in ipa and not x+':' in ipa: +# x_in_item.append(ipa_original) +# return x_in_item #search_phone_ipa('ø', transcription_ipa) ## ===== load all transcriptions (df) ===== -df = stimmen_functions.load_transcriptions() +#df = stimmen_functions.load_transcriptions() word_list = [i for i in list(set(df['word'])) if not pd.isnull(i)] word_list = sorted(word_list) ## check frequency of each pronunciation variants -cols = ['word', 'ipa', 'frequency'] -df_samples = pd.DataFrame(index=[], columns=cols) -for ipa in all_in_novo70: - ipa = ipa.replace('ː', ':') - samples = df[df['ipa'] == ipa] - word = list(set(samples['word']))[0] - samples_Series = pd.Series([word, ipa, len(samples)], index=df_samples.columns) - df_samples = df_samples.append(samples_Series, ignore_index=True) +#cols = ['word', 'ipa', 'frequency'] +#df_samples = pd.DataFrame(index=[], columns=cols) +#for ipa in all_in_novo70: +# ipa = ipa.replace('ː', ':') +# samples = df[df['ipa'] == ipa] +# word = list(set(samples['word']))[0] +# samples_Series = pd.Series([word, ipa, len(samples)], index=df_samples.columns) +# df_samples = df_samples.append(samples_Series, ignore_index=True) # each word -df_per_word = pd.DataFrame(index=[], columns=df_samples.keys()) +#df_per_word = pd.DataFrame(index=[], columns=df_samples.keys()) -for word in word_list: - df_samples_ = df_samples[df_samples['word']==word] - df_samples_ = df_samples_[df_samples_['frequency']>2] - df_per_word = df_per_word.append(df_samples_, ignore_index=True) +#for word in word_list: +word = word_list[2] +df_ = df[df['word']==word] +np.unique(list(df_['ipa'])) + #df_samples_ = df_samples_[df_samples_['frequency']>2] + #df_per_word = df_per_word.append(df_samples_, ignore_index=True) #df_per_word.to_excel(os.path.join(default.stimmen_dir, 'pronunciation_variants_novo70.xlsx'), encoding="utf-8") diff --git a/acoustic_model/fame_functions.py b/acoustic_model/fame_functions.py index dbb8487..77fd931 100644 --- a/acoustic_model/fame_functions.py +++ b/acoustic_model/fame_functions.py @@ -352,9 +352,6 @@ def fix_lexicon(lexicon_file): return -#def add_sp_to_lexicon(lexicon_file): - - def word2htk(word): return ''.join([fame_asr.translation_key_word2htk.get(i, i) for i in word]) diff --git a/acoustic_model/novoapi_functions.py b/acoustic_model/novoapi_functions.py index 120413e..000eee4 100644 --- a/acoustic_model/novoapi_functions.py +++ b/acoustic_model/novoapi_functions.py @@ -174,6 +174,8 @@ def forced_alignment(wav_file, word, pronunciation_ipa): p.add_argument("--user", default='martijn.wieling') p.add_argument("--password", default='xxxxxx') + + args = p.parse_args() rec = session.Recognizer(grammar_version="1.0", lang="nl", snodeid=101, user=args.user, password=args.password, keepopen=True) # , modeldir=modeldir) @@ -194,6 +196,24 @@ def result2pronunciation(result, word): return pronunciation_ipa, pronunciation_novo70, llh +def phones_not_in_novo70(ipa): + """ extract phones which is not in novo70 phoneset. """ + + phoneset_ipa, _, _, _ = load_novo70_phoneset() + + # As per Nederlandse phoneset_aki.xlsx recieved from David + # [ɔː] oh / ohr + # [ɪː] ih / ihr + # [iː] iy + # [œː] uh + # [ɛː] eh + # [w] wv in IPA written as ʋ. + david_suggestion = ['ɔː', 'ɪː', 'iː', 'œː', 'ɛː', 'w'] + + return [phone for phone in split_ipa(ipa) + if not phone in phoneset_ipa and not phone in david_suggestion] + + if __name__ == 'main': pronunciation_ipa = ['rø:s', 'mɑn', 'mɑntsjə'] #grammar = make_grammar('reus', pronunciation_ipa) diff --git a/acoustic_model/stimmen_functions.py b/acoustic_model/stimmen_functions.py index cfdac62..ccbc6e7 100644 --- a/acoustic_model/stimmen_functions.py +++ b/acoustic_model/stimmen_functions.py @@ -7,6 +7,7 @@ import pandas as pd import convert_xsampa2ipa import defaultfiles as default import fame_functions +import novoapi_functions def _load_transcriptions(): @@ -67,6 +68,19 @@ def load_transcriptions_clean(clean_wav_dir): return df_clean +def load_transcriptions_novo70(clean_wav_dir): + """ extract rows of which ipa is written in novo70 phonset. """ + df = load_transcriptions_clean(clean_wav_dir) + + df_novo70 = pd.DataFrame(index=[], columns=list(df.keys())) + for index, row in df.iterrows(): + not_in_novo70 = novoapi_functions.phones_not_in_novo70(row['ipa']) + if len(not_in_novo70) == 0: + df_novo70 = df_novo70.append(row, ignore_index=True) + + return df_novo70 + + def add_row_htk(df): """ df['htk'] is made from df['ipa'] and added. """ htk = []