File size: 3,955 Bytes
a2b4143
 
 
b85a20c
9d7abc9
b85a20c
a2b4143
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b85a20c
a2b4143
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# app.py
# Advanced AI Humanizer Pro (Full + Light) for Hugging Face Spaces
# Author: Saber (Mahmoud Saber)

import os
import random
import re
import nltk
import importlib
import gradio as gr

# Optional heavy dependencies (lazy-loaded)
nltk.download("wordnet", quiet=True)
from nltk.corpus import wordnet


# ========== LIGHT MODE ==========

def get_synonym(word):
    """Return a random synonym for a word (if available)."""
    synonyms = set()
    for syn in wordnet.synsets(word):
        for lemma in syn.lemmas():
            synonyms.add(lemma.name().replace("_", " "))
    if synonyms:
        synonyms = list(synonyms)
        choice = random.choice(synonyms)
        if choice.lower() != word.lower():
            return choice
    return word


def humanize_light(text: str) -> str:
    """Quick, CPU-safe version for humanizing AI text."""
    text = re.sub(r"\b(however|moreover|furthermore|thus)\b", "", text, flags=re.IGNORECASE)
    words = text.split()
    for i in range(0, len(words), 10):
        if random.random() < 0.3:
            words[i] = get_synonym(words[i])
    text = " ".join(words)
    text = re.sub(r"\s{2,}", " ", text)
    return text.strip().capitalize()


# ========== HEAVY MODE ==========

def load_heavy_dependencies():
    """Load transformers, sentence-transformers, and spaCy only when needed."""
    global torch, spacy, pipeline, SentenceTransformer
    torch = importlib.import_module("torch")
    spacy = importlib.import_module("spacy")
    pipeline = importlib.import_module("transformers").pipeline
    SentenceTransformer = importlib.import_module("sentence_transformers").SentenceTransformer


def humanize_heavy(text: str, intensity: str = "medium") -> str:
    """Transformer-based deep rewriting for high naturalness."""
    load_heavy_dependencies()
    nlp = spacy.load("en_core_web_sm")

    paraphraser = pipeline("text2text-generation", model="Vamsi/T5_Paraphrase_Paws")
    sentences = [s.text for s in nlp(text).sents]

    rewritten = []
    for sent in sentences:
        result = paraphraser(
            f"paraphrase: {sent}",
            max_length=128,
            num_return_sequences=1,
            temperature=0.8 if intensity == "heavy" else 0.5,
        )
        rewritten.append(result[0]["generated_text"])

    if intensity == "heavy" and len(rewritten) > 2:
        random.shuffle(rewritten)

    return " ".join(rewritten).strip()


# ========== GRADIO UI CREATOR ==========

def run_humanizer(text, mode="light", intensity="medium"):
    if not text.strip():
        return "Please enter some text to humanize."
    if mode == "light":
        return humanize_light(text)
    else:
        try:
            return humanize_heavy(text, intensity)
        except Exception as e:
            return f"[Error in heavy mode: {str(e)}] Try switching to light mode."


def create_enhanced_interface():
    """Build the Gradio UI."""
    interface = gr.Interface(
        fn=run_humanizer,
        inputs=[
            gr.Textbox(label="Enter Text", lines=8, placeholder="Paste your AI text here..."),
            gr.Radio(["light", "heavy"], label="Mode", value="light"),
            gr.Radio(["light", "medium", "heavy"], label="Intensity (for heavy mode only)", value="medium"),
        ],
        outputs=gr.Textbox(label="Humanized Text", lines=8),
        title="🧠 Advanced AI Humanizer Pro",
        description=(
            "Rewrite AI-generated text into more natural, human-like language. "
            "'Light' mode runs fast on CPU. 'Heavy' mode uses transformers for deeper rewriting."
        ),
        allow_flagging="never",
    )
    return interface


# ========== ORIGINAL STARTUP BLOCK (UNCHANGED) ==========

if __name__ == "__main__":
    print("🚀 Starting Advanced AI Humanizer Pro...")
    app = create_enhanced_interface()
    app.launch(
        server_name="0.0.0.0",
        server_port=7860,
        show_error=True,
        share=False
    )