ardo 80b790c731 Algne varundus 2026-08-02 12:41 3 weeks ago
..
Kontekstid.md 80b790c731 Algne varundus 2026-08-02 12:41 3 weeks ago
Projekti kirjeldus.md 80b790c731 Algne varundus 2026-08-02 12:41 3 weeks ago
README.md 80b790c731 Algne varundus 2026-08-02 12:41 3 weeks ago
Vastused - factor analysis.md 80b790c731 Algne varundus 2026-08-02 12:41 3 weeks ago

README.md

RAG Article Explorer

Streamlit-põhine lokaalne rakendus teadusartiklite RAG (Retrieval-Augmented Generation) töötluseks.

🔧 Omadused

  • Arxiv ja DOI-põhine artiklite import PostgreSQL andmebaasi
  • PDF-tekstide ekstraktimine ja vektoriseerimine Chroma DB-sse
  • Märksõnade ekstraktsioon ja kokkuvõtete tõlkimine eesti keelde
  • CLI-skriptid taustatööde jaoks
  • Streamlit-põhine kasutajaliides RAG-päringuteks
  • Küsimuste logimine ja dokumentide valik vastuste selgitamiseks

📦 Paigaldus (python'i virtuaalkeskkond)

python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
pip install -U langchain-chroma
pip install --upgrade --force-reinstall pymupdf

📁 Kaustastruktuur

rag-articles/
├── cli/                  # CLI-skriptid artiklite laadimiseks, vektoriseerimiseks jms
│   ├── load_articles.py
│   ├── build_index.py
│   ├── rag_cli.py
│   └── ...
│
├── ingest/               # Artiklite import, töötlemine ja tõlge
│   ├── arxiv_loader.py
│   ├── openai_translate.py
│   └── keyword_extraction.py
│
├── db/                   # PostgreSQL andmebaasi skeem
│   └── init_db.py
│
├── streamlit_rag_ui.py   # Streamlit kasutajaliides RAG-päringuteks
├── rag_local_demo.py     # Kohalik RAG-testi skript
├── static/               # PDF-failid ja muud staatilised andmed
├── requirements.txt
├── .env                  # Keskkonnamuutujad (nt OpenAI API võti)
└── activate_venv.sh      # Mugav skript virtuaalkeskkonna aktiveerimiseks

🚀 Töövoog

1. PostgreSQL ja Chroma DB seadistamine

Käivita db/init_db.py andmebaasi skeemi loomiseks.

2. Artiklite import

# 1. Laadi artiklid Arxivist või DOI kaudu
python -m cli.load_articles --query "traffic volume" --limit 5
python -m cli.load_article_by_doi --doi 10.1016/j.jtrangeo.2013.07.008
# Seo pdf-ga
python -m cli.auto_link_pdf_by_doi --doi 10.1016/j.jtrangeo.2013.07.008 --pdf static/pdfs/1-s2.0-S0966692313001361-main.pdf

# 2. Laadi PDF-id ja salvesta tekst + märksõnad. Viimane versioon kirjutab tulemuse documents.pkl faili
python -m cli.load_texts_from_pdfs

# 3. Tõlgi kokkuvõtted eesti keelde
python -m cli.translate_summaries

# 4. Ehita vektorindeks (Chroma)
python -m cli.build_index

# 5. Kasuta CLI-s RAG-päringuteks
python -m cli.rag_cli --question "What is Poisson distribution?"

# 6. Kontrolli indekseerimist ja indekseeri puuduvad artiklid
python -m cli.check_index_status
python -m cli.index_missing_articles

3. Käsitsi PDF-i sidumine artikliga

python -m cli.link_pdf_to_article --id 36 --pdf static/pdfs/1-s2.0-S0966692313001361-main.pdf

4. Automaatne DOI ja PDF sidumine

python -m cli.auto_link_pdf_by_doi --doi 10.1016/j.jtrangeo.2013.06.011 --pdf static/pdfs/1-s2.0-S096669231300121X-main.pdf

5. DOI artiklite import CSV failist

python -m cli.import_dois_from_csv --csv import/imporditavate_doi_failide_nimekiri.csv

CSV-fail peaks olema kujul:

doi,pdf
10.1016/j.trd.2022.103425,static/pdfs/nimi.pdf
10.1016/j.jtrangeo.2013.07.008,static/pdfs/teine.pdf

6. Arxiv päringu koostaja

# Lihtne päring:
python -m cli.arxiv_query_builder --topic "transport" --keywords "traffic flow" "local roads" --limit 5

# Keerulisem:
python -m cli.arxiv_query_builder --topics "traffic modeling" "urban mobility" --keywords "vehicle count" --field all --limit 10

📋 CLI käskude ülevaadetabel ja juhendmaterjalid

Käsk Kirjeldus
arxiv_query_builder
auto_link_pdf_by_doi Seob DOI artikliga käsitsi allalaetud PDF-i
build_index Loob Chroma vektorbaasi tekstide põhjal
check_index_status Kontrollib, millised artiklid on indekseeritud
cleanup_keywords
import_doi_pdf_csv
import_dois_from_csv Laeb mitu DOI artiklit CSV failist
index_missing_articles Indeekseerib puuduolevad artiklid
link_pdf_to_article Seob käsitsi PDF faili olemasoleva artikliga
load_article_by_doi Laeb DOI alusel artikli CrossRef API-st
load_articles Laeb artiklid Arxivist andmebaasi
load_texts_from_pdfs Ekstraktib teksti ja märksõnad PDF-idest
rag_cli Küsimuste esitamine CLI kaudu
translate_summaries Tõlgib kokkuvõtted eesti keelde

💡 Käsurea tööriistade näited

Käsk Kirjeldus
python -m cli.load_articles --query "climate change" --limit 5 Laeb artiklid arXivist
python -m cli.load_article_by_doi --doi 10.1016/j.jtrangeo.2013.07.008 Laeb artikli DOI alusel
python -m cli.link_pdf_to_article --id 36 --pdf static/pdfs/nimi.pdf Seob PDF-i artikliga
python -m cli.build_index Loob Chroma vektorindeksi artiklite tekstist
python -m cli.index_missing_articles Indeveerib puuduva tekstiga artiklid
python -m cli.translate_summaries Tõlgib kokkuvõtted eesti keelde
python -m cli.check_index_status Kuvab, millised artiklid on indekseerimata
python -m cli.import_dois_from_csv --csv import/fail.csv Laeb mitu DOI + PDF paari CSV alusel

📺 Streamlit kasutajaliides

streamlit run streamlit_rag_ui.py

Avaneb brauseris: http://localhost:8501

Pärast artikli valimist kuvatakse:

  • Artikli pealkiri, autorid
  • Kokkuvõte inglise ja eesti keeles
  • Märksõnad
  • Originaallink (DOI või arXiv)

Streamlitis saab ka esitada päringuid valitud artikli kohta ning vaadata eelnevaid küsimusi ja vastuseid logivormis.

Vaade Kirjeldus
Artikli valik Vali artikkel ja vaata kokkuvõtet
Küsimus-vastus Esita küsimus artikli kohta
PDF allalaadimine Ava või laadi alla seotud PDF
Logi ja filtrid Filtreeri küsimuste logi kuupäeva ja märksõna järgi

🧠 Virtuaalkeskkonna skript (sh failis activate_venv.sh)

#!/bin/bash
cd "$(dirname "$0")"
source .venv/bin/activate

Seejärel:

source activate_venv.sh

🧪 Testimine

Projektil on Pytest konfiguratsioon:

pytest

Käivita ainult üks konkreetne testfail:

pytest tests/test_keywords.py
# Vea korral käivita
python -m cli.cleanup_keywords

pytest tests/test_article_completeness.py
pytest tests/test_load_articles.py
pytest tests/test_pdf_linking.py
pytest tests/test_import_dois_from_csv.py
pytest tests/test_translate_summaries.py
pytest tests/test_build_index.py
pytest tests/test_rag_cli.py

# Ei ole korras
pytest tests/test_load_article_by_doi.py
pytest tests/
pytest tests/

Käivita test koos logidega (vajalik veatuvastusel):

pytest -s -v

📁 Failide kirjeldused

Failinimi Kirjeldus
test_keywords.py Kontrollib, et artiklite märksõnad oleksid unikaalsed ja mitte tühjad.
test_load_articles.py Lisab testartikli andmebaasi ja kontrollib selle olemasolu. Testi lõpus eemaldab andmed.
test_pdf_linking.py Kontrollib, et PDF-failid oleksid lingitud static/pdfs/ kausta ja olemas kettal. Samuti testib teksti salvestamist PDF-ist.
test_article_completeness.py Kontrollib, kas kõik artiklid andmebaasis omavad olulisi veerge (nt titletextsummary).
conftest.py Sisaldab db_engine fixture’it – loob ühenduse PostgreSQL andmebaasiga kõikide testide jaoks.