eva-ia-robot 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,21 @@
1
1
  Gem::Specification.new do |s|
2
- s.name = "eva-ia-robot"
3
- s.version = "0.1.5"
4
- s.description = "Gem integrada com Google Speech e Google Translate"
5
- s.summary = "Command line"
6
- s.author = "Henrique Utsch"
7
- s.email = "henriqueutsch@gmail.com"
8
- s.homepage = "https://github.com/henriqueutsch/Eva-IA-Robot"
9
- s.files = Dir["{lib/**/*.rb,README.rdoc,test/**/*.rb,eva_ia_robot/*.rb,eva_ia_robot/*.dll,eva_ia_robot/*.config,eva_ia_robot/*.exe,Rakefile,*.gemspec}"]
2
+ s.name = "eva-ia-robot"
3
+ s.version = "0.1.7"
4
+ s.description = "Gem integrada com Google Speech e Google Translate"
5
+ s.summary = "Command line"
6
+ s.author = "Henrique Utsch"
7
+ s.email = "henriqueutsch@gmail.com"
8
+ s.homepage = "https://github.com/henriqueutsch/Eva-IA-Robot"
9
+ s.files = Dir["{lib/**/*.rb,README.rdoc,tests/**/*.rb,lib/eva_ia_robot/*.rb,lib/eva_ia_robot/*.dll,lib/eva_ia_robot/*.config,lib/eva_ia_robot/*.exe,,lib/eva_ia_robot/*.yml,lib/Rakefile,*.gemspec}"]
10
+ s.add_dependency "cgi"
11
+ s.add_dependency 'open-uri'
12
+ s.add_dependency 'json'
13
+ s.add_dependency 'fileutils'
14
+ s.add_dependency 'nokogiri'
15
+ s.add_dependency 'rubygems'
16
+ s.add_dependency 'rbconfig'
17
+ s.add_dependency 'yaml'
18
+ s.add_dependency 'win32/sound'
19
+ s.add_dependency 'win32ole'
20
+
10
21
  end
File without changes
@@ -0,0 +1,5 @@
1
+ language: pt-br
2
+ beep: nao
3
+ feedback: nao
4
+ showrecord: nao
5
+ temporesposta: nao
@@ -0,0 +1,87 @@
1
+ # encoding: utf-8
2
+ #1 - falta corrigir o erro em eva-pergunta.rb
3
+ # antes do rescue
4
+ # 706: unexpected token at '{"status":5,"id":"","hypotheses":[]}
5
+ # 706: unexpected token at '{"status":0,"id":"","hypotheses":[{"utterance":"desativar","confidence":0.86765343}]}
6
+ # A JSON text must at least contain two octets!
7
+ # undefined method `[]' for nil:NilClass
8
+ #2 - ao executar um programa
9
+ # [Decode error - output not utf-8]
10
+ # 3 - repetição de comando
11
+ # limpar alguma variavel
12
+ # 4 - criar o tempo de resposta
13
+ # 5 - problemas ao listar comandos
14
+ # modulos do ruby para instalar basta abrir o prompt de comando e digitar "gem install [nome]" ex: "gem install win32ole"
15
+ require 'win32ole'
16
+ require 'yaml'
17
+ # carrega os arquivos .rb
18
+ require './eva-pergunta.rb'
19
+ require './eva-resposta.rb'
20
+ require './eva-modulo.rb'
21
+
22
+ # teste mas ainda não sei como vou fazer isso.
23
+ module HelloWorld
24
+ def self.say
25
+ "Hello World!"
26
+ end
27
+ end
28
+
29
+ class Time
30
+ def to_ms
31
+ (self.to_f * 1000.0).to_i
32
+ end
33
+ end
34
+
35
+ shell = WIN32OLE.new('Shell.Application')
36
+ cnf = YAML::load(File.open('config.yml'))
37
+ @frase = ""
38
+ @feedback = cnf['feedback']
39
+ @beep = cnf['beep']
40
+ @showrecord = cnf['showrecord']
41
+
42
+
43
+ evaconfig()
44
+
45
+ while @frase !="sair" do
46
+
47
+
48
+ begin
49
+ # puts start_time = Time.now
50
+ @frase = pergunta()
51
+ puts "Usuario: #{@frase}"
52
+ rescue =>e
53
+ puts e.message
54
+ end
55
+
56
+
57
+
58
+ if @listacomandos.include? @frase
59
+
60
+ if @listaexecutar[@listacomandos.index(@frase)].include? '%'
61
+ p abrir = @listaexecutar[@listacomandos.index(@frase)].gsub('%',"").gsub("\n",'')
62
+ shell.ShellExecute(abrir, "", "", "open", 1)
63
+ end
64
+
65
+ if @listaexecutar[@listacomandos.index(@frase)].include? '&'
66
+ p fechar = @listaexecutar[@listacomandos.index(@frase)].gsub('&',"").gsub("\n",'')
67
+ system("taskkill /IM #{fechar}")
68
+ end
69
+
70
+ if @listaexecutar[@listacomandos.index(@frase)].include? '$'
71
+ p executar = @listaexecutar[@listacomandos.index(@frase)].gsub('$',"").gsub("\n",'')
72
+ modulos(executar)
73
+ end
74
+
75
+ if @listaresposta[@listacomandos.index(@frase)].include? '$'
76
+ p executar = @listaresposta[@listacomandos.index(@frase)].gsub('$',"")
77
+ modulos(executar)
78
+ else
79
+ p "EVA: #{@listaresposta[@listacomandos.index(@frase)]}"
80
+ resposta(@listaresposta[@listacomandos.index(@frase)])
81
+
82
+ end
83
+ end
84
+ # puts end_time = Time.now
85
+ # puts elapsed_time = end_time.to_ms - start_time.to_ms # => 3004
86
+
87
+ end
@@ -4,7 +4,44 @@ require 'nokogiri'
4
4
  require 'rubygems'
5
5
  require 'rbconfig'
6
6
 
7
- load 'eva-resposta.rb'
7
+ require './eva-resposta.rb'
8
+
9
+ def evaconfig()
10
+ @listacomandos = Array.new
11
+ @listaresposta = Array.new
12
+ @listaexecutar = Array.new
13
+
14
+ File.open(Dir.pwd()+'/eva.config', 'r:utf-8') do |linha|
15
+ while line = linha.gets
16
+ # p line
17
+ # p line.class
18
+ # p line.index('#')
19
+ # p line.index(':')
20
+ # p line.index('=')
21
+ # p line.size
22
+ line.encoding
23
+ comandos = line[line.index('#')+1..line.index(':')-1]
24
+ resposta = line[line.index(':')+1..line.index('=>')-1]
25
+ executar = line[line.index('=>')+2..line.size]
26
+ @listacomandos << comandos.gsub('[','').gsub(']','')
27
+ @listaresposta << resposta.gsub('[','').gsub(']','')
28
+ @listaexecutar << executar.gsub('[','').gsub(']','').gsub('\n','')
29
+
30
+ end
31
+ end
32
+ # puts listacomandos
33
+ # puts listaresposta
34
+ # puts listaexecutar
35
+
36
+
37
+ # p listacomandos.index('abrir chrome')
38
+ # p listaresposta[listacomandos.index('abrir chrome')]
39
+ end
40
+
41
+
42
+
43
+
44
+
8
45
  def os
9
46
  @os ||= (
10
47
  host_os = RbConfig::CONFIG['host_os']
@@ -58,6 +95,39 @@ def hora()
58
95
  resposta("são #{Time.now.hour.to_s} horas e #{Time.now.min.to_s} minutos")
59
96
  end
60
97
 
98
+ def exit()
99
+ @frase = 'sair'
100
+ end
101
+
102
+ def beepoff()
103
+ @beep = 'nao'
104
+ end
105
+
106
+ def beepon()
107
+ @beep = 'sim'
108
+ end
109
+
110
+ def feedbackon()
111
+ @feedback = 'sim'
112
+ end
113
+
114
+ def feedbackoff()
115
+ @feedback = 'nao'
116
+ end
117
+
118
+ def showrecordon()
119
+ @showrecord = 'sim'
120
+ end
121
+
122
+ def showrecordoff()
123
+ @showrecord = 'nao'
124
+ end
125
+
126
+ def exibircomandos()
127
+ puts 'LISTA DE COMANDOS'
128
+ puts @listacomandos
129
+ end
130
+
61
131
  def modulos(modulo)
62
132
  case modulo
63
133
  when 'hora'
@@ -68,8 +138,26 @@ def modulos(modulo)
68
138
  data()
69
139
  when 'sistema'
70
140
  os()
141
+ when 'evaconfig'
142
+ evaconfig()
143
+ when 'exit'
144
+ exit()
145
+ when 'beepoff'
146
+ beepoff()
147
+ when 'beepon'
148
+ beepon()
149
+ when 'feedbackon'
150
+ feedbackon()
151
+ when 'feedbackoff'
152
+ feedbackoff()
153
+ when 'showrecordon'
154
+ showrecordon()
155
+ when 'showrecordoff'
156
+ showrecordoff()
157
+ when 'exibircomandos()'
158
+ exibircomandos()
71
159
  else
72
- puts 'erro 1'
160
+ puts 'Módulo não encontrado'
73
161
  end
74
162
  end
75
163
 
@@ -1,17 +1,16 @@
1
1
  # encoding: utf-8
2
2
  # Esse código transforma audio em texto via api do google speech
3
-
4
3
  # Win32/sound modulo para tocar um beep via script
5
4
  require 'json'
6
5
  require 'win32/sound'
7
6
  include Win32
8
- load 'eva-resposta.rb'
7
+ require './eva-resposta.rb'
9
8
 
10
- def pergunta(feedback,beep)
9
+ def pergunta()
11
10
  # imprimi na tela um feedback visual de quando dar o comando verbal
12
- p 'gravando ...'
11
+ p 'EVA: gravando ...'
13
12
  # verifica se a configuração auditiva para dar o comando verbal esta setada na configuração
14
- if beep== true
13
+ if @beep == 'sim'
15
14
  # Emite um som antes da gravação da voz
16
15
  Sound.beep(1500, 200)
17
16
  end
@@ -19,9 +18,14 @@ def pergunta(feedback,beep)
19
18
  # puts "inicio gravação #{Time.now}"
20
19
  # utilizamos o sox que é um programa para gravar audio via linha de comando - no caso salva com o nome test.flac que é o formato do google
21
20
  # silence -l significa que o rec.exe grava o audio e ao perceber o silencio finaliza a gravação e salva o arquivo ja no formato permitido pelo google speech
22
- system('rec.exe -q -r 16000 test.flac silence -l 1 0.1 1% 1 1.5 1%')
21
+ if @showrecord == 'sim'
22
+ system('rec.exe -r 16000 test.flac silence -l 1 0.1 1% 1 1.5 1%')
23
+ else
24
+ system('rec.exe -q -r 16000 test.flac silence -l 1 0.1 1% 1 1.5 1%')
25
+ end
26
+
23
27
  # feedback para o envio do arquivo para o google
24
- p 'Enviando arquivo ...'
28
+ p 'EVA: Enviando arquivo ...'
25
29
  # p "inicio envio #{Time.now}"
26
30
  # envia o arquivo test.flac para o servidor e este retorna um json
27
31
  # {\"status\":0,\"id\":\"\",\"hypotheses\":[{\"utterance\":\"abrir word\",\"confidence\":0.82485712}]}\n"
@@ -40,22 +44,27 @@ def pergunta(feedback,beep)
40
44
  resposta = JSON.parse(request)
41
45
  # puts "chegada resposta #{Time.now}"
42
46
  rescue =>e
47
+ puts 'antes do rescue'
48
+ puts e
43
49
  # se houver erro ele simplesmente exibe a mensagem de erro e continua o seu processamento normal
44
50
  puts e.message
51
+ puts 'status'
52
+ puts resposta["status"]
53
+ puts 'erro no rescue'
45
54
  end
46
55
  # se o status for 5, quer dizer que o texto não foi reconhecido adequadamente então ele pede para repetir o comando caso contrario ele retorna o texto
47
56
  if resposta["status"] == 5
48
57
  # a variavel feedback controla se vai ter resposta por audio ou apenas visual
49
- if feedback==true
58
+ if @feedback=='sim'
50
59
  resposta("favor repêtir o comando")
51
60
  else
52
- puts "favor repetir o comando"
61
+ puts "EVA: Favor repetir o comando"
53
62
  end
54
63
 
55
64
  else
56
65
  # pega apenas o texto do json
57
66
  resp = resposta["hypotheses"][0]["utterance"]
58
- puts resp
67
+ # puts resp
59
68
  # retorna o texto
60
69
  return resp
61
70
  end
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  # Esse código transforma texto em audio via api do google Translate
2
3
  require "cgi"
3
4
  require 'open-uri'
@@ -14,6 +15,10 @@ def resposta(texto)
14
15
  end
15
16
  # system executa um comando no prompt
16
17
  # play.exe executa audio via linha de comando para não precisar de um player externo.
17
- system('play.exe -q arquivo.mp3')
18
+ if @showrecord == 'sim'
19
+ system('play.exe arquivo.mp3')
20
+ else
21
+ system('play.exe -q arquivo.mp3')
22
+ end
18
23
  end
19
24
  # resposta('abrindo chrome')
@@ -13,4 +13,14 @@
13
13
  #[finalizar illustrator]:[finalizando illustrator]=>[&illustrator.exe]
14
14
  #[abrir prompt]:[abrindo prompt de comando]=>[%cmd.exe]
15
15
  #[finalizar prompt]:[finalizando prompt]=>[&cmd.exe]
16
- #[sair]:[finalizando sistema de voz]=>[$exit]
16
+ #[atualizar comandos]:[lista de comandos atualizada]=>[$evaconfig]
17
+ #[bom dia]:[tenha um bom dia]=>[]
18
+ #[sair]:[finalizando sistema de voz]=>[]
19
+ #[finalizar sistema]:[finalizando sistema de voz]=>[$exit]
20
+ #[desativar som]:[sistema de beep desativado]=>[$beepoff]
21
+ #[ativar som]:[sistema de beep ativado]=>[$beepon]
22
+ #[desativar]:[sistema de resposta desativado]=>[$feedbackoff]
23
+ #[ativar]:[sistema de resposta ativado]=>[$feedbackon]
24
+ #[exibir som]:[sistema de som visualmente ativo]=>[$showrecordon]
25
+ #[ocultar som]:[sistema de som visualmente oculto]=>[$showrecordoff]
26
+ #[exibir comandos]:[exibindo lista de comandos]=>[$listarcomandos]
@@ -1,5 +1,8 @@
1
1
  require "test/unit"
2
- load "../eva-ia-robot.rb"
2
+ require '../lib/eva_ia_robot/eva-ia-robot.rb'
3
+
4
+ # require "../eva_ia_robot/eva-pergunta.rb"
5
+
3
6
 
4
7
  class HelloWorldTest < Test::Unit::TestCase
5
8
  def test_say_hello_to_the_world
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eva-ia-robot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,32 +9,143 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-19 00:00:00.000000000 -03:00
12
+ date: 2014-02-20 00:00:00.000000000 -03:00
13
13
  default_executable:
14
- dependencies: []
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: cgi
17
+ requirement: &24307476 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *24307476
26
+ - !ruby/object:Gem::Dependency
27
+ name: open-uri
28
+ requirement: &24307212 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *24307212
37
+ - !ruby/object:Gem::Dependency
38
+ name: json
39
+ requirement: &24306960 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: *24306960
48
+ - !ruby/object:Gem::Dependency
49
+ name: fileutils
50
+ requirement: &24306696 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :runtime
57
+ prerelease: false
58
+ version_requirements: *24306696
59
+ - !ruby/object:Gem::Dependency
60
+ name: nokogiri
61
+ requirement: &24306444 !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ type: :runtime
68
+ prerelease: false
69
+ version_requirements: *24306444
70
+ - !ruby/object:Gem::Dependency
71
+ name: rubygems
72
+ requirement: &24306168 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: *24306168
81
+ - !ruby/object:Gem::Dependency
82
+ name: rbconfig
83
+ requirement: &24305904 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: *24305904
92
+ - !ruby/object:Gem::Dependency
93
+ name: yaml
94
+ requirement: &24305652 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ type: :runtime
101
+ prerelease: false
102
+ version_requirements: *24305652
103
+ - !ruby/object:Gem::Dependency
104
+ name: win32/sound
105
+ requirement: &24305376 !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ type: :runtime
112
+ prerelease: false
113
+ version_requirements: *24305376
114
+ - !ruby/object:Gem::Dependency
115
+ name: win32ole
116
+ requirement: &24305052 !ruby/object:Gem::Requirement
117
+ none: false
118
+ requirements:
119
+ - - ! '>='
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ type: :runtime
123
+ prerelease: false
124
+ version_requirements: *24305052
15
125
  description: Gem integrada com Google Speech e Google Translate
16
126
  email: henriqueutsch@gmail.com
17
127
  executables: []
18
128
  extensions: []
19
129
  extra_rdoc_files: []
20
130
  files:
21
- - test/eva_ia_robot_test.rb
22
- - eva_ia_robot/eva-ia-robot.rb
23
- - eva_ia_robot/eva-modulo.rb
24
- - eva_ia_robot/eva-pergunta.rb
25
- - eva_ia_robot/eva-resposta.rb
26
- - eva_ia_robot/libgomp-1.dll
27
- - eva_ia_robot/libltdl-7.dll
28
- - eva_ia_robot/libmad.dll
29
- - eva_ia_robot/libmp3lame.dll
30
- - eva_ia_robot/pthreadgc2.dll
31
- - eva_ia_robot/zlib1.dll
32
- - eva_ia_robot/eva.config
33
- - eva_ia_robot/play.exe
34
- - eva_ia_robot/rec.exe
35
- - eva_ia_robot/sox.exe
36
- - eva_ia_robot/wget.exe
37
- - Rakefile
131
+ - lib/eva_ia_robot/eva-ia-robot.rb
132
+ - lib/eva_ia_robot/eva-modulo.rb
133
+ - lib/eva_ia_robot/eva-pergunta.rb
134
+ - lib/eva_ia_robot/eva-resposta.rb
135
+ - tests/eva_ia_robot_test.rb
136
+ - lib/eva_ia_robot/libgomp-1.dll
137
+ - lib/eva_ia_robot/libltdl-7.dll
138
+ - lib/eva_ia_robot/libmad.dll
139
+ - lib/eva_ia_robot/libmp3lame.dll
140
+ - lib/eva_ia_robot/pthreadgc2.dll
141
+ - lib/eva_ia_robot/zlib1.dll
142
+ - lib/eva_ia_robot/eva.config
143
+ - lib/eva_ia_robot/play.exe
144
+ - lib/eva_ia_robot/rec.exe
145
+ - lib/eva_ia_robot/sox.exe
146
+ - lib/eva_ia_robot/wget.exe
147
+ - lib/eva_ia_robot/config.yml
148
+ - lib/Rakefile
38
149
  - eva_ia_robot.gemspec
39
150
  has_rdoc: true
40
151
  homepage: https://github.com/henriqueutsch/Eva-IA-Robot
@@ -1,86 +0,0 @@
1
- # encoding: utf-8
2
- # comandos.conf
3
- # documentar caminho completo
4
- # modulos do ruby para instalar basta abrir o prompt de comando e digitar "gem install [nome]" ex: "gem install win32ole"
5
- require "cgi"
6
- require 'open-uri'
7
- require 'json'
8
- require 'win32ole'
9
- require 'rbconfig'
10
- require 'fileutils'
11
-
12
-
13
- # carrega os arquivos .rb tentei com require mas não funcionou
14
- load 'eva-pergunta.rb'
15
- load 'eva-resposta.rb'
16
- load 'eva-modulo.rb'
17
-
18
- shell = WIN32OLE.new('Shell.Application')
19
- frase = ""
20
- feedback = true
21
- beep = true
22
- listacomandos = Array.new
23
- listaresposta = Array.new
24
- listaexecutar = Array.new
25
-
26
- File.open(Dir.pwd()+'/eva.config', 'r:utf-8') do |linha|
27
- while line = linha.gets
28
- # p line
29
- # p line.class
30
- # p line.index('#')
31
- # p line.index(':')
32
- # p line.index('=')
33
- # p line.size
34
- line.encoding
35
- comandos = line[line.index('#')+1..line.index(':')-1]
36
- resposta = line[line.index(':')+1..line.index('=>')-1]
37
- executar = line[line.index('=>')+2..line.size]
38
-
39
- comandos
40
- listacomandos << comandos.gsub('[','').gsub(']','')
41
- listaresposta << resposta.gsub('[','').gsub(']','')
42
- listaexecutar << executar.gsub('[','').gsub(']','').gsub('\n','')
43
-
44
- end
45
- end
46
- # puts listacomandos
47
- # puts listaresposta
48
- # puts listaexecutar
49
-
50
-
51
- # p listacomandos.index('abrir chrome')
52
- # p listaresposta[listacomandos.index('abrir chrome')]
53
-
54
-
55
- while frase !="sair" do
56
-
57
-
58
- begin
59
- p frase = pergunta(feedback,beep)
60
- rescue =>e
61
- puts e.message
62
- end
63
-
64
-
65
-
66
- if listacomandos.include? frase
67
-
68
- if listaexecutar[listacomandos.index(frase)].include? '%'
69
- p abrir = listaexecutar[listacomandos.index(frase)].gsub('%',"").gsub("\n",'')
70
- shell.ShellExecute(abrir, "", "", "open", 1)
71
- end
72
-
73
- if listaexecutar[listacomandos.index(frase)].include? '&'
74
- p fechar = listaexecutar[listacomandos.index(frase)].gsub('&',"").gsub("\n",'')
75
- system("taskkill /IM #{fechar}")
76
- end
77
-
78
- if listaresposta[listacomandos.index(frase)].include? '$'
79
- p executar = listaresposta[listacomandos.index(frase)].gsub('$',"")
80
- modulos(executar)
81
- else
82
- resposta(listaresposta[listacomandos.index(frase)])
83
- puts listaresposta[listacomandos.index(frase)]
84
- end
85
- end
86
- end