|
import gc
|
|
import psutil
|
|
import torch
|
|
import shutil
|
|
from transformers.utils.hub import TRANSFORMERS_CACHE
|
|
import streamlit as st
|
|
import os
|
|
import sys
|
|
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), )))
|
|
|
|
|
|
def free_memory():
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
gc.collect()
|
|
|
|
if torch.cuda.is_available():
|
|
torch.cuda.empty_cache()
|
|
torch.cuda.ipc_collect()
|
|
|
|
|
|
try:
|
|
if torch.cuda.is_available() is False:
|
|
psutil.virtual_memory()
|
|
except Exception as e:
|
|
print(f"Memory cleanup error: {e}")
|
|
|
|
|
|
try:
|
|
cache_dir = TRANSFORMERS_CACHE
|
|
if os.path.exists(cache_dir):
|
|
shutil.rmtree(cache_dir)
|
|
print("Cache cleared!")
|
|
except Exception as e:
|
|
print(f"β Cache cleanup error: {e}")
|
|
|
|
|
|
def create_sample_example3():
|
|
st.write("""
|
|
#### Sample Example 3
|
|
""")
|
|
graph = """
|
|
digraph {
|
|
// Global graph settings with explicit DPI
|
|
graph [bgcolor="white", rankdir=LR, splines=true, nodesep=0.8, ranksep=0.8];
|
|
node [shape=box, style="rounded,filled", fontname="Helvetica", fontsize=9, margin="0.15,0.1"];
|
|
|
|
// Define nodes with custom colors
|
|
"Input Text" [label="Input Text:\nbruh, floods in Kerala, rescue ops non-stop π", fillcolor="#ffe6de", fontcolor="#000000"];
|
|
"Normalized Text" [label="Normalized Text:\nBrother, the floods in Kerala are severe,\nand rescue operations are ongoing continuously.", fillcolor="#ffe6de", fontcolor="#000000"];
|
|
Sentiment [label="Sentiment", fillcolor="#fde6ff", fontcolor="black"];
|
|
Negative [label="Negative: 4.4367719965521246e-05", fillcolor="#e8e6ff", fontcolor="black"];
|
|
Neutral [label="Neutral: 0.9998886585235596", fillcolor="#e8e6ff", fontcolor="black"];
|
|
Positive [label="Positive: 7.097498746588826e-05", fillcolor="#e8e6ff", fontcolor="black"];
|
|
|
|
// Emotion nodes with a uniform style
|
|
Anger [label="Anger: 0.080178231", fillcolor="#deffe1", fontcolor="black"];
|
|
Disgust [label="Disgust: 0.015257259", fillcolor="#deffe1", fontcolor="black"];
|
|
Fear [label="Fear: 0.601871967", fillcolor="#deffe1", fontcolor="black"];
|
|
Joy [label="Joy: 0.00410547", fillcolor="#deffe1", fontcolor="black"];
|
|
Neutral_e [label="Neutral: 0.0341026", fillcolor="#deffe1", fontcolor="black"];
|
|
Sadness [label="Sadness: 0.245294735", fillcolor="#deffe1", fontcolor="black"];
|
|
Surprise [label="Surprise: 0.019189769", fillcolor="#deffe1", fontcolor="black"];
|
|
|
|
// Define edges with a consistent style
|
|
// edge [color="#7a7a7a", penwidth=3];
|
|
|
|
// Define edges
|
|
"Input Text" -> Sentiment;
|
|
"Input Text" -> "Normalized Text";
|
|
Sentiment -> Negative;
|
|
Sentiment -> Neutral;
|
|
Sentiment -> Positive;
|
|
|
|
Negative -> Emotion;
|
|
Positive -> Emotion [penwidth=0.2];
|
|
Neutral -> Emotion [penwidth=0.2];
|
|
// Sentiment -> Emotion;
|
|
"Input Text" -> Emotion;
|
|
Emotion -> Anger;
|
|
Emotion -> Disgust;
|
|
Emotion -> Fear;
|
|
Emotion -> Joy;
|
|
Emotion -> Neutral_e;
|
|
Emotion -> Sadness;
|
|
Emotion -> Surprise;
|
|
}
|
|
"""
|
|
st.graphviz_chart(graph)
|
|
|
|
|
|
def create_sample_example2():
|
|
st.write("""
|
|
#### Sample Example 2
|
|
""")
|
|
graph = """
|
|
digraph {
|
|
// Global graph settings
|
|
graph [bgcolor="white", rankdir=TB, splines=true, nodesep=0.8, ranksep=0.8];
|
|
node [shape=box, style="rounded,filled", fontname="Helvetica", fontsize=9, margin="0.15,0.1"];
|
|
|
|
// Define nodes with custom colors
|
|
"Input Text" [label="Input Text:\nu rlly think all that talk means u tough? lol, when I step up, u ain't gon say sh*t", fillcolor="#ffe6de", fontcolor="black"];
|
|
"Normalized Text" [label="Normalized Text:\nyou really think all that talk makes you tough [lol](laughed out loud) when i step up you are not going to say anything", fillcolor="#ffe6de", fontcolor="black"];
|
|
Sentiment [label="Sentiment", fillcolor="#fde6ff", fontcolor="black"];
|
|
Negative [label="Negative: 0.9999861717224121", fillcolor="#e8e6ff", fontcolor="black"];
|
|
Neutral [label="Neutral: 6.885089078423334e-06", fillcolor="#e8e6ff", fontcolor="black"];
|
|
Positive [label="Positive: 1.1117132999061141e-05", fillcolor="#e8e6ff", fontcolor="black"];
|
|
|
|
// Emotion nodes with a uniform style
|
|
Anger [label="Anger: 0.14403291", fillcolor="#deffe1", fontcolor="black"];
|
|
Disgust [label="Disgust: 0.039282672", fillcolor="#deffe1", fontcolor="black"];
|
|
Fear [label="Fear: 0.014349542", fillcolor="#deffe1", fontcolor="black"];
|
|
Joy [label="Joy: 0.048965044", fillcolor="#deffe1", fontcolor="black"];
|
|
Neutral_e [label="Neutral: 0.494852662", fillcolor="#deffe1", fontcolor="black"];
|
|
Sadness [label="Sadness: 0.021111647", fillcolor="#deffe1", fontcolor="black"];
|
|
Surprise [label="Surprise: 0.237405464", fillcolor="#deffe1", fontcolor="black"];
|
|
|
|
// Define edges with a consistent style
|
|
// edge [color="#7a7a7a", penwidth=3];
|
|
|
|
// Define edges
|
|
"Input Text" -> Sentiment;
|
|
"Input Text" -> "Normalized Text";
|
|
Sentiment -> Negative;
|
|
Sentiment -> Neutral;
|
|
Sentiment -> Positive;
|
|
|
|
Negative -> Emotion;
|
|
Positive -> Emotion [penwidth=0.2];
|
|
Neutral -> Emotion [penwidth=0.2];
|
|
// Sentiment -> Emotion;
|
|
"Input Text" -> Emotion;
|
|
Emotion -> Anger;
|
|
Emotion -> Disgust;
|
|
Emotion -> Fear;
|
|
Emotion -> Joy;
|
|
Emotion -> Neutral_e;
|
|
Emotion -> Sadness;
|
|
Emotion -> Surprise;
|
|
}
|
|
"""
|
|
st.graphviz_chart(graph)
|
|
|
|
|
|
def create_sample_example1():
|
|
st.write("#### Sample Example 1")
|
|
|
|
graph = """
|
|
digraph G {
|
|
rankdir=TD;
|
|
bgcolor="white";
|
|
nodesep=0.8;
|
|
ranksep=0.8;
|
|
node [shape=box, style="rounded,filled", fontname="Helvetica", fontsize=9, margin="0.15,0.1"];
|
|
|
|
// Define nodes with colors
|
|
"Input Text" [label="Input Text:\ni don't know fr y he's sooo sad", fillcolor="#ffe6de", fontcolor="black"];
|
|
"Normalized Text" [label="Normalized Text:\ni do not know for real why he's so sad", fillcolor="#e6f4d7", fontcolor="black"];
|
|
Sentiment [label="Sentiment", fillcolor="#fde6ff", fontcolor="black"];
|
|
Negative [label="Negative: 0.995874803543091", fillcolor="#e8e6ff", fontcolor="black"];
|
|
Neutral [label="Neutral: 6.232635259628296e-05", fillcolor="#e8e6ff", fontcolor="black"];
|
|
Positive [label="Positive: 2.0964847564697266e-05", fillcolor="#e8e6ff", fontcolor="black"];
|
|
|
|
Emotion [label="Emotion", fillcolor="#fdf5e6", fontcolor="black"];
|
|
Anger [label="Anger: 0.0", fillcolor="#deffe1", fontcolor="black"];
|
|
Disgust [label="Disgust: 0.0", fillcolor="#deffe1", fontcolor="black"];
|
|
Fear [label="Fear: 0.010283803842246056", fillcolor="#deffe1", fontcolor="black"];
|
|
Joy [label="Joy: 0.0", fillcolor="#deffe1", fontcolor="black"];
|
|
Neutral_e [label="Neutral: 0.021935827255129814", fillcolor="#deffe1", fontcolor="black"];
|
|
Sadness [label="Sadness: 1.0", fillcolor="#deffe1", fontcolor="black"];
|
|
Surprise [label="Surprise: 0.02158345977962017", fillcolor="#deffe1", fontcolor="black"];
|
|
|
|
// Define edges
|
|
"Input Text" -> Sentiment;
|
|
"Input Text" -> "Normalized Text";
|
|
Sentiment -> Negative;
|
|
Sentiment -> Neutral;
|
|
Sentiment -> Positive;
|
|
|
|
Negative -> Emotion;
|
|
Positive -> Emotion [penwidth=0.2];
|
|
Neutral -> Emotion [penwidth=0.2];
|
|
// Sentiment -> Emotion;
|
|
"Input Text" -> Emotion;
|
|
Emotion -> Anger;
|
|
Emotion -> Disgust;
|
|
Emotion -> Fear;
|
|
Emotion -> Joy;
|
|
Emotion -> Neutral_e;
|
|
Emotion -> Sadness;
|
|
Emotion -> Surprise;
|
|
}
|
|
"""
|
|
|
|
st.graphviz_chart(graph)
|
|
|
|
|
|
|
|
def create_project_overview():
|
|
|
|
st.markdown("## Project Overview")
|
|
st.write(f"""
|
|
Tachygraphyβoriginally developed to expedite writingβhas evolved over centuries. In the 1990s, it reappeared as micro-text, driving faster communication on social media with characteristics like 'Anytime, Anyplace, Anybody, and Anything (4A)'. This project focuses on the analysis and normalization of micro-text, which is a prevalent form of informal communication today. It aims to enhance Natural Language Processing (NLP) tasks by standardizing micro-text for better sentiment analysis, emotion analysis, data extraction and normalization to understandable form aka. 4A message decoding as primary objective.
|
|
"""
|
|
)
|
|
|
|
|
|
def create_footer():
|
|
|
|
st.markdown("## About Us")
|
|
|
|
|
|
col1, col2, col3 = st.columns([1, 1, 1])
|
|
|
|
|
|
with col1:
|
|
st.markdown("### π Contributors")
|
|
st.write("##### **Archisman Karmakar**")
|
|
st.write("[π LinkedIn](https://www.linkedin.com/in/archismankarmakar/) | [π GitHub](https://www.github.com/ArchismanKarmakar) | [π Kaggle](https://www.kaggle.com/archismancoder)")
|
|
|
|
st.write("##### **Sumon Chatterjee**")
|
|
st.write("[π LinkedIn](https://www.linkedin.com/in/sumon-chatterjee-3b3b43227) | [π GitHub](https://github.com/Sumon670) | [π Kaggle](https://www.kaggle.com/sumonchatterjee)")
|
|
|
|
|
|
with col2:
|
|
st.markdown("### π Mentors")
|
|
st.write("##### **Prof. Anupam Mondal**")
|
|
st.write("[π LinkedIn](https://www.linkedin.com/in/anupam-mondal-ph-d-8a7a1a39/) | [π Google Scholar](https://scholar.google.com/citations?user=ESRR9o4AAAAJ&hl=en) | [π Website](https://sites.google.com/view/anupammondal/home)")
|
|
|
|
st.write("##### **Prof. Sainik Kumar Mahata**")
|
|
st.write("[π LinkedIn](https://www.linkedin.com/in/mahatasainikk) | [π Google Scholar](https://scholar.google.co.in/citations?user=OcJDM50AAAAJ&hl=en) | [π Website](https://sites.google.com/view/sainik-kumar-mahata/home)")
|
|
|
|
|
|
with col3:
|
|
st.markdown("### π About the Project")
|
|
st.write("This is our research project for our **B.Tech final year** and a **journal** which is yet to be published.")
|
|
st.write("Built with π using **Streamlit**.")
|
|
|
|
|
|
|
|
|
|
def show_dashboard():
|
|
|
|
st.title("Tachygraphy Micro-text Analysis & Normalization")
|
|
st.write(f"""Welcome to the Tachygraphy Micro-text Analysis & Normalization Project. This application is designed to analyze text data through three stages:""")
|
|
coltl1, coltl2 = st.columns(2)
|
|
with coltl1:
|
|
st.write("""
|
|
1. Sentiment Polarity Analysis
|
|
2. Emotion Mood-tag Analysis
|
|
3. Text Transformation & Normalization
|
|
4. Stacked all 3 stages with their best models
|
|
5. Data Correction & Collection
|
|
""")
|
|
with coltl2:
|
|
st.write("""
|
|
- Training Source: [GitHub @ Tachygraphy Micro-text Analysis & Normalization](https://github.com/ArchismanKarmakar/Tachygraphy-Microtext-Analysis-And-Normalization)
|
|
- Kaggle Collections: [Kaggle @ Tachygraphy Micro-text Analysis & Normalization](https://www.kaggle.com/datasets/archismancoder/dataset-tachygraphy/data?select=Tachygraphy_MicroText-AIO-V3.xlsx)
|
|
- Hugging Face Org: [Hugging Face @ Tachygraphy Micro-text Analysis & Normalization](https://huggingface.co/Tachygraphy-Microtext-Normalization-IEMK25)
|
|
- Deployment Source: [GitHub](https://github.com/ArchismanKarmakar/Tachygraphy-Microtext-Analysis-And-Normalization-Deployment-Source-HuggingFace_Streamlit_JPX14032025)
|
|
- Streamlit Deployemnt: [Streamlit](https://tachygraphy-microtext.streamlit.app/)
|
|
- Hugging Face Space Deployment: [Hugging Face Space](https://huggingface.co/spaces/Tachygraphy-Microtext-Normalization-IEMK25/Tachygraphy-Microtext-Analysis-and-Normalization-ArchismanCoder)
|
|
""")
|
|
|
|
create_footer()
|
|
|
|
create_project_overview()
|
|
|
|
|
|
create_sample_example1()
|
|
|
|
create_sample_example2()
|
|
create_sample_example3()
|
|
|
|
|
|
def __main__():
|
|
show_dashboard()
|
|
|