在python中创建bigrams

时间:2015-10-14 10:15:56

标签: python python-2.7 python-3.x nltk

我有一个从平行语料库中提取的候选双语术语列表,格式为

Difensori dei diritti umani, libertà di espressione >>> Human rights defenders, freedom of expression

我想要的是在bigrams中将这两种语言中的项目关联起来。因此,源语言(意大利语)中的每个多词术语都将在bigram中与目标语言中的每个多词术语相关联(英语)。因此,对于示例,双字母组件将如下所示:

('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')

有人可以帮忙吗?

3 个答案:

答案 0 :(得分:1)

这是你在找什么?

s = "Difensori dei diritti umani, liberta di espressione >>> Human rights defenders, freedom of expression"

bigrams = []
trans = s.split(' >>> ')
for it in trans[0].split(', '):
    for en in trans[1].split(', '):
        bigrams.append((it, en))
        print((it, en))

它产生这个输出:

('Difensori dei diritti umani', 'Human rights defenders')  
('Difensori dei diritti umani', 'freedom of expression')  
('liberta di espressione', 'Human rights defenders')   
('liberta di espressione','freedom of expression') 

答案 1 :(得分:1)

你需要一些争吵才能得到你需要的东西。如果您只想要基于翻译的元组,则可以使用以下函数:

# -*- coding: utf-8 -*-

def zipping(string):
    string = string.replace(', ', ',')   # to take away parasite spaces
    string = string.split(" >>> ")
    trans_tuples = zip(string[0].split(','), string[1].split(','))
    return trans_tuples

str = "Difensori dei diritti umani, libertà di espressione >>> Human rights defenders, freedom of expression"
for bigram in zipping(str):
    print bigram

输出将是:

('Difensori dei diritti umani', 'Human rights defenders')
('libertà di espressione', 'freedom of expression')

如果您需要在一侧关联两个术语,从另一侧关联两个术语(出于上下文目的,我想),只需调整压缩函数,如下所示:

# -*- coding: utf-8 -*-

def zipping(string):
    string = string.replace(', ', ',')
    string = string.split(" >>> ")
    trans_tuples = zip(string[0].split(','), string[1].split(','))
    trans_tuples.append((trans_tuples[0][0], trans_tuples[1][1]))  # new line 1
    trans_tuples.append((trans_tuples[1][0], trans_tuples[0][1]))  # new line 2
    return trans_tuples

str = "Difensori dei diritti umani, libertà di espressione >>> Human rights defenders, freedom of expression"
for bigram in zipping(str):
    print bigram

在这种情况下,输出结果如下:

('Difensori dei diritti umani', 'Human rights defenders')
('libertà di espressione', 'freedom of expression')
('Difensori dei diritti umani', 'freedom of expression')
('libertà di espressione', 'Human rights defenders')

答案 2 :(得分:0)

我的解决方案:

str = "Difensori dei diritti umani, libertà di espressione >>> Human rights defenders, freedom of expression"
b = [elem.split(", ") for elem in str.split(" >>> ")]
bigrams = list(zip(b[0], b[1]))
bigrams_ = list((zip(reversed(b[0]), b[1])))
bigrams = bigrams + bigrams_
for bigram in bigrams:
    print(bigram)

输出:

('Difensori dei diritti umani', 'Human rights defenders')
('libertà di espressione', 'freedom of expression')
('libertà di espressione', 'Human rights defenders')
('Difensori dei diritti umani', 'freedom of expression')