A Streamlit-based web app that lets you search inside Excel or CSV files semantically — not just by exact keywords. It uses SentenceTransformer embeddings to understand the meaning of your query and find similar rows, even if the words are different.
This tool helps you explore tabular data in a more human-like way. Instead of typing exact terms, you can describe what you’re looking for in natural language, and the app will retrieve conceptually related entries.
For example:
Searching for “solar energy materials” might return rows describing “photovoltaic systems for desert environments” or “nanostructured catalysts for hydrogen production.”
- Upload
.xlsxor.csvfiles directly. - Choose the column to index and search semantically.
- Add contextual columns to show in the results.
- Adjust similarity threshold and number of results.
- Uses multilingual model
paraphrase-multilingual-MiniLM-L12-v2. - Download the results as a CSV file.
- Works fully offline once the model is downloaded.
You can easily run this project on Python 3.11.
git clone https://github.com/<your-username>/excel-semantic-search.git
cd excel-semantic-searchconda create -n excelsearch python=3.11
conda activate excelsearchYou can install the dependencies using pip or conda.
Install using pip:
pip install -r requirements.txtrequirements.txt:
streamlit>=1.37.0
pandas>=2.2.0
numpy>=1.26.0
sentence-transformers>=2.7.0
scikit-learn>=1.5.0
openpyxl>=3.1.2Explanation:
streamlit→ runs the web interfacepandas,numpy→ handle tabular datasentence-transformers→ generate semantic embeddingsscikit-learn→ compute cosine similarityopenpyxl→ required to read.xlsxfiles
You can also create the full conda environment in one command:
name: excelsearch
channels:
- conda-forge
dependencies:
- python=3.11
- pip
- pip:
- streamlit>=1.37.0
- pandas>=2.2.0
- numpy>=1.26.0
- sentence-transformers>=2.7.0
- scikit-learn>=1.5.0
- openpyxl>=3.1.2Create and activate it:
conda env create -f environment.yml
conda activate excelsearchOnce the environment is ready, launch the Streamlit app:
streamlit run app.pyThen open the link that appears in your terminal (usually http://localhost:8501).
- The app loads your Excel/CSV file into a DataFrame.
- You select which column contains the text you want to search.
- Each entry in that column is converted into an embedding vector using a pretrained SentenceTransformer model.
- When you type a query, it is embedded as well.
- The app computes the cosine similarity between your query and all rows.
- Results are sorted by similarity and filtered by a threshold you can adjust interactively.
- Searching project descriptions or grant proposals.
- Exploring survey responses semantically.
- Finding related abstracts, titles, or keywords.
- Comparing textual fields across large datasets.
- Streamlit: interactive UI
- SentenceTransformers: text embeddings
- scikit-learn: cosine similarity
- Pandas: data handling
- Python 3.11 (recommended)
For the fastest setup:
git clone https://github.com/<your-username>/excel-semantic-search.git
cd excel-semantic-search
conda env create -f environment.yml
conda activate excelsearch
streamlit run app.pyAn example dataset (example_data.csv) is included in this repository for testing and demonstration purposes.
All data — including researcher names and project descriptions — are fictional and were synthetically generated to illustrate semantic search behavior.
🧪 The only real researcher included is Antonio Alvarez, whose authentic work can be reviewed here: 🔗 GitHub – antadlp/rms-aot-methanol
This dataset is safe to use for teaching, experimentation, and public demos.
This project is released under the MIT License — free to use, modify, and share with attribution.
Would you like me to integrate this paragraph directly into the full README (so you have the final consolidated version in one file, ready to upload)?
- Add support for FAISS-based search for faster performance on large datasets.
- Enable multi-column semantic fusion (search across several text fields).
- Add GPU detection for automatic acceleration.
This project is released under the MIT License — free to use, modify, and share with attribution.