Merge pull request 'cleanup' (#15) from cleanup into master

Reviewed-on: #15
This commit is contained in:
s481854 2025-01-14 13:30:56 +01:00
commit 7edaac24f1
10 changed files with 69 additions and 20 deletions

4
prepare_app.py Normal file
View File

@ -0,0 +1,4 @@
import src.model.prepare_llm as prepare_llm
prepare_llm.prepare_mistral()

View File

@ -1,6 +1,52 @@
System rekomendacyjny filmów dla opisu wyrażonego językiem naturalnym - "Filmosfera"
# 🎥 Filmosfera 🎥
**System rekomendacyjny filmów dla opisu wyrażonego językiem naturalnym**
Jak uruchomić?
- python 3.12.7
- pip install requirements.txt
By zdobyć prawidłową listę filmów, scrappera należy uruchamiać z włączonym VPN na kraj anglojęzyczny.
---
## 🚀 Jak uruchomić? 🚀
### Wymagania przed uruchomieniem:
- **Python**: <= 3.12.x
- **Wirtualne środowisko Python**:
Upewnij się, że wirtualne środowisko jest utworzone i aktywowane, aby zapewnić zgodność dodatkowych bibliotek.
Z aktywowanego środowiska uruchom:
pip install -r requirements.txt
- Następnie uruchom skrypt `prepare_app.py`, aby pobrać wymaganego do działania projektu LLM'a.
### Uruchamianie Filmosfery w celu podpowiedzi filmowych:
1. W katalogu głównym projektu wywołaj komendę:
python src/app/main.py
2. Poczekaj na uruchomienie się serwera.
3. Otwórz stronę internetową w przeglądarce, korzystając z adresu podanego w terminalu (domyślnie: [http://127.0.0.1:5000](http://127.0.0.1:5000)).
---
## 🛠️ Samodzielne zdobycie oraz przygotowanie danych 🛠️
### Zdobycie danych:
Aby uruchomić część projektu związaną ze zdobyciem danych (folder `/src/data_scrapper`):
💡 *Proces trwa około 10 godzin ze względu na ostrożne podejście do rate limitów serwisu IMDB.* 💡
#### Wymagania:
- **VPN**: Ustaw na kraj anglojęzyczny, aby:
- IMDB automatycznie nie tłumaczył niektórych części stron.
- Zapewnić wyświetlanie anglojęzycznych plakatów filmowych (polskie IP wyświetla polskie plakaty).
#### Kroki:
1. Uruchom z katalogu głównego skrypt `scrapper.py` z `/src/data_scrapper` , aby utworzyć bazę filmową Filmosfery:
python src/data_scrapper/scrapper.py
2. Uruchom z katalogu głównego skrypt `get_images` z foldeu `/src/data_scrapper`, aby:
- Pobrać plakaty filmów.
- Zaktualizować bazę filmową, aby zawierała pobrane plakaty:
python src/data_scrapper/get_images.py
### Preprocessing danych (folder `/src/process_data`):
1. Uruchom kolejno z katalogu głównego znajdujące się w folderze : `/src/process_data` następujące skrypty:
- python preprocess_data.py
- python make_actors_set.py
- python make_directors_set.py
- python make_genres_set.py
Po zakończeniu, dane są gotowe do wykorzystania w Filmosferze.

Binary file not shown.

View File

@ -22,14 +22,15 @@ def get_image(url,id):
if(response.status_code!=200):
return default_img_path
# Save image
with open(f"assets/static/{id}.jpg", 'wb') as f:
with open(f"src/app/assets/static/{id}.jpg", 'wb') as f:
f.write(response.content)
print("Image saved")
return f"assets/static/{id}.jpg"
except Exception as e:
print(e)
return default_img_path
data_path = "../data/movies_data.csv"
data_path = "data/movies_data.csv"
# Edit movies_data.csv to include image path
@ -39,5 +40,5 @@ def get_images(data):
# Uncomment the below line to get images
#get_images(pd.read_csv(data_path))
get_images(pd.read_csv(data_path))

View File

@ -4,8 +4,6 @@ import config
import json
import re
import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import html
"""
QUICK INFO

View File

@ -72,14 +72,14 @@ sentence_transformer_embeddings_path = "../../data/sentence_transformer_embeddin
sentence_bert_embeddings_path = "../../data/sentence_bert_embeddings.pkl"
alibaba_embeddings_path = "../../data/alibaba_embeddings.pkl"
"""print("Generating embeddings with lightweight model all-MiniLM-L6-v2 ...")
print("Generating embeddings with lightweight model all-MiniLM-L6-v2 ...")
lightweight_generate_and_save_embeddings(data_path, sentence_transformer_embeddings_path, model_name='all-MiniLM-L6-v2')
print("Generating embeddings with BERT...")
generate_and_save_embeddings(data_path, bert_embeddings_path, model_name='bert-base-uncased')
print("Generating embeddings with Sentence BERT...")
lightweight_generate_and_save_embeddings(data_path, sentence_bert_embeddings_path, model_name='paraphrase-mpnet-base-v2')"""
lightweight_generate_and_save_embeddings(data_path, sentence_bert_embeddings_path, model_name='paraphrase-mpnet-base-v2')
print("Generating embeddings with Alibaba model...")
generate_and_save_embeddings_with_trust_remote_code(data_path, alibaba_embeddings_path, model_name='Alibaba-NLP/gte-large-en-v1.5')

View File

@ -60,8 +60,8 @@ def prepare_set_from_list(data_path, save_path=None):
return
data_path = "../../data/movies_data.csv"
save_path = "../../data/actors_set.csv"
data_path = "data/movies_data.csv"
save_path = "data/actors_set.csv"
prepare_set_with_regex(data_path, save_path)
# prepare_set_from_list(data_path, save_path)

View File

@ -20,7 +20,7 @@ def prepare_set_from_list(data_path, save_path=None):
writer.writerow([director])
data_path = "../../data/movies_data.csv"
save_path = "../../data/directors_set.csv"
data_path = "data/movies_data.csv"
save_path = "data/directors_set.csv"
prepare_set_from_list(data_path, save_path)

View File

@ -55,8 +55,8 @@ def prepare_set_from_list(data_path, save_path=None):
return
data_path = "../../data/movies_data.csv"
save_path = "../../data/genres_set.csv"
data_path = "data/movies_data.csv"
save_path = "data/genres_set.csv"
prepare_set_with_regex(data_path, save_path)
# prepare_set_from_list(data_path, save_path)

View File

@ -59,8 +59,8 @@ def load_and_preprocess(data_path, save_path=None):
return df
data_path = "../../data/movies_data.csv"
save_path = "../../data/preprocessed_data.csv"
data_path = "data/movies_data.csv"
save_path = "data/preprocessed_data.csv"
df = load_and_preprocess(data_path, save_path)