Calculate relevance score between reference code and target file
(
target_file: str, reference: CodeReference, keywords: List[str] = None
)
| 130 | |
| 131 | |
| 132 | def calculate_relevance_score( |
| 133 | target_file: str, reference: CodeReference, keywords: List[str] = None |
| 134 | ) -> float: |
| 135 | """Calculate relevance score between reference code and target file""" |
| 136 | score = 0.0 |
| 137 | |
| 138 | # File name similarity |
| 139 | target_name = Path(target_file).stem.lower() |
| 140 | ref_name = Path(reference.file_path).stem.lower() |
| 141 | |
| 142 | if target_name in ref_name or ref_name in target_name: |
| 143 | score += 0.3 |
| 144 | |
| 145 | # File type matching |
| 146 | target_extension = Path(target_file).suffix |
| 147 | ref_extension = Path(reference.file_path).suffix |
| 148 | |
| 149 | if target_extension == ref_extension: |
| 150 | score += 0.2 |
| 151 | |
| 152 | # Keyword matching |
| 153 | if keywords: |
| 154 | keyword_matches = 0 |
| 155 | total_searchable_text = ( |
| 156 | " ".join(reference.key_concepts) |
| 157 | + " " |
| 158 | + " ".join(reference.main_functions) |
| 159 | + " " |
| 160 | + reference.summary |
| 161 | + " " |
| 162 | + reference.file_type |
| 163 | ).lower() |
| 164 | |
| 165 | for keyword in keywords: |
| 166 | if keyword.lower() in total_searchable_text: |
| 167 | keyword_matches += 1 |
| 168 | |
| 169 | if keywords: |
| 170 | score += (keyword_matches / len(keywords)) * 0.5 |
| 171 | |
| 172 | return min(score, 1.0) |
| 173 | |
| 174 | |
| 175 | def find_relevant_references_in_cache( |
no outgoing calls
no test coverage detected