|
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'
|
|
|
|
|
|
app.config['UPLOAD_FOLDER'] = 'uploads'
|
|
app.config['JSON_FOLDER'] = 'JSON'
|
|
app.config['DATA_FOLDER'] = 'data'
|
|
app.config['MODELS_FOLDER'] = 'Models'
|
|
|
|
|
|
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('/upload',methods=['GET', 'POST'])
|
|
def upload_file():
|
|
try:
|
|
if 'file' not in request.files:
|
|
flash('No file part', 'error')
|
|
return redirect(request.url)
|
|
|
|
file = request.files['file']
|
|
if file.filename == '':
|
|
flash('No selected file', 'error')
|
|
return redirect(request.url)
|
|
|
|
if file and allowed_file(file.filename):
|
|
filename = secure_filename(file.filename)
|
|
file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
|
|
file.save(file_path)
|
|
|
|
|
|
if not filename.lower().endswith('.json'):
|
|
return process_other_files(file_path, filename)
|
|
|
|
flash('File type not allowed', 'error')
|
|
except Exception as e:
|
|
flash(f"Error: {str(e)}", 'error')
|
|
|
|
return redirect(request.url)
|
|
|
|
|
|
def process_other_files(file_path, filename):
|
|
try:
|
|
extracted_text, _ = extract_text_based_on_format(file_path)
|
|
cleaned_text = preprocess_text(extracted_text)
|
|
|
|
os.makedirs(app.config['DATA_FOLDER'], exist_ok=True)
|
|
resume_file_path = os.path.join(app.config['DATA_FOLDER'], 'resume_text.txt')
|
|
|
|
with open(resume_file_path, 'w', encoding='utf-8') as f:
|
|
f.write(cleaned_text)
|
|
|
|
session['uploaded_file'] = filename
|
|
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('/edit_text', methods=['POST'])
|
|
def edit_text():
|
|
try:
|
|
|
|
edited_text = request.form['edited_text']
|
|
|
|
|
|
resume_file_path = os.path.join(app.config['DATA_FOLDER'], 'resume_text.txt')
|
|
with open(resume_file_path, 'w', encoding='utf-8') as f:
|
|
f.write(edited_text)
|
|
|
|
flash('Text edited successfully', 'success')
|
|
|
|
return render_template('text.html', text=edited_text)
|
|
except Exception as e:
|
|
flash(f"Error saving edited text: {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('/save_and_download', methods=['POST'])
|
|
def save_and_download():
|
|
try:
|
|
|
|
edited_text = request.form['edited_text']
|
|
|
|
|
|
resume_file_path = os.path.join(app.config['DATA_FOLDER'], 'resume_text.txt')
|
|
with open(resume_file_path, 'w', encoding='utf-8') as f:
|
|
f.write(edited_text)
|
|
|
|
flash('Text edited successfully', 'success')
|
|
|
|
|
|
return send_from_directory(app.config['DATA_FOLDER'], 'resume_text.txt', as_attachment=True)
|
|
|
|
except Exception as e:
|
|
flash(f"Error saving and downloading file: {str(e)}", 'error')
|
|
return redirect(request.referrer)
|
|
|
|
|
|
|
|
@app.route('/upload_json', methods=['POST'])
|
|
def upload_json_file():
|
|
try:
|
|
if 'file' not in request.files:
|
|
flash('No file part', 'error')
|
|
return redirect(request.url)
|
|
|
|
file = request.files['file']
|
|
if file.filename == '':
|
|
flash('No selected file', 'error')
|
|
return redirect(request.url)
|
|
|
|
if file and file.filename.lower().endswith('.json'):
|
|
filename = secure_filename(file.filename)
|
|
json_path = os.path.join(app.config['JSON_FOLDER'], filename)
|
|
os.makedirs(app.config['JSON_FOLDER'], exist_ok=True)
|
|
file.save(json_path)
|
|
session['uploaded_json'] = filename
|
|
flash(f'JSON file {filename} uploaded successfully')
|
|
else:
|
|
flash('File type not allowed', 'error')
|
|
except Exception as e:
|
|
flash(f"Error: {str(e)}", 'error')
|
|
|
|
return redirect(request.referrer)
|
|
|
|
|
|
@app.route('/process_json', methods=['GET'])
|
|
def process_json_file():
|
|
try:
|
|
json_folder = app.config['JSON_FOLDER']
|
|
json_files = os.listdir(json_folder)
|
|
|
|
if not json_files:
|
|
flash('No JSON files found in the folder', 'error')
|
|
return redirect(request.referrer)
|
|
|
|
filename = json_files[0]
|
|
json_path = os.path.join(json_folder, filename)
|
|
|
|
if not os.path.exists(json_path):
|
|
flash(f'JSON file {filename} not found', 'error')
|
|
return redirect(request.referrer)
|
|
|
|
process_uploaded_json(json_path)
|
|
os.makedirs(app.config['DATA_FOLDER'], exist_ok=True)
|
|
processed_file_path = os.path.join(app.config['DATA_FOLDER'], f'Processed_{filename}')
|
|
|
|
flash(f'JSON file {filename} processed successfully')
|
|
except Exception as e:
|
|
flash(f"Error processing JSON file: {str(e)}", 'error')
|
|
|
|
return redirect(request.referrer)
|
|
|
|
|
|
@app.route('/remove_json', methods=['POST'])
|
|
def remove_all_json_files():
|
|
try:
|
|
json_folder = app.config['JSON_FOLDER']
|
|
for filename in os.listdir(json_folder):
|
|
file_path = os.path.join(json_folder, filename)
|
|
if os.path.isfile(file_path):
|
|
os.remove(file_path)
|
|
session.pop('uploaded_json', None)
|
|
|
|
flash('All JSON files removed successfully')
|
|
except Exception as e:
|
|
flash(f"Error removing files: {str(e)}", 'error')
|
|
|
|
return redirect(request.referrer)
|
|
|
|
|
|
@app.route('/remove', methods=['POST'])
|
|
def remove_file():
|
|
try:
|
|
upload_folder = app.config['UPLOAD_FOLDER']
|
|
|
|
|
|
if os.path.exists(upload_folder):
|
|
|
|
for filename in os.listdir(upload_folder):
|
|
file_path = os.path.join(upload_folder, filename)
|
|
|
|
|
|
if os.path.isfile(file_path):
|
|
os.remove(file_path)
|
|
|
|
|
|
session.pop('uploaded_file', None)
|
|
flash('All files removed successfully')
|
|
else:
|
|
flash(f"Upload folder does not exist", 'error')
|
|
|
|
except Exception as e:
|
|
flash(f"Error removing files: {str(e)}", 'error')
|
|
|
|
return redirect(url_for('index'))
|
|
|
|
|
|
@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('/to_sapcy', methods=['POST'])
|
|
def to_sapcy():
|
|
try:
|
|
|
|
json_file_path = 'data/Json_Data.json'
|
|
|
|
spacy_file_path = 'data/Spacy_data.spacy'
|
|
|
|
|
|
convert_json_to_spacy(json_file_path, spacy_file_path)
|
|
|
|
flash('Model training data converted successfully', 'success')
|
|
except Exception as e:
|
|
flash(f"Error during conversion: {str(e)}", 'error')
|
|
|
|
return redirect(request.referrer)
|
|
|
|
@app.route('/train_model_endpoint', methods=['POST'])
|
|
def train_model_endpoint():
|
|
try:
|
|
|
|
epochs = int(request.form.get('epochs', 10))
|
|
version = request.form.get('model_version', 'v1')
|
|
|
|
|
|
model_path = f"./Models/ner_model_{version}"
|
|
train_model(epochs, model_path)
|
|
|
|
flash('Model training completed successfully', 'success')
|
|
except Exception as e:
|
|
flash(f"Error during training: {str(e)}", 'error')
|
|
|
|
return redirect(url_for('index'))
|
|
|
|
|
|
@app.route('/remove_files', methods=['POST'])
|
|
def remove_files():
|
|
try:
|
|
|
|
folders_to_clear = [app.config['UPLOAD_FOLDER'], app.config['JSON_FOLDER']]
|
|
|
|
for folder_path in folders_to_clear:
|
|
|
|
for filename in os.listdir(folder_path):
|
|
file_path = os.path.join(folder_path, filename)
|
|
if os.path.isfile(file_path):
|
|
os.remove(file_path)
|
|
|
|
|
|
session.pop('uploaded_file', None)
|
|
session.pop('uploaded_json', None)
|
|
|
|
flash('All files removed from folder successfully')
|
|
except Exception as e:
|
|
flash(f"Error removing files: {str(e)}", 'error')
|
|
|
|
return redirect(url_for('index'))
|
|
|
|
|
|
@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)
|
|
|