Guest User

Untitled

a guest
Sep 20th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.61 KB | None | 0 0
  1. import grakn
  2. import xml.etree.cElementTree as et
  3.  
  4. def build_phone_call_graph(inputs):
  5. client = grakn.Grakn(uri = "localhost:48555")
  6. with client.session(keyspace = "phone_calls") as session:
  7. for input in inputs:
  8. print("Loading from [" + input["data_path"] + "] into Grakn ...")
  9. load_data_into_grakn(input, session)
  10.  
  11. def load_data_into_grakn(input, session):
  12. items = parse_data_to_dictionaries(input)
  13.  
  14. for item in items:
  15. with session.transaction(grakn.TxType.WRITE) as tx:
  16. graql_insert_query = input["template"](item)
  17. print("Executing Graql Query: " + graql_insert_query)
  18. tx.query(graql_insert_query)
  19. tx.commit()
  20.  
  21. print("\nInserted " + str(len(items)) + " items from [ " + input["data_path"] + "] into Grakn.\n")
  22.  
  23. def company_template(company):
  24. return 'insert $company isa company has name "' + company["name"] + '";'
  25.  
  26. def person_template(person):
  27. # insert person
  28. graql_insert_query = 'insert $person isa person has phone-number "' + person["phone_number"] + '"'
  29. if "first_name" in person:
  30. # person is a customer
  31. graql_insert_query += " has is-customer true"
  32. graql_insert_query += ' has first-name "' + person["first_name"] + '"'
  33. graql_insert_query += ' has last-name "' + person["last_name"] + '"'
  34. graql_insert_query += ' has city "' + person["city"] + '"'
  35. graql_insert_query += " has age " + str(person["age"])
  36. else:
  37. # person is not a customer
  38. graql_insert_query += " has is-customer false"
  39. graql_insert_query += ";"
  40. return graql_insert_query
  41.  
  42. def contract_template(contract):
  43. # match company
  44. graql_insert_query = 'match $company isa company has name "' + contract["company_name"] + '";'
  45. # match person
  46. graql_insert_query += ' $customer isa person has phone-number "' + contract["person_id"] + '";'
  47. # insert contract
  48. graql_insert_query += " insert (provider: $company, customer: $customer) isa contract;"
  49. return graql_insert_query
  50.  
  51. def call_template(call):
  52. # match caller
  53. graql_insert_query = 'match $caller isa person has phone-number "' + call["caller_id"] + '";'
  54. # match callee
  55. graql_insert_query += ' $callee isa person has phone-number "' + call["callee_id"] + '";'
  56. # insert call
  57. graql_insert_query += " insert $call(caller: $caller, callee: $callee) isa call; $call has started-at " + call["started_at"] + "; $call has duration " + str(call["duration"]) + ";"
  58. return graql_insert_query
  59.  
  60. def parse_data_to_dictionaries(input):
  61. items = []
  62. with open(input["data_path"] + ".xml", "rb") as inputfile:
  63. append = False
  64. for line in inputfile:
  65. if "<" + input["selector"] + ">" in str(line):
  66. ## start of a new xml tag
  67. buffer = line
  68. append = True
  69. elif "</" + input["selector"] + ">" in str(line):
  70. ## we got a complete xml tag
  71. buffer += line
  72. append = False
  73. tnode = et.fromstring(buffer)
  74. ## parse the tag to a dictionary and append to tiems
  75. item = {}
  76. for element in tnode.getchildren():
  77. item[element.tag] = element.text
  78. items.append(item)
  79. ## delete the buffer to free the memory
  80. del buffer
  81. elif append:
  82. ## inside the current xml tag
  83. buffer += line
  84. return items
  85.  
  86. inputs = [
  87. {
  88. "data_path": "./data/companies",
  89. "template": company_template,
  90. "selector": "company"
  91. },
  92. {
  93. "data_path": "./data/people",
  94. "template": person_template,
  95. "selector": "person"
  96. },
  97. {
  98. "data_path": "./data/contracts",
  99. "template": contract_template,
  100. "selector": "contract"
  101. },
  102. {
  103. "data_path": "./data/calls",
  104. "template": call_template,
  105. "selector": "call"
  106. }
  107. ]
  108.  
  109. build_phone_call_graph(inputs)
Add Comment
Please, Sign In to add comment