2014-01-31 61 views
0

爲每個句子生成以下指定的規則。我們必須爲每個句子分組。輸入在文件中。輸出也應該在文件中對CFG語法規則進行分組的句子

sentenceid=2 

NP--->N_NNP 
NP--->N_NN_S_NU 
NP--->N_NNP 
NP--->N_NNP 
NP--->N_NN_O_NU 
VGF--->V_VM_VF 

sentenceid=3 

NP--->N_NN 
VGNF--->V_VM_VNF 
JJP--->JJ 
NP--->N_NN_S_NU 
NP--->N_NN 
VGF--->V_VM_VF 

sentenceid=4 

NP--->N_NNP 
NP--->N_NN_S_NU 
NP--->N_NNP_O_M 
VGF--->V_VM_VF 

上面的部分包含輸入,這實際上是每個句子的語法。我想將相鄰的規則句子明智地分組。輸出應如下所示。

sentenceid=2 

NP--->N_NNP N_NN_S_NU N_NNP N_NNP N_NN_O_NU 
VGF--->V_VM_VF 

sentenceid=3 

NP--->N_NN 
VGNF--->V_VM_VNF 
JJP--->JJ 
NP--->N_NN_S_NU N_NN 
VGF--->V_VM_VF 

senetnceid=4 

NP--->N_NNP N_NN_S_NU N_NNP_O_M 
VGF--->V_VM_VF 

我該如何執行此操作?我需要幾乎1000個句子規則來計算概率。這是每個句子的CFG語法,我想按照句法分組相鄰的規則。

+0

sentenceid的輸出= 3是不對的,我想你可以請檢查 –

+0

其correct..only相鄰NP的應歸.. – Dhanya

+0

啊肯定的,請在回答如下。 –

回答

0

這個怎麼樣:考慮句子在不同的文件中。

#!/usr/bin/python 

import re 
marker = '--->' 

def parse_it(sen): 
    total_dic = dict() 
    marker_memory = '' 
    with open(sen, 'r') as fh: 
     mem = None 
     lo = list() 
     for line in fh.readlines(): 
      if line.strip(): 
       match = re.search('(sentenceid=\d+)', line) 
       if match: 
        if mem and lo: 
         total_dic[marker_memory].append(lo) 
        marker_memory = match.group(0) 
        total_dic[marker_memory] = [] 
       else: 
        k,v = line.strip().split(marker) 
        k,v = [ x.strip() for x in [k,v]] 
        if not mem or mem == k: 
         lo.append((k,v)) 
         mem = k 
        else: 
         total_dic[marker_memory].append(lo) 
         lo = [(k,v)] 
         mem = k 
     #total_dic[marker_memory].append(lo) 
    return total_dic 

dic = parse_it('sentence') 
for kin,lol in dic.iteritems(): 
    print 
    print kin 
    for i in lol: 
     k,v = zip(*i) 
     print '%s%s %s' % (k[0],marker,' '.join(v)) 

輸出:

sentenceid=3 
VGF---> V_VM_VF 
NP---> N_NN 
VGNF---> V_VM_VNF 
JJP---> JJ 
NP---> N_NN_S_NU N_NN 
VGF---> V_VM_VF 

sentenceid=2 
NP---> N_NNP N_NN_S_NU N_NNP N_NNP N_NN_O_NU 
VGF---> V_VM_VF 

sentenceid=4 
VGF---> V_VM_VF 
NP---> N_NNP N_NN_S_NU N_NNP_O_M 
+0

@yopy ...我在這裏只給出3個句子,我有近1000個句子,我要修改的......和另一個東西,這裏輸出來了3次(沒有句子) – Dhanya

+0

所以,我的問所有這些句子在同一個文件中?如果是的話,我會改變片段工作。 –

+0

是al句子在同一個文件..在相同的格式.. – Dhanya