我有这种格式的并行语料库:
parallel_corpus =
one sentence in Italian : one sentence in English
one sentence in Italian : one sentence in English
我有这种格式的双语术语列表
bigram_list =
Difensori dei diritti umani, libertà di espressione > Human rights defenders, freedom of expression
sgomberi forzati, violazioni dei diritti umani > forced evictions, human rights violations
因此,双语条款文件中的每一行都包含由">"
分割的两种语言的术语我想要的是为上面文件中的每一行关联候选翻译对(一种语言中的术语除了另一种语言中的一个术语)。所以对于上面的第一个例子,双字母组合将如下所示:
('Difensori dei diritti umani','Human rights defenders')
('Difensori dei diritti umani','freedom of expression')
('libertà di espressione','Human rights defenders')
('libertà di espressione','freedom of expression')
之后我想估计上述每个双子星的互信息,并选择具有高价值的二元组。我试过这段代码
for line in bigram_list.splitlines():
n = 0
s = 0.001
a = 0
b = 0
c = 0
d = 0
mi = ''
bi= []
trans = line.split(' > ')
left = trans[0].split(', ')
right = trans[1].split(', ')
for i in left:
for j in right:
for line in parallel_corpus.splitlines():
n += 1
if i in line and j in line:
a += 1
elif i in line and not j in line:
b+= 1
elif j in line and not i in line:
c+= 1
else:
d +=1
mi = log(((a +s)/n)/(((b+s)/n)*((c+s)/n)))
bi.append((i,j,mi))
print (bi)
此代码提供以下输出
[('Difensori dei diritti umani', 'Human rights defenders', 9.747427586368971), ('Difensori dei diritti umani', 'freedom of expression', 4.054309816276213), ('libertà di espressione', 'Human rights defenders', 1.7964873912918353), ('libertà di espressione', 'freedom of expression', 3.5916971873132355)]
[('sgomberi forzati', 'forced evictions', 9.971061859787796), ('sgomberi forzati', 'human rights violations', 5.278014664230184), ('violazioni dei diritti umani', 'forced evictions', 4.3759922075718447), ('violazioni dei diritti umani', 'human rights violations', 2.760410122135915)]
如果有相同的第一个元素的对,我需要的是bigram_list中的每一行,选择具有高值的一对。示例:在以下行中
[('Difensori dei diritti umani', 'Human rights defenders', 4.747427586368971), ('Difensori dei diritti umani', 'freedom of expression', 4.054309816276213), ('libertà di espressione', 'Human rights defenders', 3.7964873912918353), ('libertà di espressione', 'freedom of expression', 3.5916971873132355)]
我们有
('Difensori dei diritti umani', 'Human rights defenders', 9.747427586368971)
'Difensori dei diritti umani', 'freedom of expression', 4.054309816276213
所以我们必须选择第一对包含相同第一个元素的对(' Difensori dei diritti umani')和第二对,但具有较高的值。
有人可以帮忙吗?
答案 0 :(得分:1)
由于您只想要具有相同第一个元素和最大值的对,因此您可以创建一个以first element
为键的字典。您可以遍历元组列表并检查密钥(元组的第一个元素)是否存在。如果确实检查该值是否高于字典中的值,则替换为true。
以下是与您的示例相关的代码:
temp_dict = {}
for i in a:
if temp_dict.has_key(i[0]):
if (temp_dict[i[0]][2] < i[2]):
temp_dict[i[0]] = i
else:
temp_dict[i[0]] = i
迭代示例代码中的两个列表后输出:
{&#39; violazioni dei diritti umani&#39;:(&#39; violazioni dei diritti umani&#39;, &#39;强制驱逐&#39;,4.375992207571844),&#39; Difensori dei diritti umani&#39;: (&#39; Difensori dei diritti umani&#39;,&#39;人权维护者&#39;, 9.747427586368971),&#39; sgomberi forzati&#39;:(&#39; sgomberi forzati&#39;,&#39;强制驱逐&#39;,9.971061859787795),&#39; libert \ xc3 \ xa0 di espressione&#39; ;: (&#39; libert \ xc3 \ xa0 di espressione&#39;,&#39;言论自由&#39;, 3.5916971873132355)}