我有一个包含这样行的文本文件(见下文),其中一个英语句子后跟一个西班牙语句子,等效翻译表由“ {##}
”分隔。(如果你知道它是 的输出giza-pp
)
你要求在接下来的几天里,在这个部分会议期间就这个主题进行辩论。{##} sus señorías han solicitado un 辩论 sobre el tema para los próximos días , en el curso de este período de sesiones 。{##} 0-0 0-1 1-2 2-3 3-4 4-5 5-6 6-7 7-8 8-9 12-10 13-11 14-11 15-12 16-13 17 -14 9-15 10-16 11-17 18-18 17-19 19-21 20-22
翻译表是这样理解的,0-0 0-1
意思是英语中的第0个单词(ie you
)匹配西班牙语中的第0个和第1个单词(ie sus señorías
)
假设我想course
从句子中知道西班牙语的翻译是什么,通常我会这样做:
from collections import defaultdict
eng, spa, trans = x.split(" {##} ")
tt = defaultdict(set)
for s,t in [i.split("-") for i in trans.split(" ")]:
tt[s].add(t)
query = 'course'
for i in spa.split(" ")[tt[eng.index(query)]]:
print i
有没有一种简单的方法来完成上述操作?可以regex
吗?line.find()
?
经过一些尝试后,我必须这样做以涵盖许多其他问题,例如 MWE 和缺少翻译:
def getTranslation(gizaline,query):
src, trg, trans = gizaline.split(" {##} ")
tt = defaultdict(set)
for s,t in [i.split("-") for i in trans.split(" ")]:
tt[int(s)].add(int(t))
try:
query_translated =[trg.split(" ")[i] for i in tt[src.split(" ").index(query)]]
except ValueError:
for i in src.split(" "):
if "-"+query or query+"-" in i:
query = i
break
query_translated =[trg.split(" ")[i] for i in tt[src.split(" ").index(query)]]
if len(query_translated) > 0:
return ":".join(query_translated)
else:
return "#NULL"