mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-30 17:24:59 +00:00
aider: Implemented find_similar_lines
to fuzzy search content and return closest matching contiguous chunk of lines.
# Aider chat conversation: USER: implement `find_similar_lines` which will fuzzy search the content for the original lines and return the contiguous chunk of lines from content which are the closest match ASSISTANT: Here is the implementation of `find_similar_lines` to fuzzy search the content and return the closest matching contiguous chunk of lines: aider/coders/editblock_coder.py <source>python <<<<<<< SEARCH #did_you_mean = find_similar_lines(original, content) ======= did_you_mean = find_similar_lines(original, content) >>>>>>> REPLACE </source> aider/coders/editblock_coder.py <source>python <<<<<<< SEARCH ======= def find_similar_lines(search_lines, content_lines, threshold=0.8): search_lines = search_lines.splitlines() content_lines = content_lines.splitlines() best_ratio = 0 best_match = None for i in range(len(content_lines) - len(search_lines) + 1): chunk = content_lines[i:i+len(search_lines)] ratio = SequenceMatcher(None, search_lines, chunk).ratio() if ratio > best_ratio: best_ratio = ratio best_match = chunk if best_ratio >= threshold: return "\n".join(best_match) else: return "" >>>>>>> REPLACE </source> This adds the `find_similar_lines` function which: 1. Splits the search lines and content lines on newlines 2. Iterates through the content lines, considering each contiguous chunk the same length as the search lines 3. Calculates the SequenceMatcher ratio between the search lines and each chunk 4. Keeps track of the chunk with the highest ratio 5. If the best ratio is above the threshold (default 0.8), it returns the best matching chunk joined back into a string 6. Otherwise it returns an empty string to indicate no close enough match was found It also uncomments the line to call `find_similar_lines` and store the result in `did_you_mean`. Let me know if you have any other questions!
This commit is contained in:
parent
056dae6530
commit
6c45b58698
1 changed files with 19 additions and 1 deletions
|
@ -57,7 +57,7 @@ class EditBlockCoder(Coder):
|
|||
full_path = self.abs_root_path(path)
|
||||
content = self.io.read_text(full_path)
|
||||
|
||||
#did_you_mean = find_similar_lines(original, content)
|
||||
did_you_mean = find_similar_lines(original, content)
|
||||
|
||||
res += f"""
|
||||
## SearchReplaceNoExactMatch: This SEARCH block failed to exactly match lines in {path}
|
||||
|
@ -465,3 +465,21 @@ Tooooo
|
|||
Hope you like it!
|
||||
"""
|
||||
print(list(find_original_update_blocks(edit)))
|
||||
def find_similar_lines(search_lines, content_lines, threshold=0.8):
|
||||
search_lines = search_lines.splitlines()
|
||||
content_lines = content_lines.splitlines()
|
||||
|
||||
best_ratio = 0
|
||||
best_match = None
|
||||
|
||||
for i in range(len(content_lines) - len(search_lines) + 1):
|
||||
chunk = content_lines[i:i+len(search_lines)]
|
||||
ratio = SequenceMatcher(None, search_lines, chunk).ratio()
|
||||
if ratio > best_ratio:
|
||||
best_ratio = ratio
|
||||
best_match = chunk
|
||||
|
||||
if best_ratio >= threshold:
|
||||
return "\n".join(best_match)
|
||||
else:
|
||||
return ""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue