EnzoBustos commited on
Commit
eca5e0e
1 Parent(s): e68c0c3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +45 -25
app.py CHANGED
@@ -5,22 +5,28 @@ import pandas as pd
5
  import re
6
  import streamlit as st
7
 
 
8
  def translate_text_blob(text):
9
  blob = TextBlob(text)
10
  return str(blob.translate(from_lang="pt", to="en"))
11
 
 
12
  def translate_text_M2M100(text, model, tokenizer):
13
  encoded = tokenizer(text, return_tensors="pt")
14
- generated_tokens = model.generate(**encoded, forced_bos_token_id=tokenizer.get_lang_id("en"))
 
15
  return tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)[0]
16
 
 
17
  def translate_BART(text, model, tokenizer):
18
  inputs = tokenizer(text, return_tensors='pt')
19
  input_ids = inputs.input_ids
20
  attention_mask = inputs.attention_mask
21
- output = model.generate(input_ids, attention_mask=attention_mask, forced_bos_token_id=tokenizer.lang_code_to_id['en_XX'])
 
22
  return tokenizer.decode(output[0], skip_special_tokens=True)
23
 
 
24
  def sentiment_vader(sentence, vader_object):
25
 
26
  sentiment_dict = vader_object.polarity_scores(sentence)
@@ -29,36 +35,43 @@ def sentiment_vader(sentence, vader_object):
29
  positive = sentiment_dict['pos']
30
  compound = sentiment_dict['compound']
31
 
32
- if sentiment_dict['compound'] >= 0.05 :
33
  overall_sentiment = "Positive"
34
 
35
- elif sentiment_dict['compound'] <= - 0.05 :
36
  overall_sentiment = "Negative"
37
 
38
- else :
39
  overall_sentiment = "Neutral"
40
-
41
  return overall_sentiment.upper()
42
 
 
43
  def sentiment_finbert(text, pipeline):
44
  result = pipeline(text)[0]
45
  return result["label"].upper()
46
 
 
47
  m2m100 = M2M100ForConditionalGeneration.from_pretrained("facebook/m2m100_418M")
48
  m2m100_token = M2M100Tokenizer.from_pretrained("facebook/m2m100_418M")
49
  m2m100_token.src_lang = "pt"
50
 
51
- BART_token = MBart50TokenizerFast.from_pretrained('Narrativa/mbart-large-50-finetuned-opus-pt-en-translation')
52
- BART = MBartForConditionalGeneration.from_pretrained('Narrativa/mbart-large-50-finetuned-opus-pt-en-translation')
 
 
53
  BART_token.src_lang = 'pt_XX'
54
 
55
  finbert_token = AutoTokenizer.from_pretrained("ProsusAI/finbert")
56
- finbert = AutoModelForSequenceClassification.from_pretrained("ProsusAI/finbert", num_labels=3)
57
- finbert_pipeline = pipeline("sentiment-analysis", model=finbert, tokenizer=finbert_token)
 
 
58
 
59
  sid_obj = SentimentIntensityAnalyzer()
60
 
61
- classifier = pipeline("zero-shot-classification", model="joeddav/xlm-roberta-large-xnli")
 
62
 
63
  sheet_id = "1IGFSKnnmQndKVmGOWMCbsvJJMU_2jvnm"
64
  sheet_name = "Sheet1"
@@ -66,24 +79,27 @@ url = f"https://docs.google.com/spreadsheets/d/{sheet_id}/gviz/tq?tqx=out:csv&sh
66
  df = pd.read_csv(url)
67
 
68
  header = st.container()
 
69
  model = st.container()
70
  dataset = st.container()
71
  analysis = st.container()
72
- model_1, model_2 = st.columns(2)
73
 
74
  with st.sidebar:
75
- st.markdown("# Lorem Ipsum\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent sapien tortor, suscipit quis ornare ut, laoreet vitae nisi. Mauris quis consectetur risus, non blandit mauris. Sed ut odio tempor, ullamcorper leo eu, mollis eros. Curabitur pretium sollicitudin sapien, vel mattis augue convallis quis. Suspendisse eleifend turpis non nunc gravida, aliquet hendrerit orci viverra. Sed aliquet, nunc eu posuere tempor, libero ex dignissim velit, ut ultricies erat felis at urna. Proin metus augue, commodo in faucibus sed, aliquet ac eros. Nullam turpis leo, dictum eu tellus a, aliquam egestas velit. Suspendisse cursus augue a sem dapibus, eu faucibus nisl ultrices. Cras tortor ipsum, luctus vitae tincidunt id, dapibus id justo. Sed mi nunc, tempor eu iaculis in, tristique cursus massa. Integer metus felis, pulvinar ut aliquam ut, consectetur in nulla.")
76
-
77
  with header:
78
- st.title("IC 2022 Classificação de Dados Financeiros")
79
- st.write("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent sapien tortor, suscipit quis ornare ut, laoreet vitae nisi. Mauris quis consectetur risus, non blandit mauris. Sed ut odio tempor, ullamcorper leo eu, mollis eros.")
80
 
81
  with model_1:
82
- st.header("Modelo para Tradução e Classificação!")
83
- translator = st.selectbox('Qual modelo você deseja usar para tradução?', ('TextBlob', 'M2M100', 'BART'))
84
- sentimentor = st.selectbox('Qual modelo você deseja usar para a análise de sentimentos?', ('Vader', 'FinBERT'))
85
- text = st.text_area("Coloque seu texto sobre mercado financeiro em português!", "As ações da Ultrafarma subiram em 98% no último bimestre, segundo os dados da revista!")
86
- submit = st.button('Gerar!')
 
 
 
87
 
88
  with model_2:
89
  if submit:
@@ -98,13 +114,17 @@ with model_2:
98
  sentiment = sentiment_vader(text_en, sid_obj)
99
  elif sentimentor == "FinBERT":
100
  sentiment = sentiment_finbert(text_en, finbert_pipeline)
101
-
 
 
 
102
  st.write(text_en)
103
  st.write(sentiment)
104
 
105
  with model:
106
  st.header("Modelo para Tradução e Classificação!")
107
- text = st.text_area("Coloque seu texto sobre mercado financeiro em português!")
 
108
 
109
  submit = st.button('Generate')
110
 
@@ -126,6 +146,6 @@ with dataset:
126
  st.write("\t*- Texts:* Coluna que mostra os textos financeiros")
127
  st.write("\t*- Texts:* Coluna que mostra os textos financeiros")
128
  st.write("\t*- Texts:* Coluna que mostra os textos financeiros")
129
-
130
  with analysis:
131
- st.header("Visualização dos dados utilizados")
 
5
  import re
6
  import streamlit as st
7
 
8
+
9
  def translate_text_blob(text):
10
  blob = TextBlob(text)
11
  return str(blob.translate(from_lang="pt", to="en"))
12
 
13
+
14
  def translate_text_M2M100(text, model, tokenizer):
15
  encoded = tokenizer(text, return_tensors="pt")
16
+ generated_tokens = model.generate(
17
+ **encoded, forced_bos_token_id=tokenizer.get_lang_id("en"))
18
  return tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)[0]
19
 
20
+
21
  def translate_BART(text, model, tokenizer):
22
  inputs = tokenizer(text, return_tensors='pt')
23
  input_ids = inputs.input_ids
24
  attention_mask = inputs.attention_mask
25
+ output = model.generate(input_ids, attention_mask=attention_mask,
26
+ forced_bos_token_id=tokenizer.lang_code_to_id['en_XX'])
27
  return tokenizer.decode(output[0], skip_special_tokens=True)
28
 
29
+
30
  def sentiment_vader(sentence, vader_object):
31
 
32
  sentiment_dict = vader_object.polarity_scores(sentence)
 
35
  positive = sentiment_dict['pos']
36
  compound = sentiment_dict['compound']
37
 
38
+ if sentiment_dict['compound'] >= 0.05:
39
  overall_sentiment = "Positive"
40
 
41
+ elif sentiment_dict['compound'] <= - 0.05:
42
  overall_sentiment = "Negative"
43
 
44
+ else:
45
  overall_sentiment = "Neutral"
46
+
47
  return overall_sentiment.upper()
48
 
49
+
50
  def sentiment_finbert(text, pipeline):
51
  result = pipeline(text)[0]
52
  return result["label"].upper()
53
 
54
+
55
  m2m100 = M2M100ForConditionalGeneration.from_pretrained("facebook/m2m100_418M")
56
  m2m100_token = M2M100Tokenizer.from_pretrained("facebook/m2m100_418M")
57
  m2m100_token.src_lang = "pt"
58
 
59
+ BART_token = MBart50TokenizerFast.from_pretrained(
60
+ 'Narrativa/mbart-large-50-finetuned-opus-pt-en-translation')
61
+ BART = MBartForConditionalGeneration.from_pretrained(
62
+ 'Narrativa/mbart-large-50-finetuned-opus-pt-en-translation')
63
  BART_token.src_lang = 'pt_XX'
64
 
65
  finbert_token = AutoTokenizer.from_pretrained("ProsusAI/finbert")
66
+ finbert = AutoModelForSequenceClassification.from_pretrained(
67
+ "ProsusAI/finbert", num_labels=3)
68
+ finbert_pipeline = pipeline(
69
+ "sentiment-analysis", model=finbert, tokenizer=finbert_token)
70
 
71
  sid_obj = SentimentIntensityAnalyzer()
72
 
73
+ classifier = pipeline("zero-shot-classification",
74
+ model="joeddav/xlm-roberta-large-xnli")
75
 
76
  sheet_id = "1IGFSKnnmQndKVmGOWMCbsvJJMU_2jvnm"
77
  sheet_name = "Sheet1"
 
79
  df = pd.read_csv(url)
80
 
81
  header = st.container()
82
+ model_1, model_2 = st.columns(2)
83
  model = st.container()
84
  dataset = st.container()
85
  analysis = st.container()
 
86
 
87
  with st.sidebar:
88
+ st.markdown("# Lorem Ipsum\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent sapien tortor, suscipit quis ornare ut, laoreet vitae nisi. Mauris quis consectetur risus, non blandit mauris. Sed ut odio tempor, ullamcorper leo eu, mollis eros. Curabitur pretium sollicitudin sapien, vel mattis augue convallis quis. Suspendisse eleifend turpis non nunc gravida, aliquet hendrerit orci viverra. Sed aliquet, nunc eu posuere tempor, libero ex dignissim velit, ut ultricies erat felis at urna. Proin metus augue, commodo in faucibus sed, aliquet ac eros. Nullam turpis leo, dictum eu tellus a, aliquam egestas velit. Suspendisse cursus augue a sem dapibus, eu faucibus nisl ultrices. Cras tortor ipsum, luctus vitae tincidunt id, dapibus id justo. Sed mi nunc, tempor eu iaculis in, tristique cursus massa. Integer metus felis, pulvinar ut aliquam ut, consectetur in nulla.")
89
+
90
  with header:
91
+ st.title("IC 2022 Classificação de Dados Financeiros")
92
+ st.write("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent sapien tortor, suscipit quis ornare ut, laoreet vitae nisi. Mauris quis consectetur risus, non blandit mauris. Sed ut odio tempor, ullamcorper leo eu, mollis eros.")
93
 
94
  with model_1:
95
+ st.header("Modelo para Tradução e Classificação!")
96
+ translator = st.selectbox(
97
+ 'Qual modelo você deseja usar para tradução?', ('TextBlob', 'M2M100', 'BART'))
98
+ sentimentor = st.selectbox(
99
+ 'Qual modelo você deseja usar para a análise de sentimentos?', ('Vader', 'FinBERT'))
100
+ text = st.text_area("Coloque seu texto sobre mercado financeiro em português!",
101
+ "As ações da Ultrafarma subiram em 98% no último bimestre, segundo os dados da revista!")
102
+ submit = st.button('Gerar!')
103
 
104
  with model_2:
105
  if submit:
 
114
  sentiment = sentiment_vader(text_en, sid_obj)
115
  elif sentimentor == "FinBERT":
116
  sentiment = sentiment_finbert(text_en, finbert_pipeline)
117
+
118
+ st.text_area(value="Translation: " + text_en)
119
+ st.text_area(value="Sentiment: " + sentiment)
120
+
121
  st.write(text_en)
122
  st.write(sentiment)
123
 
124
  with model:
125
  st.header("Modelo para Tradução e Classificação!")
126
+ text = st.text_area(
127
+ "Coloque seu texto sobre mercado financeiro em português!")
128
 
129
  submit = st.button('Generate')
130
 
 
146
  st.write("\t*- Texts:* Coluna que mostra os textos financeiros")
147
  st.write("\t*- Texts:* Coluna que mostra os textos financeiros")
148
  st.write("\t*- Texts:* Coluna que mostra os textos financeiros")
149
+
150
  with analysis:
151
+ st.header("Visualização dos dados utilizados")