Spaces:
Configuration error
Configuration error
| from flask import Flask, request, jsonify | |
| import joblib | |
| import string | |
| import nltk | |
| import os | |
| # Initialize App | |
| app = Flask(__name__) | |
| # --- ROBUST NLTK SETUP --- | |
| # Set NLTK data path to a local folder to avoid permission issues | |
| nltk_data_dir = os.path.join(os.getcwd(), 'nltk_data') | |
| nltk.data.path.append(nltk_data_dir) | |
| def download_nltk_resources(): | |
| resources = ['stopwords', 'wordnet', 'punkt', 'punkt_tab'] | |
| for res in resources: | |
| try: | |
| nltk.data.find(f'corpora/{res}') | |
| except LookupError: | |
| try: | |
| nltk.data.find(f'tokenizers/{res}') | |
| except LookupError: | |
| print(f"Downloading {res}...") | |
| nltk.download(res, download_dir=nltk_data_dir, quiet=True) | |
| download_nltk_resources() | |
| from nltk.stem import WordNetLemmatizer | |
| from nltk.corpus import stopwords | |
| # ------------------------- | |
| # Load Model | |
| print("Loading model...") | |
| try: | |
| model = joblib.load('sentiment_model.pkl') | |
| vectorizer = joblib.load('tfidf_vectorizer.pkl') | |
| print("Model loaded successfully.") | |
| except Exception as e: | |
| print(f"CRITICAL ERROR: Could not load model files. {e}") | |
| model = None | |
| lemmatizer = WordNetLemmatizer() | |
| stop_words = set(stopwords.words('english')) | |
| def preprocess_text(text): | |
| if not isinstance(text, str): return "" | |
| text = text.lower() | |
| text = text.translate(str.maketrans('', '', string.punctuation)) | |
| tokens = nltk.word_tokenize(text) | |
| clean_tokens = [lemmatizer.lemmatize(word) for word in tokens if word not in stop_words] | |
| return " ".join(clean_tokens) | |
| def predict(): | |
| if model is None: | |
| return jsonify({'error': 'Model not loaded properly.'}), 500 | |
| try: | |
| data = request.get_json() | |
| if not data or 'review_text' not in data: | |
| return jsonify({'error': 'No review_text provided'}), 400 | |
| text = data['review_text'] | |
| clean_text = preprocess_text(text) | |
| vectorized_text = vectorizer.transform([clean_text]) | |
| prediction = model.predict(vectorized_text)[0] | |
| return jsonify({ | |
| 'review': text, | |
| 'sentiment': "Positive" if prediction == 1 else "Negative" | |
| }) | |
| except Exception as e: | |
| print(f"Prediction Error: {e}") | |
| return jsonify({'error': str(e)}), 500 | |
| if __name__ == '__main__': | |
| app.run(host='0.0.0.0', port=5000) | |