Browse Source

[ENH] add learnware id search

tags/v0.3.2
Gene 2 years ago
parent
commit
764ea128cf
1 changed files with 28 additions and 5 deletions
  1. +28
    -5
      learnware/market/easy/searcher.py

+ 28
- 5
learnware/market/easy/searcher.py View File

@@ -15,6 +15,13 @@ logger = get_module_logger("easy_seacher")


class EasyExactSemanticSearcher(BaseSearcher):
def _learnware_id_search(self, learnware_id: str, learnware_list: List[Learnware]) -> List[Learnware]:
match_learnwares = []
for learnware in learnware_list:
if learnware_id == learnware.id:
match_learnwares.append(learnware)
return match_learnwares

def _match_semantic_spec(self, semantic_spec1, semantic_spec2):
"""
semantic_spec1: semantic spec input by user
@@ -29,12 +36,10 @@ class EasyExactSemanticSearcher(BaseSearcher):

for key in semantic_spec1.keys():
v1 = semantic_spec1[key].get("Values", "")
v2 = semantic_spec2[key].get("Values", "")

if len(v1) == 0:
# user input is empty, no need to search
if key not in semantic_spec2 or len(v1) == 0:
continue

v2 = semantic_spec2[key].get("Values", "")
if key in ("Name", "Description"):
v1 = v1.lower()
if v1 not in name2 and v1 not in description2:
@@ -57,9 +62,15 @@ class EasyExactSemanticSearcher(BaseSearcher):

def __call__(self, learnware_list: List[Learnware], user_info: BaseUserInfo) -> SearchResults:
match_learnwares = []
user_semantic_spec = user_info.get_semantic_spec()

# Learnware id search
if "learnware_id" in user_semantic_spec:
learnware_list = self._learnware_id_search(user_semantic_spec["learnware_id"]["Values"], learnware_list)

# Semantic tag match
for learnware in learnware_list:
learnware_semantic_spec = learnware.get_specification().get_semantic_spec()
user_semantic_spec = user_info.get_semantic_spec()
if self._match_semantic_spec(user_semantic_spec, learnware_semantic_spec):
match_learnwares.append(learnware)
logger.info("semantic_spec search: choose %d from %d learnwares" % (len(match_learnwares), len(learnware_list)))
@@ -67,6 +78,13 @@ class EasyExactSemanticSearcher(BaseSearcher):


class EasyFuzzSemanticSearcher(BaseSearcher):
def _learnware_id_search(self, learnware_id: str, learnware_list: List[Learnware]) -> List[Learnware]:
match_learnwares = []
for learnware in learnware_list:
if learnware_id in learnware.id:
match_learnwares.append(learnware)
return match_learnwares

def _match_semantic_spec_tag(self, semantic_spec1, semantic_spec2) -> bool:
"""Judge if tags of two semantic specs are consistent

@@ -128,6 +146,11 @@ class EasyFuzzSemanticSearcher(BaseSearcher):
final_result = []
user_semantic_spec = user_info.get_semantic_spec()

# Learnware id search
if "learnware_id" in user_semantic_spec:
learnware_list = self._learnware_id_search(user_semantic_spec["learnware_id"]["Values"], learnware_list)

# Semantic tag match
for learnware in learnware_list:
learnware_semantic_spec = learnware.get_specification().get_semantic_spec()
if self._match_semantic_spec_tag(user_semantic_spec, learnware_semantic_spec):


Loading…
Cancel
Save