lang-model/naive-nlu/test.py

127 lines
3.4 KiB
Python
Raw Normal View History

import json
from knowledge_base import KnowledgeBase
examples = [
{
"text": "icecream is cold",
"parsed": ("exists-property-with-value", 'icecream', 'cold'),
},
2017-05-11 19:13:27 +00:00
{
"text": "is icecream cold?",
"parsed": ("question", ("exists-property-with-value", 'icecream', 'cold'))
},
{
"text": "lava is dangerous",
"parsed": ("exists-property-with-value", 'lava', 'dangerous')
},
# {
# "text": "is lava dangerous?",
# "parsed": ("question", ("exists-property-with-value", 'lava', 'dangerous')),
# },
# {
# "text": "earth is a planet",
# "parsed": ("pertenence-to-group", 'earth', 'planet'),
# },
# {
# "text": "is earth a moon?",
# "parsed": ("question", ("pertenence-to-group", 'earth', 'moon')),
# },
# {
# "text": "Green is a color",
# "parsed": ("pertenence-to-group", 'green', 'color'),
# },
# {
# "text": "a plane can fly",
# "parsed": ("has-capacity", 'plane', 'fly')
# },
# {
# "text": "a wale can swim",
# "parsed": ("has-capacity", 'wale', 'swim')
# },
]
base_knowledge = {
'icecream': {
"groups": set(['noun', 'object', 'comestible', 'sweet']),
},
'lava': {
"groups": set(['noun', 'object']),
},
'earth': {
"groups": set(['noun', 'object', 'planet']),
},
'green': {
"groups": set(['noun', 'color', 'concept']),
},
'plane': {
"groups": set(['noun', 'object', 'vehicle', 'fast']),
},
'car': {
"groups": set(['noun', 'object', 'vehicle', 'slow-ish']),
},
'wale': {
"groups": set(['noun', 'object', 'living-being']),
},
'cold': {
"groups": set(['property', 'temperature']),
"as_property": "temperature",
},
'dangerous': {
"groups": set(['property']),
"as_property": "safety",
},
'planet': {
"groups": set(['noun', 'group']),
},
'color': {
"groups": set(['property', 'group']),
},
'fly': {
"groups": set(['verb']),
},
'swim': {
"groups": set(['verb']),
},
}
2017-05-11 18:36:49 +00:00
def test_assumption(expectedResponse, knowledge, query):
print("Query: {}".format(query['text']))
print("Expected: {}".format(expectedResponse))
2017-05-11 19:13:27 +00:00
result, abstract_tree, diff = knowledge.process(query['text'])
2017-05-11 18:36:49 +00:00
print("\x1b[0;3{}mResult: {}\x1b[0m".format("1" if result != expectedResponse else "2", result))
def main():
knowledge = KnowledgeBase(
knowledge=base_knowledge,
)
differences = knowledge.train(examples)
print("----")
print(differences())
print("----")
test_assumption(True, knowledge, {'text': 'is lava dangerous?'})
# for test in [{'text': 'a bus can run'}, {'text': 'io is a moon'}]:
# row = test['text']
# result, inferred_tree, differences = knowledge.process(row)
# print("result:", result)
# print(differences())
# print()
# print('-----')
# print(json.dumps(sorted(knowledge.knowledge.keys()), indent=4))
# print('-----')
# queryTrue = { "text": "is io a moon?", "parsed": ("question", ("pertenence-to-group", "io", "moon")) }
# queryFalse = { "text": "is io a planet?", "parsed": ("question", ("pertenence-to-group", "io", "planet")) }
# test_assumption(True, knowledge, queryTrue)
# test_assumption(False, knowledge, queryFalse)
if __name__ == '__main__':
main()