Match your writing style to iconic French philosophers, writers, and artists.
Not about what you say — about how you say it.
Every writer has a signature. The rhythm of their sentences, the density of their vocabulary, the way they build an argument or paint an image. These stylistic fingerprints persist across topics — Camus writes about football differently than Flaubert, even when both are being concise.
This system encodes those fingerprints as dense semantic vectors and finds whose voice yours most resembles.
Your text
|
v
[Sentence Embedder] Encodes your text into a 768-dim semantic vector
| using a fine-tuned multilingual sentence-transformer
v
[Style Profiles] Pre-computed embeddings of each cultural figure's
| representative works (essays, letters, excerpts)
v
[Cosine Similarity] Ranks all figures by similarity to your text
|
v
[Explanation Engine] Highlights the specific stylistic features
that drove the match (sentence length, lexical
density, rhetorical patterns, emotional register)
| Philosophers | Writers | Artists |
|---|---|---|
|
|
(artistic philosophy) |
git clone https://github.com/Aliipou/culture-identifier.git
cd culture-identifier
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python app.pyOpen http://localhost:5000 in your browser.
Input: "The absurdity of existence does not negate our freedom to choose.
On the contrary, it is precisely because nothing is predetermined
that every choice carries its full weight."
Top Match: Albert Camus (0.91)
Reason: Existential framing, short declarative sentences, use of
paradox to reveal rather than obscure, direct address
of the reader.
Runner-up: Jean-Paul Sartre (0.84)
Runner-up: Simone de Beauvoir (0.79)
culture-identifier/
├── app.py Flask application and routes
├── analyzer/
│ ├── embedder.py Sentence-transformer wrapper
│ ├── profiles.py Pre-computed cultural figure embeddings
│ ├── similarity.py Cosine similarity and ranking
│ └── explainer.py Feature extraction for match explanation
├── data/
│ └── figures/ Source texts for each cultural figure
├── static/ CSS, JS, images
├── templates/ HTML templates
├── tests/
│ ├── test_embedder.py
│ ├── test_similarity.py
│ └── test_explainer.py
└── requirements.txt
Text input with real-time character count and language hints
Ranked cultural figure matches with similarity scores and style explanations
Detailed breakdown of stylistic features driving the match
| Component | Technology |
|---|---|
| Backend | Python, Flask |
| NLP | sentence-transformers (multilingual-MiniLM-L12-v2) |
| Similarity | Cosine similarity via scikit-learn |
| Frontend | Vanilla JS, CSS animations |
| Model | Runs locally, no API key needed |
Adding a new figure
- Add source texts to
data/figures/your_figure.txt - Run
python scripts/build_profiles.pyto recompute embeddings - Add metadata to
analyzer/profiles.py
Changing the model
The embedder is swappable. Any sentence-transformers compatible model works. Multilingual models handle French source texts better.
MIT