mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
E-book viewer: Fix searching for short strings in text with lots of similar entries displaying incorrect matches. Fixes #1931566 [some bad search results using regex](https://bugs.launchpad.net/calibre/+bug/1931566)
Up the amount of context used for matches from 10 to 30 chars to reduce probability of false matching.
This commit is contained in:
parent
844457e32e
commit
e7397bda52
@ -691,7 +691,7 @@ class SearchPanel(QWidget): # {{{
|
|||||||
try:
|
try:
|
||||||
for i, result in enumerate(search_in_name(name, search_query)):
|
for i, result in enumerate(search_in_name(name, search_query)):
|
||||||
before, text, after, offset = result
|
before, text, after, offset = result
|
||||||
q = (before or '')[-5:] + text + (after or '')[:5]
|
q = (before or '')[-15:] + text + (after or '')[:15]
|
||||||
result_num += 1
|
result_num += 1
|
||||||
self.results_found.emit(SearchResult(search_query, before, text, after, q, name, idx, counter[q], offset, result_num))
|
self.results_found.emit(SearchResult(search_query, before, text, after, q, name, idx, counter[q], offset, result_num))
|
||||||
counter[q] += 1
|
counter[q] += 1
|
||||||
|
@ -153,11 +153,11 @@ def select_search_result(sr):
|
|||||||
q = ''
|
q = ''
|
||||||
before_len = after_len = 0
|
before_len = after_len = 0
|
||||||
if sr.before:
|
if sr.before:
|
||||||
q = sr.before[-5:]
|
q = sr.before[-15:]
|
||||||
before_len = q.length
|
before_len = q.length
|
||||||
q += sr.text
|
q += sr.text
|
||||||
if sr.after:
|
if sr.after:
|
||||||
after = sr.after[:5]
|
after = sr.after[:15]
|
||||||
after_len = after.length
|
after_len = after.length
|
||||||
q += after
|
q += after
|
||||||
match = find_specific_occurrence(q, int(sr.index), before_len, after_len, cache.text_map, sr.from_offset)
|
match = find_specific_occurrence(q, int(sr.index), before_len, after_len, cache.text_map, sr.from_offset)
|
||||||
|
@ -168,7 +168,7 @@ def search_in_text_of(name):
|
|||||||
start, end = m.index, r.lastIndex
|
start, end = m.index, r.lastIndex
|
||||||
before = haystack[Math.max(0, start - ctx_size):start]
|
before = haystack[Math.max(0, start - ctx_size):start]
|
||||||
after = haystack[end:end+ctx_size]
|
after = haystack[end:end+ctx_size]
|
||||||
q = (before or '')[-5:] + text + (after or '')[:5]
|
q = (before or '')[-15:] + text + (after or '')[:15]
|
||||||
match_counts[q] = match_counts[q] or 0
|
match_counts[q] = match_counts[q] or 0
|
||||||
wc.result_num += 1
|
wc.result_num += 1
|
||||||
result = {
|
result = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user