in microservices/skill_service/src/services/skill_to_knowledge/skill_to_node.py [0:0]
def map_nodes(self, query, learning_resource_ids):
"""Retrieves knowledge nodes semantically similar to the skill
Args:
req_body: query: (str) - Skill name and/or description
learning_resource_ids - list of learning resource ids to use
for knowledge nodes
Returns:
response: dict - dictionary containing
skill_id - firestore document id for the skill
mapped_passages - list of dictionaries containing
id - passage id
score - similarity score with skill
mapped_lus - list of dictionaries containing
id - LU firestore document id
score - similarity score with skill
mapped_los - list of dictionaries containing
id - LO firestore document id
score - similarity score with skill
mapped_subconcepts - list of dictionaries containing
id - Subconcept firestore document id
score - similarity score with skill
mapped_concepts - list of dictionaries containing
id - Concept firestore document id
score - similarity score with skill
mapped_learning_resource - list containing learning resource
firestore document ids
all_mapped_lus - list containing all mapped learning unit
firestore document ids
"""
response = {}
for learning_resource_id in learning_resource_ids:
skill_to_passage_nodes = []
skill_to_lu_nodes = []
skill_to_lo_nodes = []
skill_to_subconcept_nodes = []
skill_to_concept_nodes = []
skill_to_lr_nodes = []
learning_resource = KnowledgeServiceLearningContent.find_by_id(
learning_resource_id)
lr_mapped = False
#learning_resource.load_tree()
lr_fields = learning_resource.get_fields()
lr_data = ParentChildNodesHandler.return_child_nodes_data(lr_fields)
lr_specific_concepts = []
for concept_dict in lr_data["child_nodes"]["concepts"]:
concept = Concept.find_by_uuid(concept_dict["uuid"])
concept_specific_subconcepts = []
for sub_concept_dict in concept_dict["child_nodes"]["sub_concepts"]:
sub_concept = SubConcept.find_by_uuid(sub_concept_dict["uuid"])
subconcept_specific_los = []
for learning_objective_dict in sub_concept_dict\
["child_nodes"]["learning_objectives"]:
learning_objective = KnowledgeServiceLearningObjective.\
find_by_uuid(learning_objective_dict["uuid"])
lo_specific_lus = []
for learning_unit_dict in learning_objective_dict\
["child_nodes"]["learning_units"]:
learning_unit = KnowledgeServiceLearningUnit.\
find_by_uuid(learning_unit_dict["uuid"])
passages = learning_unit.text.split("<p>")
lu_specific_passages = []
for i, passage in enumerate(passages):
metadata = {"passage_text": passage, "skill_description": query}
passage_id = learning_unit.id + "##" + str(i)
passage_title = learning_unit.title + "_##Passage_" + str(i)
skill_to_passage_node = Skill_Passage(passage_id, passage_title,
metadata)
lu_specific_passages.append(skill_to_passage_node)
if skill_to_passage_node.mapped:
skill_to_passage_nodes.append(skill_to_passage_node)
if not lr_mapped:
lr_mapped = True
skill_to_lr_nodes.append(learning_resource_id)
skill_to_lu_node = Skill_LU(learning_unit.id, learning_unit.title,
lu_specific_passages)
if skill_to_lu_node.mapped:
skill_to_lu_nodes.append(skill_to_lu_node)
lo_specific_lus.append(skill_to_lu_node)
skill_to_lo_node = Skill_LO(learning_objective.id,
learning_objective.title,
lo_specific_lus)
if skill_to_lo_node.mapped:
skill_to_lo_nodes.append(skill_to_lo_node)
subconcept_specific_los.append(skill_to_lo_node)
skill_to_subconcept_node = Skill_SubConcept(sub_concept.id,
sub_concept.title,
subconcept_specific_los)
if skill_to_subconcept_node.mapped:
skill_to_subconcept_nodes.append(skill_to_subconcept_node)
concept_specific_subconcepts.append(skill_to_subconcept_node)
skill_to_concept_node = Skill_Concept(concept.id, concept.title,
concept_specific_subconcepts)
if skill_to_concept_node.mapped:
skill_to_concept_nodes.append(skill_to_concept_node)
lr_specific_concepts.append(skill_to_concept_node)
response[learning_resource_id] = {}
response[learning_resource_id]["mapped_passages"] = \
self.filter_nodes(skill_to_passage_nodes)
response[learning_resource_id]["mapped_lus"] = \
self.filter_nodes(skill_to_lu_nodes)
response[learning_resource_id]["mapped_los"] = \
self.filter_nodes(skill_to_lo_nodes)
response[learning_resource_id]["mapped_subconcepts"] = \
self.filter_nodes(skill_to_subconcept_nodes)
response[learning_resource_id]["mapped_concepts"] = \
self.filter_nodes(skill_to_concept_nodes)
return response