Download modules/proverbs.py from casamN/NRF_LLM: direct link, hf CLI and curl.
- Browser
- Download file 3.42 kB
-
https://huggingface.co/spaces/casamN/NRF_LLM/resolve/main/modules/proverbs.py
- Command line
-
hf download hf://spaces/casamN/NRF_LLM/modules/proverbs.py
-
curl -L -o proverbs.py https://huggingface.co/spaces/casamN/NRF_LLM/resolve/main/modules/proverbs.py
3.42 kB
| import os | |
| import pandas as pd | |
| from rapidfuzz import process, fuzz | |
| # ============================================================ | |
| # DATA LOCATION | |
| # ============================================================ | |
| BASE_DIR = os.path.dirname( | |
| os.path.dirname( | |
| os.path.abspath(__file__) | |
| ) | |
| ) | |
| PROVERB_FILE = os.path.join( | |
| BASE_DIR, | |
| "data", | |
| "proverbs.csv" | |
| ) | |
| # ============================================================ | |
| # LOAD PROVERBS | |
| # ============================================================ | |
| def load_proverbs(): | |
| try: | |
| df = pd.read_csv( | |
| PROVERB_FILE, | |
| encoding="utf-8" | |
| ) | |
| df.columns = ( | |
| df.columns | |
| .str.strip() | |
| ) | |
| df.fillna("", inplace=True) | |
| print("Proverbs loaded successfully") | |
| print("Columns:", df.columns.tolist()) | |
| print("Records:", len(df)) | |
| return df | |
| except Exception as e: | |
| print( | |
| f"Proverb loading error: {e}" | |
| ) | |
| return pd.DataFrame() | |
| # ============================================================ | |
| # GLOBAL DATAFRAME | |
| # ============================================================ | |
| proverb_df = load_proverbs() | |
| # ============================================================ | |
| # SEARCH PROVERB | |
| # ============================================================ | |
| def search_proverb(text, df=None): | |
| if df is None: | |
| df = proverb_df | |
| if df.empty: | |
| return "Proverb database unavailable." | |
| if not text: | |
| return "Please enter a proverb or keyword." | |
| query = text.strip() | |
| if not query: | |
| return "Please enter a proverb or keyword." | |
| # ======================================================== | |
| # VERIFY REQUIRED COLUMNS | |
| # ======================================================== | |
| required_columns = ["Kiembu", "English"] | |
| for col in required_columns: | |
| if col not in df.columns: | |
| return ( | |
| f"Missing column '{col}' " | |
| f"in proverbs.csv" | |
| ) | |
| # ======================================================== | |
| # EXACT MATCH | |
| # ======================================================== | |
| exact_match = df[ | |
| df["Kiembu"] | |
| .astype(str) | |
| .str.lower() | |
| .str.strip() | |
| == query.lower() | |
| ] | |
| if not exact_match.empty: | |
| proverb = exact_match.iloc[0]["Kiembu"] | |
| meaning = exact_match.iloc[0]["English"] | |
| return f""" | |
| ### Proverb Found | |
| **Kiembu** | |
| {proverb} | |
| **English Meaning** | |
| {meaning} | |
| """ | |
| # ======================================================== | |
| # FUZZY SEARCH | |
| # ======================================================== | |
| choices = ( | |
| df["Kiembu"] | |
| .astype(str) | |
| .tolist() | |
| ) | |
| best_match = process.extractOne( | |
| query, | |
| choices, | |
| scorer=fuzz.WRatio | |
| ) | |
| if not best_match: | |
| return "No proverb found." | |
| proverb = best_match[0] | |
| score = best_match[1] | |
| if score < 70: | |
| return ( | |
| "No close proverb found.\n\n" | |
| f"Best similarity score: {score}" | |
| ) | |
| row = df[ | |
| df["Kiembu"] | |
| .astype(str) | |
| == proverb | |
| ] | |
| if row.empty: | |
| return "No proverb found." | |
| meaning = row.iloc[0]["English"] | |
| return f""" | |
| ### Suggested Proverb | |
| **Kiembu** | |
| {proverb} | |
| **English Meaning** | |
| {meaning} | |
| """ |