Ver Fonte

Simplify completions

Daoud Clarke há 2 anos atrás
pai
commit
23e47e963b
1 ficheiros alterados com 10 adições e 9 exclusões
  1. 10 9
      mwmbl/tinysearchengine/rank.py

+ 10 - 9
mwmbl/tinysearchengine/rank.py

@@ -125,7 +125,7 @@ class Ranker:
         pass
         pass
 
 
     def search(self, s: str):
     def search(self, s: str):
-        results, terms = self.get_results(s)
+        results, terms, _ = self.get_results(s)
 
 
         is_complete = s.endswith(' ')
         is_complete = s.endswith(' ')
         pattern = _get_query_regex(terms, is_complete, False)
         pattern = _get_query_regex(terms, is_complete, False)
@@ -149,19 +149,20 @@ class Ranker:
         return formatted_results
         return formatted_results
 
 
     def complete(self, q: str):
     def complete(self, q: str):
-        ordered_results, terms = self.get_results(q)
-        results = [item.title.replace("\n", "") + ' — ' +
-                   item.url.replace("\n", "") for item in ordered_results]
-        if len(results) == 0:
-            return []
-        return [q, results]
+        ordered_results, terms, completions = self.get_results(q)
+        filtered_completions = [c for c in completions if c != terms[-1]]
+        urls = [item.url for item in ordered_results[:5] if all(term in item.url for term in terms)][:1]
+        completed = [' '.join(terms[:-1] + [t]) for t in filtered_completions]
+        return [q, urls + completed]
 
 
     def get_results(self, q):
     def get_results(self, q):
         terms = [x.lower() for x in q.replace('.', ' ').split()]
         terms = [x.lower() for x in q.replace('.', ' ').split()]
         is_complete = q.endswith(' ')
         is_complete = q.endswith(' ')
         if len(terms) > 0 and not is_complete:
         if len(terms) > 0 and not is_complete:
-            retrieval_terms = set(terms + self.completer.complete(terms[-1]))
+            completions = self.completer.complete(terms[-1])
+            retrieval_terms = set(terms + completions)
         else:
         else:
+            completions = []
             retrieval_terms = set(terms)
             retrieval_terms = set(terms)
 
 
         pages = []
         pages = []
@@ -176,7 +177,7 @@ class Ranker:
                             seen_items.add(item.title)
                             seen_items.add(item.title)
 
 
         ordered_results = self.order_results(terms, pages, is_complete)
         ordered_results = self.order_results(terms, pages, is_complete)
-        return ordered_results, terms
+        return ordered_results, terms, completions
 
 
 
 
 class HeuristicRanker(Ranker):
 class HeuristicRanker(Ranker):