Spaces:
Paused
Paused
| import numpy as np | |
| from gensim.models import KeyedVectors | |
| from utils.text_processing import tokenize_text | |
| import logging | |
| logging.basicConfig(level=logging.INFO) | |
| logger = logging.getLogger(__name__) | |
| def load_model(model_path): | |
| try: | |
| model = KeyedVectors.load(model_path) | |
| logger.info(f"Loaded GloVe model from {model_path}") | |
| return model | |
| except Exception as e: | |
| logger.error(f"Error loading GloVe model: {e}") | |
| return None | |
| def average_embeddings(model, tokens): | |
| valid_embeddings = [model[word] for word in tokens if word in model] | |
| if valid_embeddings: | |
| return np.mean(valid_embeddings, axis=0) | |
| return None | |
| def calculate_similarity(model, text1, text2): | |
| try: | |
| tokens1 = tokenize_text(text1) | |
| tokens2 = tokenize_text(text2) | |
| vec1 = average_embeddings(model, tokens1) | |
| vec2 = average_embeddings(model, tokens2) | |
| if vec1 is not None and vec2 is not None: | |
| # Handle zero vectors to avoid division by zero | |
| norm1 = np.linalg.norm(vec1) | |
| norm2 = np.linalg.norm(vec2) | |
| if norm1 == 0 or norm2 == 0: | |
| return 0.0 | |
| similarity = np.dot(vec1, vec2) / (norm1 * norm2) | |
| return max(0, min(1, similarity)) * 100 # Convert to percentage | |
| return 0.0 | |
| except Exception as e: | |
| logger.error(f"Similarity calculation error: {e}") | |
| return 0.0 | |
| # ADD THIS FUNCTION TO FIX THE ERROR | |
| def calculate_text_similarity(model, text1, text2): | |
| """Calculate similarity between two text strings""" | |
| return calculate_similarity(model, text1, text2) | |
| def get_job_embeddings(model, job_taxonomy): | |
| embeddings = [] | |
| vector_size = model.vector_size | |
| for job in job_taxonomy: | |
| tokens = tokenize_text(job) | |
| emb = average_embeddings(model, tokens) | |
| if emb is None: | |
| # Use zero vector if embedding can't be computed | |
| emb = np.zeros(vector_size) | |
| embeddings.append(emb) | |
| return np.array(embeddings) |