-
Notifications
You must be signed in to change notification settings - Fork 2.7k
/
Copy pathtest-rte-system.py
executable file
·131 lines (97 loc) · 3.35 KB
/
test-rte-system.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/usr/bin/env python
import os
import re
import time
import random
dataset = "RTE2_dev"
score = 0.0
minScore = 0.60
memory = "-ms2g -mx7g"
# Set up file paths -------------------------------------------------------------
dataDir = "/u/nlp/rte/data/byformat"
tmpDir = "/tmp/rte-regression.%d" % os.getpid()
os.mkdir(tmpDir)
rteFile = "%s/rte/%s.xml" % (dataDir, dataset)
kbeFile = "%s/%s.kbe.xml" % (tmpDir, dataset)
pipelineFile = "%s/%s.pipeline.info.xml" % (tmpDir, dataset)
alignFile = "%s/%s.align.xml" % (tmpDir, dataset)
logFile = "%s/%s.log" % (tmpDir, dataset)
regressionFile = "%s/regression/%s.regression.log" % (dataDir, dataset)
# Make KBE file from RTE file ---------------------------------------------------
def makeKBEFile():
javaclass = "edu.stanford.nlp.util.XMLTransformer"
xsltransformer = "/u/nlp/rte/data/resources/RTE_to_KBEval.xsl"
cmd = "java -server %s %s " % (memory, javaclass) + \
"-in %s " % rteFile + \
"-out %s " % kbeFile + \
"-transform %s " % xsltransformer + \
"> %s 2>&1 " % logFile
# print "cmd is:\n", cmd
os.system(cmd)
# Annotation --------------------------------------------------------------------
def doAnnotation():
javaclass = "edu.stanford.nlp.rte.RTEPipeline"
cmd = "java -server %s %s " % (memory, javaclass) + \
"-kbeIn %s " % kbeFile + \
"-infoOut %s " % pipelineFile + \
"> %s 2>&1 " % logFile
# print "cmd is:\n", cmd
os.system(cmd)
# Alignment & inference ---------------------------------------------------------
def doAlignmentAndInference():
aligner = "stochastic"
javaclass = "edu.stanford.nlp.rte.KBETester"
cmd = "java -server %s %s " % (memory, javaclass) + \
"-info %s " % pipelineFile + \
"-saveAlignments %s " % alignFile + \
"-aligner %s " % aligner + \
"-twoClass " + \
"-balancedData " + \
"-verbose 1 " + \
"> %s 2>&1 " % logFile
# print "cmd is:\n", cmd
os.system(cmd)
# Extract score -----------------------------------------------------------------
def extractScore():
for line in os.popen("grep '^Accuracy:' %s" % logFile):
line = line.strip()
# print line
fields = re.split('\s+', line)
score = float(fields[-1])
return score
# Get previous score ------------------------------------------------------------
def getPreviousScore():
prev = 0.0
for line in os.popen("grep '^PASS' %s" % regressionFile):
line = line.strip()
# print line
fields = re.split('\s+', line)
prev = float(fields[1])
return prev
# Save score --------------------------------------------------------------------
def saveScore(score, minScore, logFile):
if score >= minScore:
result = "PASS"
else:
result = "FAIL"
f = open(regressionFile, "a")
print >>f, \
"%s %.4f %.4f %s %s" % \
(result,
score,
minScore,
time.strftime("%Y%m%d-%H%M%S"),
logFile)
f.close()
# main --------------------------------------------------------------------------
makeKBEFile()
doAnnotation()
doAlignmentAndInference()
# score = random.random()
score = extractScore()
minScore = max(minScore, getPreviousScore())
if score >= minScore:
print "PASS score %.4f >= min %.4f" % (score, minScore)
else:
print "FAIL score %.4f >= min %.4f, output in %s" % (score, minScore, logFile)
saveScore(score, minScore, logFile)