bat-6 commited on
Commit
502b6a5
·
1 Parent(s): c283325

feat: implement similarity engine for hybrid semantic and feature-based project comparison

Browse files
src/similarity_model/__pycache__/similarity_engine.cpython-313.pyc CHANGED
Binary files a/src/similarity_model/__pycache__/similarity_engine.cpython-313.pyc and b/src/similarity_model/__pycache__/similarity_engine.cpython-313.pyc differ
 
src/similarity_model/similarity_engine.py CHANGED
@@ -167,7 +167,21 @@ def compare_candidate(
167
  unique_query_count=unique_query_count
168
  )
169
 
170
- hybrid_score = base_similarity
 
 
 
 
 
 
 
 
 
 
 
 
 
 
171
 
172
  originality_score = compute_originality(
173
  hybrid_score=hybrid_score,
 
167
  unique_query_count=unique_query_count
168
  )
169
 
170
+ # Calculate Jaccard word overlap on description + abstract to detect direct copy-pastes
171
+ query_desc = (str(query_project.get("abstract", "")) + " " + str(query_project.get("description", ""))).strip()
172
+ candidate_desc = (str(candidate_row.get("abstract", "")) + " " + str(candidate_row.get("description", ""))).strip()
173
+
174
+ words_q = set(normalize_text(query_desc).split())
175
+ words_c = set(normalize_text(candidate_desc).split())
176
+
177
+ jaccard_overlap = 0.0
178
+ if words_q and words_c:
179
+ jaccard_overlap = len(words_q.intersection(words_c)) / len(words_q.union(words_c))
180
+
181
+ if jaccard_overlap >= 0.60:
182
+ hybrid_score = 0.95
183
+ else:
184
+ hybrid_score = base_similarity
185
 
186
  originality_score = compute_originality(
187
  hybrid_score=hybrid_score,