我有两个要比较的文件,一个文件中的单词被拆分成另一个文件的多个段。我需要找到一种方法来使用原始单词/短语映射片段。
在给定的文件中,我使用中文单词的时间启动和时间结束,并比较此时间戳下的电话组,并打印中文单词的值。
我使用的文件是:
参考文件: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 :(得分: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