-
Notifications
You must be signed in to change notification settings - Fork 0
/
rules.py
71 lines (55 loc) · 1.66 KB
/
rules.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
#!/usr/bin/env python3
import dateparser
from feature_engineering import get_pos_tag, clean_predicate,\
clean_names
def noun_rule(triple):
"""
Parameters
----------
triple
Returns
-------
"""
sentence = "The " + clean_predicate(triple.predicate)[
0] + " of " + clean_names(
triple.subject) + " is " + clean_names(triple.object) + "."
sentence = " ".join(sentence.split())
return sentence
def verb_rule(triple):
"""
Parameters
----------
triple
Returns
-------
"""
if dateparser.parse(triple.object) is None:
sentence = clean_names(triple.subject) + " is " + \
clean_predicate(triple.predicate)[
0] + " " + clean_names(triple.object) + "."
else:
# If the object is a date, use a different template:
sentence = clean_names(triple.subject) + " was " + \
clean_predicate(triple.predicate)[
0] + " on " + clean_names(triple.object) + "."
sentence = " ".join(sentence.split())
return sentence
def generate_rule_based_sentence(triple):
"""
Parameters
----------
triple : rdf.Triple containing
Returns
-------
"""
predicate, predicate_list = clean_predicate(triple.predicate)
# print(get_pos_tag(predicate_list))
if get_pos_tag(predicate_list)[-1] == 'NN' or \
get_pos_tag(predicate_list)[-1] == 'NNS':
sentence = noun_rule(triple)
elif 'VBN' in get_pos_tag(predicate_list) or 'VBD' in get_pos_tag(
predicate_list):
sentence = verb_rule(triple)
else:
sentence = '...'
return sentence