我有一個帶有這樣的行的文本文件(見下文),其中英文句子後面跟着西班牙語句子和由「{##}
」分隔的等效轉換表。 (如果你知道它的輸出giza-pp
)如何將匹配字符串提取到defaultdict(set)? Python
您所要求的這部分會議期間就這一問題進行的未來 幾天中進行辯論。 {##} susseñoríashan solicitado un debate sobre el tema para lospróximosdías,en el curso de este períodode 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字(即you
)0級和1字在西班牙文(即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"
看起來已經很簡單了。順便說一句,如果你使用set作爲defaultdict的工廠,你應該使用'add','append'用於列表。 – alecxe 2013-02-28 06:36:59
感謝您關於錯誤的提示。可能有人可能有一個更簡單的方法或至少更快的方式=) – alvas 2013-02-28 10:07:33
是否有任何特殊原因需要'defaultdict(set)'? – TyrantWave 2013-02-28 10:23:37