2017-04-19 180 views
1

我有兩個文件進行比較,一個文件中的單詞被分割成另一個文件的多個段。我需要找到一種方法來映射與原始單詞/短語段。兩個文件之間的兩個時間戳之間的數據組合

在給定的文件中,我使用中文單詞的時間開始和時間結束,並比較了在此時間戳下打印併爲中文單詞打印這些值的電話。

我使用的文件是:
參考文件:https://ufile.io/7lze7
段的文件:https://ufile.io/rysz4

到目前爲止我曾嘗試的代碼:

outfile=open("lexlog",'w') 

    phoneme=[] 
    with open("ref.txt"+file,'r') as sylfile: 
     for lines in sylfile: 
      start,end,syl=lines.split() 
      #print "from syl "+start,end 
      with open("hyp.txt", 'r') as phnfile: 
       for line in phnfile: 
        startphn, endphn, sylphn = line.split() 
        if (startphn>=start) and (endphn<=end) and (startphn<endphn): 
         phoneme.append(sylphn) 
         print `enter code here`sylphn 
         outfile.write(startphn+" "+start+" "+endphn+" "+end) 
       print file,syl,' '.join(phoneme) 
       outfile.write(file+" "+syl+" "+' '.join(phoneme)+"\n") 
       phoneme=[] 

我期望的結果是在形式:

ref.txt !SIL SIL 
ref.txt 非 F EI 
ref.txt 生 SH AH NG 
ref.txt 物 U 
ref.txt 物 U 
ref.txt 體 T I 
ref.txt 也 I E 
ref.txt 會 H U EI 
ref.txt 有 I OU 
ref.txt 一 I 
ref.txt 種 ZH O NG 
ref.txt 被 B EI 
ref.txt 稱 CH AH NG 
ref.txt 作 Z U O 
ref.txt 自 Z IH 
ref.txt 殺 SH A 
ref.txt 的 D AH 
ref.txt 設 SH AH 
ref.txt 計 J I 
ref.txt !SIL SIL 
ref.txt 例 L I 
ref.txt 如 R U 
ref.txt !SIL SIL 
ref.txt 人 R AH N 
ref.txt 工 G O NG 
ref.txt 智 ZH IH 
ref.txt 慧 H U EI 
ref.txt !SIL SIL 
ref.txt 在 Z AI 
ref.txt 被 B EI 
ref.txt 電 D I E N 
ref.txt 腦 N AU 
ref.txt 病 B I NG 
ref.txt 毒 D U 
ref.txt 入 R U 
ref.txt 侵 Q I N 
ref.txt 的 D AH 
ref.txt 情 Q I NG 
ref.txt 況 K U A NG 
ref.txt 下 X I A 
ref.txt !SIL SIL 
ref.txt 會 H U EI 
ref.txt 啟 Q I 
ref.txt 動 D O NG 
ref.txt 殺 SH A 
ref.txt 毒 D U 
ref.txt 程 CH AH NG 
ref.txt 系 X I 
ref.txt !SIL SIL 
ref.txt 同 T O NG 
ref.txt 時 SH IH 
ref.txt 刪 SH A N 
ref.txt 除 CH U 
ref.txt 自 Z IH 
ref.txt 己 J I 
ref.txt 體 T I 
ref.txt 內 N EI 
ref.txt 的 D AH 
ref.txt 檔 D A NG 
ref.txt 案 A N 
ref.txt !SIL SIL 

但輸出是:

ref.txt !SIL SIL 
ref.txt 非 F EI 
ref.txt 生 SH AH NG 
ref.txt 物 U 
ref.txt 物 U 
ref.txt 體 T I 
ref.txt 也 I E 
ref.txt 會 H U EI 
ref.txt 有 I OU A D U CH AH NG X I SIL T O NG SH IH SH A N CH U Z IH J I T I N EI D AH D A NG A N SIL 
ref.txt 一 I 
ref.txt 種 ZH O NG 
ref.txt 被 B EI 
ref.txt 稱 CH AH NG 
ref.txt 作 Z U O 
ref.txt 自 Z IH 
ref.txt 殺 SH A 
ref.txt 的 D AH 
ref.txt 設 SH AH 
ref.txt 計 J I 
ref.txt !SIL SIL 
ref.txt 例 L I 
ref.txt 如 R U 
ref.txt !SIL SIL 
ref.txt 人 R AH N 
ref.txt 工 G O NG 
ref.txt 智 ZH IH 
ref.txt 慧 H U EI 
ref.txt !SIL SIL 
ref.txt 在 Z AI 
ref.txt 被 B EI 
ref.txt 電 D I E N 
ref.txt 腦 N AU 
ref.txt 病 B I NG 
ref.txt 毒 D U 
ref.txt 入 R U 
ref.txt 侵 Q I N 
ref.txt 的 D AH 
ref.txt 情 Q I NG 
ref.txt 況 K U A NG 
ref.txt 下 X I A 
ref.txt !SIL SIL 
ref.txt 會 H U EI 
ref.txt 啟 Q I 
ref.txt 動 D O NG 
ref.txt 殺 
ref.txt 毒 D U 
ref.txt 程 CH AH NG 
ref.txt 系 X I 
ref.txt !SIL SIL 
ref.txt 同 T O NG 
ref.txt 時 SH IH 
ref.txt 刪 SH A N 
ref.txt 除 CH U 
ref.txt 自 Z IH 
ref.txt 己 J I 
ref.txt 體 T I 
ref.txt 內 N EI 
ref.txt 的 D AH 
ref.txt 檔 D A NG 
ref.txt 案 A N 
ref.txt !SIL SIL 

不知何故,輸出中的第八行獲得了與我預期不同的結果。任何幫助表示讚賞。

+0

部分是你比較字符串。你的前兩列需要轉換爲浮點數。例如'row = line.split()'和'startphn,endphn,sylphn = float(row [0]),float(row [1]),row [2]' –

回答

0

理解所需的輸出有點困難,但您似乎也試圖輸出時間值。

您正在以字符串形式讀取每個文件中的數據。每行的前兩列需要轉換爲浮點數,否則您的比較將在字符串值上進行,而不是數值。在這裏,我將前兩個值轉換爲浮點數。

import csv 
file = '' 

with open("lexlog.txt", 'wb') as outfile: 
    csv_log = csv.writer(outfile, delimiter=' ') 
    phoneme = [] 

    with open("ref.txt" + file, 'r') as sylfile: 
     for lines in sylfile: 
      row_sylfile = lines.split() 
      start, end, syl = float(row_sylfile[0]), float(row_sylfile[1]), row_sylfile[2] 

      with open("hyp.txt", 'r') as phnfile: 
       data = [] 
       for line in phnfile: 
        row_phnfile = line.split() 
        startphn, endphn, sylphn = float(row_phnfile[0]), float(row_phnfile[1]), row_phnfile[2] 

        if (startphn >= start) and (endphn <= end) and (startphn < endphn): 
         phoneme.append(sylphn) 
         #print sylphn 
         data.extend([startphn, start, endphn, end]) 

       #print file,syl,' '.join(phoneme) 
       csv_log.writerow(data + [file, syl] + phoneme) 
       phoneme = [] 

我會建議使用csv庫來建立你的行。然後可以自動在每個條目之間添加空格。所有你需要做的就是給它一個值列表(字符串或浮點數)。

這會給你一個文件開始:你的問題

0.0 0.0 0.33 0.33 !SIL SIL 
0.33 0.33 0.46 0.67 0.46 0.33 0.67 0.67 非 F EI 
0.67 0.67 0.79 0.95 0.79 0.67 0.87 0.95 0.87 0.67 0.95 0.95 生 SH AH NG 
0.95 0.95 1.11 1.11 物 U 
1.11 1.11 1.24 1.24 物 U 
1.24 1.24 1.37 1.62 1.37 1.24 1.62 1.62 體 T I 
1.62 1.62 1.68 1.74 1.68 1.62 1.74 1.74 也 I E 
1.74 1.74 1.81 1.9 1.81 1.74 1.87 1.9 1.87 1.74 1.9 1.9 會 H U EI 
1.9 1.9 1.94 2.06 1.94 1.9 2.06 2.06 有 I OU 
2.06 2.06 2.18 2.18 一 I 
2.18 2.18 2.27 2.46 2.27 2.18 2.4 2.46 2.4 2.18 2.46 2.46 種 ZH O NG 
+0

感謝您的幫助,也讓我知道我的錯誤格式化問題。 –

+0

不客氣!不要忘記點擊向上/向下箭頭下的灰色刻度標記來接受答案作爲接受的解決方案。 –

相關問題