|
import os |
|
import json |
|
from flask import Flask, request, render_template, redirect, url_for, session, flash, send_from_directory, send_file |
|
from werkzeug.utils import secure_filename |
|
from utils.file_to_text import extract_text_based_on_format, preprocess_text |
|
from utils.anoter_to_json import process_uploaded_json |
|
from utils.json_to_spacy import convert_json_to_spacy |
|
from utils.model import train_model |
|
import zipfile |
|
|
|
|
|
|
|
|
|
app = Flask(__name__) |
|
app.secret_key = 'your_secret_key' |
|
|
|
|
|
os.umask(0o000) |
|
|
|
|
|
|
|
|
|
app.config['UPLOAD_FOLDER'] = '/app/uploads' |
|
app.config['JSON_FOLDER'] = '/app/JSON' |
|
app.config['DATA_FOLDER'] = '/app/data' |
|
app.config['MODELS_FOLDER'] = '/app/Models' |
|
|
|
|
|
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) |
|
os.makedirs(app.config['JSON_FOLDER'], exist_ok=True) |
|
os.makedirs(app.config['DATA_FOLDER'], exist_ok=True) |
|
os.makedirs(app.config['MODELS_FOLDER'], exist_ok=True) |
|
|
|
|
|
ALLOWED_EXTENSIONS = {'pdf', 'docx', 'rsf', 'odt', 'png', 'jpg', 'jpeg', 'json'} |
|
|
|
|
|
def allowed_file(filename): |
|
return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS |
|
|
|
@app.route('/') |
|
def index(): |
|
return render_template('upload.html') |
|
|
|
@app.route('/guide') |
|
def guide(): |
|
return render_template('guide.html') |
|
|
|
@app.route('/ner_preview', methods=['GET']) |
|
def ner_preview(): |
|
return render_template('anoter.html') |
|
|
|
@app.route('/json', methods=['GET']) |
|
def json_file(): |
|
return render_template('savejson.html') |
|
|
|
@app.route('/spacy', methods=['GET']) |
|
def spacy_file(): |
|
return render_template('saveSpacy.html') |
|
|
|
@app.route('/text_preview', methods=['GET']) |
|
def text_preview(): |
|
try: |
|
resume_file_path = os.path.join(app.config['DATA_FOLDER'], 'resume_text.txt') |
|
if not os.path.exists(resume_file_path): |
|
flash('Resume text not found', 'error') |
|
return redirect(url_for('index')) |
|
|
|
with open(resume_file_path, 'r') as f: |
|
text = f.read() |
|
return render_template('text.html', text=text) |
|
except Exception as e: |
|
flash(f"Error loading text preview: {str(e)}", 'error') |
|
return redirect(url_for('index')) |
|
|
|
@app.route('/upload', methods=['GET', 'POST']) |
|
def upload_file(): |
|
try: |
|
if request.method == 'POST': |
|
if 'file' not in request.files: |
|
flash('No file part', 'error') |
|
return render_template('upload.html') |
|
|
|
file = request.files['file'] |
|
if file.filename == '': |
|
flash('No selected file', 'error') |
|
return render_template('upload.html') |
|
|
|
if file and allowed_file(file.filename): |
|
filename = secure_filename(file.filename) |
|
file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename) |
|
if file_path: |
|
print("Folder got it", file_path) |
|
else: |
|
print("Folder not got it......................") |
|
try: |
|
file.save(file_path) |
|
print('File uploaded successfully', 'success') |
|
except Exception as e: |
|
print(f"Error saving file: {str(e)}", 'error') |
|
flash(f"Error saving file: {str(e)}", 'error') |
|
return render_template('upload.html') |
|
|
|
|
|
if not filename.lower().endswith('.json'): |
|
return process_other_files(file_path, filename) |
|
else: |
|
flash('JSON file uploaded successfully', 'success') |
|
return render_template('upload.html') |
|
|
|
flash('File type not allowed', 'error') |
|
return render_template('upload.html') |
|
|
|
return render_template('upload.html') |
|
except Exception as e: |
|
print(f"Error----------: {str(e)}", 'error') |
|
flash(f"Error: {str(e)}", 'error') |
|
return render_template('upload.html') |
|
|
|
def process_other_files(file_path, filename): |
|
try: |
|
extracted_text, _ = extract_text_based_on_format(file_path) |
|
cleaned_text = preprocess_text(extracted_text) |
|
|
|
resume_file_path = os.path.join(app.config['DATA_FOLDER'], 'resume_text.txt') |
|
print("text file path",resume_file_path) |
|
with open(resume_file_path, 'w', encoding='utf-8') as f: |
|
f.write(cleaned_text) |
|
|
|
session['uploaded_file'] = filename |
|
print("save in txt file") |
|
return render_template('text.html', text=cleaned_text) |
|
except Exception as e: |
|
flash(f"Error processing file {filename}: {str(e)}", 'error') |
|
return redirect(request.referrer) |
|
|
|
@app.route('/download', methods=['GET']) |
|
def download_file(): |
|
try: |
|
return send_from_directory(app.config['DATA_FOLDER'], 'resume_text.txt', as_attachment=True) |
|
except Exception as e: |
|
flash(f"Error downloading file: {str(e)}", 'error') |
|
return redirect(request.referrer) |
|
|
|
@app.route('/download_model', methods=['GET']) |
|
def download_latest_model(): |
|
try: |
|
models_dir = app.config['MODELS_FOLDER'] |
|
model_files = os.listdir(models_dir) |
|
|
|
if not model_files: |
|
flash('No model files found', 'error') |
|
return redirect(request.referrer) |
|
|
|
latest_model_file = sorted(model_files, reverse=True)[0] |
|
model_path = os.path.join(models_dir, latest_model_file) |
|
|
|
if not os.path.exists(model_path): |
|
flash('Model file not found on the server', 'error') |
|
return redirect(request.referrer) |
|
|
|
zip_filename = os.path.join(models_dir, f"{latest_model_file}.zip") |
|
|
|
with zipfile.ZipFile(zip_filename, 'w') as zipf: |
|
zipf.write(model_path, os.path.basename(model_path)) |
|
|
|
return send_file(zip_filename, as_attachment=True) |
|
except Exception as e: |
|
flash(f"Error while downloading the model: {str(e)}", 'error') |
|
return redirect(request.referrer) |
|
|
|
if __name__ == '__main__': |
|
app.run(debug=True) |
|
|