Tree 按语句对CFG语法规则进行分组
为每个句子生成以下指定规则。我们必须为每个句子对它们进行分组。输入在文件中。输出也应该在文件中Tree 按语句对CFG语法规则进行分组,tree,parse-tree,Tree,Parse Tree,为每个句子生成以下指定规则。我们必须为每个句子对它们进行分组。输入在文件中。输出也应该在文件中 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---&
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语法,我想按句子对相邻规则进行分组。这样如何:考虑到句子在不同的文件中
#!/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
sentenceid=3的输出不正确,我想你能检查一下它的正确性吗..只有相邻的NP应该分组..啊,当然,请给出下面的答案.你能确认一件事吗,所有这些句子都在一个文件中吗?@yopy…我这里只给出3个句子,我有近1000个句子,我要修改的..还有一件事,这里的输出是句子的3倍那么,我的问题是,所有这些句子都在同一个文件中吗?如果是的话,那么我将把代码片段改为工作。让我更改代码段,考虑到它有唯一的句子,请尝试现在,我将您所有的句子放在一个名为句子的文件中,然后运行该文件。那么您的意思是计算从一个文件到另一个文件的重复输入数?