def _search(self, needle): import Levenshtein if not needle: haystack = self._haystack[:] if self._default: haystack.insert(0, (self._default[0].lower(), ) + self._default) self._result_box.clear() for lower_label, label, data, on_select in haystack: item = QListWidgetItem(label, self._result_box) item.data = data item.on_select = on_select self._result_box.addItem(item) return needle = needle.lower() needles = needle.split() self._result_box.show() self._result_box.clear() results = [] for lower_label, label, data, on_select in self._haystack: for subneedle in needles: if subneedle not in lower_label: break else: results.append( (Levenshtein.distance(needle, lower_label) / len(label), label, data, on_select)) for score, label, data, on_select in sorted(results, key=lambda t: t[0]): item = QListWidgetItem(label, self._result_box) item.data = data item.on_select = on_select self._result_box.addItem(item)
def _search(self, needle): import Levenshtein if not needle: haystack = self._haystack[:] if self._default: haystack.insert(0, (self._default[0].lower(), ) + self._default) self._result_box.clear() for lower_label, label, data, on_select in haystack: item = QListWidgetItem(label, self._result_box) item.data = data item.on_select = on_select self._result_box.addItem(item) return needle = needle.lower() needles = needle.split() self._result_box.show() self._result_box.clear() results = [] for lower_label, label, data, on_select in self._haystack: for subneedle in needles: if subneedle not in lower_label: break else: # We count the number of full matches of the needle in the # labels and divide the score by this. This was we give an # advantage to labels that contain multiple matches of the # needle, for example in the folder and file name. hits = max(1, sum(lower_label.count(s) for s in needle.split())) results.append((Levenshtein.distance(needle, lower_label) / (len(label) * hits), label, data, on_select)) for score, label, data, on_select in sorted(results, key=lambda t: t[0]): item = QListWidgetItem(label, self._result_box) item.data = data item.on_select = on_select self._result_box.addItem(item)