Noveramaaz commited on
Commit
7be7efa
1 Parent(s): 9b94f9a

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +31 -41
main.py CHANGED
@@ -1,3 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  # Function to lemmatize text
2
  def lemmatize(text):
3
  wordnet_lemmatizer = WordNetLemmatizer()
@@ -17,7 +45,7 @@ def preprocess_text(text):
17
  text = lemmatize(text)
18
  return text
19
 
20
- # Load the model using FastAPI lifespan event so that teh model is loaded at the beginning for efficiency
21
  @asynccontextmanager
22
  async def lifespan(app: FastAPI):
23
  # Load the model from HuggingFace transformers library
@@ -28,14 +56,8 @@ async def lifespan(app: FastAPI):
28
  # Clean up the model and release the resources
29
  del sentiment_task
30
 
31
- description = """
32
- ## Text Classification API
33
- This app shows the sentiment of the text (positive, negative, or neutral).
34
- Check out the docs for the `/analyze/{text}` endpoint below to try it out!
35
- """
36
-
37
  # Initialize the FastAPI app
38
- app = FastAPI(lifespan=lifespan, docs_url="/", description=description)
39
 
40
  # Define the input data model
41
  class TextInput(BaseModel):
@@ -46,40 +68,9 @@ class TextInput(BaseModel):
46
  async def welcome():
47
  return "Welcome to our Text Classification API"
48
 
49
- # Redirect to the Swagger UI page
50
- return RedirectResponse(url="/docs")
51
-
52
  # Validate input text length
53
  MAX_TEXT_LENGTH = 1000
54
 
55
- # Define the sentiment analysis endpoint
56
- @app.post('/analyze/{text}')
57
- async def classify_text(text_input:TextInput):
58
- try:
59
- # Convert input data to JSON serializable dictionary
60
- text_input_dict = jsonable_encoder(text_input)
61
- # Validate input data using Pydantic model
62
- text_data = TextInput(**text_input_dict) # Convert to Pydantic model
63
-
64
- # Validate input text length
65
- if len(text_input.text) > MAX_TEXT_LENGTH:
66
- raise HTTPException(status_code=400, detail="Text length exceeds maximum allowed length")
67
- elif len(text_input.text) == 0:
68
- raise HTTPException(status_code=400, detail="Text cannot be empty")
69
- except ValidationError as e:
70
- # Handle validation error
71
- raise HTTPException(status_code=422, detail=str(e))
72
-
73
- try:
74
- # Perform text classification
75
- return sentiment_task(preprocess_text(text_input.text))
76
- except ValueError as ve:
77
- # Handle value error
78
- raise HTTPException(status_code=400, detail=str(ve))
79
- except Exception as e:
80
- # Handle other server errors
81
- raise HTTPException(status_code=500, detail=str(e))
82
-
83
  # Define the sentiment analysis endpoint
84
  @app.post('/analyze/{text}')
85
  async def classify_text(text_input:TextInput):
@@ -129,8 +120,7 @@ class TextInput(BaseModel):
129
  # Define the welcome endpoint
130
  @app.get('/')
131
  async def welcome():
132
- # Redirect to the Swagger UI page
133
- return RedirectResponse(url="/docs")
134
 
135
  # Validate input text length
136
  MAX_TEXT_LENGTH = 1000
 
1
+ from contextlib import asynccontextmanager
2
+ from fastapi import FastAPI, HTTPException
3
+ from pydantic import BaseModel, ValidationError
4
+ from fastapi.encoders import jsonable_encoder
5
+
6
+ # TEXT PREPROCESSING
7
+ # --------------------------------------------------------------------
8
+ import re
9
+ import string
10
+ import nltk
11
+ nltk.download('punkt')
12
+ nltk.download('wordnet')
13
+ nltk.download('omw-1.4')
14
+ from nltk.stem import WordNetLemmatizer
15
+
16
+ # Function to remove URLs from text
17
+ def remove_urls(text):
18
+ return re.sub(r'http[s]?://\S+', '', text)
19
+
20
+ # Function to remove punctuations from text
21
+ def remove_punctuation(text):
22
+ regular_punct = string.punctuation
23
+ return str(re.sub(r'['+regular_punct+']', '', str(text)))
24
+
25
+ # Function to convert the text into lower case
26
+ def lower_case(text):
27
+ return text.lower()
28
+
29
  # Function to lemmatize text
30
  def lemmatize(text):
31
  wordnet_lemmatizer = WordNetLemmatizer()
 
45
  text = lemmatize(text)
46
  return text
47
 
48
+ # Load the model using FastAPI lifespan event so that the model is loaded at the beginning for efficiency
49
  @asynccontextmanager
50
  async def lifespan(app: FastAPI):
51
  # Load the model from HuggingFace transformers library
 
56
  # Clean up the model and release the resources
57
  del sentiment_task
58
 
 
 
 
 
 
 
59
  # Initialize the FastAPI app
60
+ app = FastAPI(lifespan=lifespan)
61
 
62
  # Define the input data model
63
  class TextInput(BaseModel):
 
68
  async def welcome():
69
  return "Welcome to our Text Classification API"
70
 
 
 
 
71
  # Validate input text length
72
  MAX_TEXT_LENGTH = 1000
73
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  # Define the sentiment analysis endpoint
75
  @app.post('/analyze/{text}')
76
  async def classify_text(text_input:TextInput):
 
120
  # Define the welcome endpoint
121
  @app.get('/')
122
  async def welcome():
123
+ return "Welcome to our Text Classification API"
 
124
 
125
  # Validate input text length
126
  MAX_TEXT_LENGTH = 1000