dystopedia / app.py
Suzen Fylke
Use gr.Error
be91caa
raw
history blame
1.98 kB
import gradio as gr
import lemminflect
import spacy
import wikipedia
from transformers import pipeline
nlp = spacy.load("en_core_web_lg")
sentiment_analyzer = pipeline(
"sentiment-analysis",
model="distilbert-base-uncased-finetuned-sst-2-english",
revision="af0f99b"
)
def is_positive(text):
return sentiment_analyzer(text)[0]["label"] == "POSITIVE"
def make_past_tense(token):
if token.tag_ in ("VBP", "VBZ"):
return f'{token._.inflect("VBD")} '
return token.text_with_ws
def make_dystopian(term, text):
doc = nlp(text)
if is_positive(term):
return "".join([make_past_tense(token) for token in doc])
return doc.text
def get_dystopian_summary(term):
if term == "":
return term
try:
results = wikipedia.search(term, results=1)
except wikipedia.exceptions.DisambiguationError as e:
raise gr.Error(e.error)
if len(results) == 0:
raise gr.Error(
f'Could not find an article on the term "{term}". '
'Try searching for a different topic.'
)
summary = wikipedia.summary(
results[0],
sentences=1,
auto_suggest=False,
redirect=True
)
return make_dystopian(term, summary)
def launch_demo(**kwargs):
title = "Dystopedia"
description = (
"Make any Wikipedia topic dystopian. Inspired by "
"[this Tweet](https://twitter.com/lbcyber/status/1115015586243862528). "
"Dystopedia uses [DistilBERT base uncased finetuned SST-2](https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english) "
"for sentiment analysis and is subject to its limitations and biases."
)
examples = ["joy", "hope", "peace", "Earth", "water", "food"]
gr.Interface(
fn=get_dystopian_summary,
inputs=gr.Textbox(label="term", placeholder="Enter a term...", max_lines=1),
outputs=gr.Textbox(label="description"),
title=title,
description=description,
examples=examples,
cache_examples=True,
allow_flagging="never",
).launch(**kwargs)
launch_demo(show_error=True)