2014-01-31 3 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

yes al предложения в том же файле..в том же формате .. – Dhanya