Chat Gpt answer:- It seems like the NLTK download function is trying to open a graphical interface which doesn’t work well in headless environments like Streamlit. To fix this, you can avoid using the graphical downloader and instead manually handle the download of NLTK data in your script. This can be done by specifying the download directory.
import streamlit as st
import pickle
import string
import nltk
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer
import os
# Ensure nltk resources are downloaded
nltk_data_dir = os.path.expanduser('~/nltk_data')
if not os.path.exists(nltk_data_dir):
os.makedirs(nltk_data_dir)
try:
nltk.data.find('corpora/stopwords.zip')
except LookupError:
nltk.download('stopwords', download_dir=nltk_data_dir)
try:
nltk.data.find('tokenizers/punkt.zip')
except LookupError:
nltk.download('punkt', download_dir=nltk_data_dir)
nltk.data.path.append(nltk_data_dir)
ps = PorterStemmer()
def transform_text(text):
text = text.lower()
text = nltk.word_tokenize(text)
y = []
for i in text:
if i.isalnum():
y.append(i)
text = y[:]
y.clear()
for i in text:
if i not in stopwords.words('english') and i not in string.punctuation:
y.append(i)
text = y[:]
y.clear()
for i in text:
y.append(ps.stem(i))
return " ".join(y)
tfidf = pickle.load(open('vectorizer.pkl', 'rb'))
model = pickle.load(open('model.pkl', 'rb'))
st.title("Email/SMS Spam Classifier")
input_sms = st.text_area("Enter the message")
if st.button('Predict'):
# 1. preprocess
transformed_sms = transform_text(input_sms)
# 2. vectorize
vector_input = tfidf.transform([transformed_sms])
# 3. predict
result = model.predict(vector_input)[0]
# 4. display
if result == 1:
st.header("Spam")
else:
st.header("Not Spam")
File "/home/adminuser/venv/lib/python3.11/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 589, in _run_script
exec(code, module.__dict__)
File "/mount/src/sms-spam-detection/app.py", line 18, in <module>
nltk.download('stopwords', download_dir=nltk_data_dir)
File "/home/adminuser/venv/lib/python3.11/site-packages/nltk/downloader.py", line 823, in download
show(
File "/home/adminuser/venv/lib/python3.11/site-packages/nltk/downloader.py", line 769, in show
print_to(
Above is the error im getting in streamlit
Git Hub repo link:- https://github.com/milikotnala/sms-spam-detection
I made some changes
by adding the below block of code but the error stays same
import os
# Ensure nltk resources are downloaded
nltk_data_dir = os.path.expanduser('~/nltk_data')
if not os.path.exists(nltk_data_dir):
os.makedirs(nltk_data_dir)
try:
nltk.data.find('corpora/stopwords.zip')
except LookupError:
nltk.download('stopwords', download_dir=nltk_data_dir)
try:
nltk.data.find('tokenizers/punkt.zip')
except LookupError:
nltk.download('punkt', download_dir=nltk_data_dir)
nltk.data.path.append(nltk_data_dir)
Pranjal Dangwal is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.