-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathregexDFAEquals.py
More file actions
67 lines (59 loc) · 2.19 KB
/
regexDFAEquals.py
File metadata and controls
67 lines (59 loc) · 2.19 KB
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
import sys
import argparse
import subprocess
def main(arguments):
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--gold', help="gold",
type=str, default="None")
parser.add_argument('--predicted', help="predicted",
type=str, default="None")
args = parser.parse_args(arguments)
if args.gold == args.predicted:
print(1)
return 0
gold = unprocess_regex(args.gold)
predicted = unprocess_regex(args.predicted)
# print(gold, predicted)
if regex_equiv(gold, predicted):
print(1)
else:
print(0)
def unprocess_regex(regex):
# regex = regex.replace("<VOW>", " ".join('[AEIOUaeiou]'))
# regex = regex.replace("<NUM>", " ".join('[0-9]'))
# regex = regex.replace("<LET>", " ".join('[A-Za-z]'))
# regex = regex.replace("<CAP>", " ".join('[A-Z]'))
# regex = regex.replace("<LOW>", " ".join('[a-z]'))
regex = regex.replace("<VOW>", " ".join('AEIOUaeiou'))
regex = regex.replace("<NUM>", " ".join('0-9'))
regex = regex.replace("<LET>", " ".join('A-Za-z'))
regex = regex.replace("<CAP>", " ".join('A-Z'))
regex = regex.replace("<LOW>", " ".join('a-z'))
regex = regex.replace("<M0>", " ".join('dog'))
regex = regex.replace("<M1>", " ".join('truck'))
regex = regex.replace("<M2>", " ".join('ring'))
regex = regex.replace("<M3>", " ".join('lake'))
regex = regex.replace(" ", "")
return regex
def regex_equiv(gold, predicted):
if gold == predicted:
return True
try:
out = subprocess.check_output(['java', '-jar', 'regex_dfa_equals.jar', '{}'.format(gold), '{}'.format(predicted)])
# print("out: {}".format(out))
#print(out.decode('utf-8'))
if '\n1' in out.decode('utf-8'):
return True
else:
return False
except Exception as e:
return False
return False
def regex_equiv_from_raw(gold, predicted):
gold = unprocess_regex(gold)
predicted = unprocess_regex(predicted)
return regex_equiv(gold, predicted)
if __name__ == '__main__':
sys.exit(main(sys.argv[1:]))