合并来自两个文件的两个时间戳之间的数据

时间:2017-04-19 08:46:32

标签: python file sorting text compare

我有两个要比较的文件,一个文件中的单词被拆分成另一个文件的多个段。我需要找到一种方法来使用原始单词/短语映射片段。

在给定的文件中,我使用中文单词的时间启动和时间结束,并比较此时间戳下的电话组,并打印中文单词的值。

我使用的文件是:
参考文件: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

不知何故,输出中的第八行得到的结果与我的预期不同。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分: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