我有两个要比较的文件,一个文件中的单词被分成另一个文件的多个片段。我需要找到一种方法来将片段映射到原始单词/短语。
在给定的文件中,我使用了中文单词的时间开始和时间结束,并比较了该时间戳下的音素集,并打印出了中文单词的这些值。
我使用的文件是:
到目前为止,我尝试过的代码如下:
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不知何故,输出中的第八行得到了与我预期不同的结果。任何帮助都是非常感谢的。
发布于 2017-04-19 17:20:00
要理解所需的输出有点困难,但您似乎也在尝试输出时间值。
您将从中的每个文件中以字符串的形式读取数据。每行的前两列需要转换为浮点型,否则将对字符串值进行比较,而不是对数值进行比较。在这里,我将前两个值转换为浮点数。
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 NGhttps://stackoverflow.com/questions/43490757
复制相似问题