| | """ |
| | ticker_utils.py |
| | Final Version — uses your files: |
| | - NSE_Equity.csv |
| | - BSE_Equity.csv |
| | |
| | Provides: |
| | - find_ticker(user_text, exchange_preference="NSE") |
| | - suggest(text, n=5) |
| | """ |
| |
|
| | import pandas as pd |
| | import difflib |
| |
|
| | |
| | df_nse = pd.read_csv("NSE_Equity.csv") |
| | df_bse = pd.read_csv("BSE_Equity.csv") |
| |
|
| | |
| | df_nse.columns = df_nse.columns.str.lower() |
| | df_bse.columns = df_bse.columns.str.lower() |
| |
|
| | |
| | if "symbol" in df_nse.columns: |
| | nse_symbol = "symbol" |
| | else: |
| | raise ValueError("NSE CSV missing 'Symbol' column") |
| |
|
| | if "name of company" in df_nse.columns: |
| | nse_name = "name of company" |
| | else: |
| | raise ValueError("NSE CSV missing 'Name of Company' column") |
| |
|
| | if "security code" in df_bse.columns: |
| | bse_symbol = "security code" |
| | else: |
| | raise ValueError("BSE CSV missing 'Security Code' column") |
| |
|
| | if "issuer name" in df_bse.columns: |
| | bse_name = "issuer name" |
| | else: |
| | raise ValueError("BSE CSV missing 'Issuer Name' column") |
| |
|
| | |
| | df_nse["clean_name"] = df_nse[nse_name].astype(str).str.lower().str.strip() |
| | df_bse["clean_name"] = df_bse[bse_name].astype(str).str.lower().str.strip() |
| | df_nse["clean_symbol"] = df_nse[nse_symbol].astype(str).str.lower().str.strip() |
| | df_bse["clean_symbol"] = df_bse[bse_symbol].astype(str).str.lower().str.strip() |
| |
|
| | |
| | df_nse["ticker"] = df_nse[nse_symbol].astype(str).str.upper() + ".NS" |
| | df_bse["ticker"] = df_bse[bse_symbol].astype(str).str.upper() + ".BO" |
| |
|
| | def suggest(text, n=5): |
| | """Return close company name matches (lowercase input).""" |
| | text = text.lower().strip() |
| | all_names = list(df_nse["clean_name"]) + list(df_bse["clean_name"]) |
| | return difflib.get_close_matches(text, all_names, n=n, cutoff=0.6) |
| |
|
| | def find_ticker(text: str, exchange_preference: str = "NSE"): |
| | """ |
| | Resolve user text to a Yahoo-style ticker string. |
| | exchange_preference: "NSE" or "BSE" (case-insensitive). Defaults to NSE. |
| | """ |
| | text = text.lower().strip() |
| |
|
| | |
| | if exchange_preference and exchange_preference.upper() == "NSE": |
| | m_name = df_nse[df_nse["clean_name"] == text] |
| | m_sym = df_nse[df_nse["clean_symbol"] == text] |
| | if not m_name.empty: |
| | return m_name["ticker"].iloc[0] |
| | if not m_sym.empty: |
| | return m_sym["ticker"].iloc[0] |
| |
|
| | |
| | if exchange_preference and exchange_preference.upper() == "BSE": |
| | m_name = df_bse[df_bse["clean_name"] == text] |
| | m_sym = df_bse[df_bse["clean_symbol"] == text] |
| | if not m_name.empty: |
| | return m_name["ticker"].iloc[0] |
| | if not m_sym.empty: |
| | return m_sym["ticker"].iloc[0] |
| |
|
| | |
| | close = suggest(text, n=1) |
| | if close: |
| | c = close[0] |
| | m1 = df_nse[df_nse["clean_name"] == c] |
| | if not m1.empty: |
| | return m1["ticker"].iloc[0] |
| | m2 = df_bse[df_bse["clean_name"] == c] |
| | if not m2.empty: |
| | return m2["ticker"].iloc[0] |
| |
|
| | |
| | return text.upper() + ".NS" |
| |
|