替换文件中的短语而不会重复

时间:2014-12-13 21:32:03

标签: python-2.7 python-3.x

我有一个包含并行文本的文件:源文本和目标文本。从源文本中我提取了一些表达式,我想在源文本中替换这些表达式,但是使用不同的格式,例如使用方括号。

这是文件的一个例子

</seg>
<seg match="1-1" id="2">
<src>Difensori dei diritti umani e organizzazioni sono stati oggetto di crescenti intimidazioni e minacce in un clima di limitazione della libertà di espressione, che ha anche visto un giornalista incarcerato per diversi mesi.</src>
<tgt>تعرض عدد من المدافعين عن حقوق الإنسان والمنظمات المعنية بحقوق الإنسان للترهيب والتهديد بصورة متزايدة، وسط مناخ من القيود على حرية التعبير، شهد أيضاً الحكم بسجن أحد الصحفيين لعدة أشهر.</tgt>
</seg>
<seg match="1-1" id="3">
<src>Sono stati riportati casi di sgomberi forzati e violazioni dei diritti umani da parte della polizia, ma su scala minore rispetto agli anni precedenti.</src>
<tgt>ووردت أنباء عن حالات من الإجلاء القسري وانتهاكات حقوق الإنسان على أيدي الشرطة، وإن كان ذلك على نطاق أقل من مثيله في السنوات السابقة.</tgt>
</seg>
<seg match="1-1" id="4">
<src>Una rivolta carceraria nella Prigione centrale di Luanda ha determinato morti e feriti, sebbene le cifre a tal riguardo siano state contestate.</src>
<tgt>وأسفر تمرد للسجناء في سجن لواندا المركزي عن سقوط قتلى وجرحى، ولكن أعداد الضحايا كانت موضع خلاف.</tgt

这是我想在源文本中替换的表达式的一个例子

libertà di espressione, sgomberi forzati, rivolta carceraria

这是我使用的代码

ex = codecs.open('filedirectory','r',encoding='utf-8').read().split(',')
parallel_text = codecs.open('filedirectory', 'r', encoding='utf-8').read()
parallel = parallel_text.splitlines()

for line in parallel:
    if line.startswith('<src>'):
        source = line
        for l in ex:
            if l in source:
               newcorpus= parallel_text.replace(l, "[" + l + "]")  
               print newcorpus     

此代码提供了重复数据,并且在某些行中不会替换 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

如果你没有转到像element tree这样的xml解析器,这可以让你从问题开始我能理解的内容:

# coding=utf-8
import codecs
import os

parallel_text = codecs.open('./1/filedirectory', 'r', encoding='utf-8').read()
parallel = parallel_text.splitlines()

to_be_replaced = [
    u"libertà di espressione",
    u"sgomberi forzati",
    u"rivolta carceraria"
]

result = []

for line in parallel:
    if line.startswith('<src>'):
        for s in to_be_replaced:
            if s in line:
                line = line.replace(s, '[' + s + ']')
        result.append(line)

print os.linesep.join(result)