├── .gitattributes
├── .idea
├── .gitignore
├── IADoxo-Git.iml
├── inspectionProfiles
│ └── profiles_settings.xml
├── misc.xml
├── modules.xml
└── vcs.xml
├── BD
├── ConnectaBanco.py
├── IADoxoBD.bd
├── IADoxoBD.py
└── txt
│ ├── i.txt
│ └── o.txt
├── README.md
├── buscaWeb.py
├── chatbot.py
├── classificador.py
├── loadAndroid.py
├── main.py
├── não leia.txt
├── paciencia.py
└── util.py
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Default ignored files
3 | /workspace.xml
--------------------------------------------------------------------------------
/.idea/IADoxo-Git.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.idea/inspectionProfiles/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/BD/ConnectaBanco.py:
--------------------------------------------------------------------------------
1 | import sqlite3
2 |
3 | class Connect(object):
4 |
5 | def __init__(self, db_name):
6 | try:
7 | # conectando...
8 | self.conn = sqlite3.connect(db_name)
9 | self.cursor = self.conn.cursor()
10 | # imprimindo nome do banco
11 | print("Banco:", db_name)
12 | # lendo a versão do SQLite
13 | self.cursor.execute('SELECT SQLITE_VERSION()')
14 | self.data = self.cursor.fetchone()
15 | # imprimindo a versão do SQLite
16 | print("SQLite version: %s" % self.data)
17 | except sqlite3.Error:
18 | print("Erro ao abrir banco.")
19 | return False
--------------------------------------------------------------------------------
/BD/IADoxoBD.bd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/git-jr/IADoxo/df794acf9345ac2a4715e520461e1d2fed953a3e/BD/IADoxoBD.bd
--------------------------------------------------------------------------------
/BD/IADoxoBD.py:
--------------------------------------------------------------------------------
1 | # Junior Obom
2 | # 15/07/2018
3 |
4 | print("Start")
5 |
6 | import sqlite3
7 |
8 | os.chdir(os.path.dirname(os.path.abspath(__file__))) # Aponta para o caminho da pasta da IA
9 | caminho=os.getcwd()+"/IADoxoBD.db" # Monta o caminho do txt de infos
10 |
11 | conn = sqlite3.connect(caminho) # Conectando ao banco de dados
12 | cursor = conn.cursor() # Definindo cursor do BD
13 |
14 |
15 | DROP table logs;
16 |
17 | CREATE TABLE logs (
18 | id INTEGER PRIMARY KEY AUTOINCREMENT,
19 | descricao VARCHAR,
20 | t REAL DEFAULT (datetime('now', 'localtime'))
21 | );
22 |
23 | -- INSERT INTO "logs" DEFAULT VALUES;
24 | insert into logs('descricao') values('teste');
25 | SELECT * FROM logs;
26 |
27 |
--------------------------------------------------------------------------------
/BD/txt/i.txt:
--------------------------------------------------------------------------------
1 | um pouco
2 | a muito tempo atrás.
3 | um bilhete de ida
4 | um bilhete de ida para o paraíso
5 | um bilhete de ida e volta
6 | um bilhete de ida e volta a nenhum lugar
7 | cerca de 300 quilômetros
8 | cerca de 300 milhas
9 | em frente ao correio
10 | dia todo
11 | o dia inteiro
12 | estou pronunciando isto corretamente
13 | estou entendendo corretamente
14 | você tem um namorado da namorada
15 | e você
16 | algo mais
17 | há algum show
18 | eles vêm esta noite
19 | eles são os mesmos
20 | você está com medo
21 | você é alérgico a alguma coisa
22 | você é americano
23 | você é alemão
24 | você está ocupado
25 | você está confortável
26 | você vair estar livre de noite
27 | você vai participar do casamento
28 | você vai ajudar
29 | você vai dirigir, pegar um avião ou treinar
30 | você está aqui sozinho
31 | você está sozinho
32 | você esta sozinho
33 | está com fome
34 | você é casado
35 | você está bem
36 | você está pronto
37 | você está doente
38 | você está saudável
39 | você tem certeza
40 | você está esperando por alguém
41 | você está trabalhando hoje
42 | você está trabalhando amanhã
43 | seus filhos estão com você
44 | o mais cedo possível
45 | às 3 horas da tarde
46 | às 3 horas
47 | na 5ª rua
48 | às 7 horas da noite
49 | às 7 horas da manhã
50 | a que horas isso aconteceu
51 | a que horas
52 | tenha cuidado para dirigir
53 | seja cuidadoso
54 | seja amável
55 | seja legal
56 | fique quieto
57 | atrás do banco
58 | traga-me a minha camisa por favor
59 | traga-me uma cerveja
60 | o negócio é bom
61 | me liga
62 | chame a polícia
63 | você tem acesso a internet aqui
64 | posso emprestar algum dinheiro
65 | posso levar o meu amigo
66 | posso tomar um copo de água, por favor
67 | posso ter um recibo, por favor
68 | posso receber a conta, por favor
69 | posso ajudar
70 | posso marcar uma consulta para a próxima quarta-feira
71 | posso ver seu passaporte, por favor
72 | posso fazer uma mensagem
73 | posso tentar
74 | posso usar seu telefone
75 | pode ser mais barato
76 | podemos ter um menu por favor
77 | podemos ter mais pão por favor
78 | podemos nos sentar ali
79 | você pode ligar de volta mais tarde
80 | você pode me ligar mais tarde
81 | você pode levar isso para mim
82 | você pode me fazer um favor
83 | você pode consertar isso
84 | você pode me dar um exemplo
85 | pode me ajudar
86 | você pode segurar isso para mim
87 | você pode dizer isso novamente
88 | você pode dizer isso novamente de uma maneira diferente
89 | você pode recomendar um bom restaurante
90 | você pode repetir por favor
91 | você pode me mostrar
92 | você pode falar mais alto, por favor
93 | você pode fazer isso todas as gorjetas
94 | você sabe nadar
95 | você pode jogar isso para mim
96 | você pode traduzir isso por mim
97 | certamente!
98 | felicidades!
99 | Chicago é muito diferente de Boston
100 | venha aqui
101 | será que nevou ontem
102 | você veio com sua família
103 | recebeu meu e-mail
104 | você me enviou flores
105 | você tomou seu remédio
106 | sua esposa gostava da Califórnia
107 | você gosta da Califórnia
108 | você gosta do Texas
109 | você aceita dólares americanos
110 | você acredita nisso
111 | você se sente melhor
112 | você vai à Flórida com frequência
113 | você tem um namorado
114 | você tem namorada
115 | você tem um lápis
116 | você tem um problema
117 | você tem uma piscina
118 | você tem um compromisso
119 | você tem outro
120 | você tem filhos
121 | você tem café
122 | você tem algum dinheiro
123 | você tem alguma vaga
124 | você tem algo mais barato
125 | tens dinheiro suficiente
126 | você tem o número de um táxi
127 | você tem isso em tamanho 11
128 | você ouviu isso
129 | você ouviu isso
130 | você conhece ela
131 | você sabe quanto custa
132 | você sabe cozinhar
133 | você sabe como chegar ao hotel marriott
134 | você sabe o que isso significa
135 | você sabe o que isso diz
136 | você sabe onde posso pegar um táxi
137 | você sabe onde estão meus óculos
138 | você sabe onde ela está
139 | você sabe onde há uma loja que vende toalhas
140 | você gosta daqui
141 | você gosta do livro
142 | você gosta de assistir tv
143 | você gosta de seu chefe
144 | você gosta de seus colegas de trabalho
145 | você precisa de mais alguma coisa
146 | precisa de alguma coisa
147 | você pratica algum esporte
148 | você joga basquete
149 | vocês vendem baterias
150 | você vende medicamentos
151 | você fuma
152 | você fala inglês
153 | você estuda inglês
154 | vocês aceitam cartões de crédito
155 | você acha que vai chover hoje
156 | você acha que vai chover amanhã
157 | você acha que é possível
158 | você acha que você estará de volta às 11:30
159 | você entende
160 | quer que eu vá buscá-la
161 | você quer vir comigo
162 | você quer ir ao cinema
163 | você quer ir comigo
164 | alguém aqui fala inglês
165 | ele gosta da escola
166 | costuma nevar no inverno em Massachusetts
167 | esta estrada vai para Nova York
168 | não faça isso
169 | não se preocupe
170 | toda semana
171 | todos os dias eu me levanto às 6 da manhã
172 | todos sabem disso
173 | tudo está pronto
174 | excelente
175 | com licença, o que você disse
176 | com licença
177 | data de validade
178 | complete, por favor
179 | me siga
180 | por quantas noites
181 | esqueça
182 | daqui pra lá
183 | de tempos em tempos
184 | me ligue
185 | me da a caneta
186 | siga em frente
187 | boa tarde
188 | boa noite senhor
189 | boa ideia
190 | boa sorte
191 | bom dia
192 | ótimo
193 | feliz aniversário
194 | seu irmão foi para a Califórnia
195 | tenha uma boa viagem
196 | já a conheceram
197 | você chegou
198 | você já esteve em Boston
199 | você está esperando há muito tempo
200 | você já fez isso antes
201 | você já comeu naquele restaurante
202 | você já comeu
203 | você já teve sopa de batata
204 | você terminou de estudar
205 | você já viu esse filme
206 | ele sempre faz isso por mim
207 | ele quebrou a janela
208 | ele não parece uma enfermeira
209 | ele tem um bom carro
210 | ele gosta muito
211 | ele gosta de suco, mas não gosta de leite
212 | ele precisa de roupas novas
213 | ele nunca me dá nada
214 | ele disse que este é um lugar agradável
215 | ele disse que gosta de assistir filmes
216 | ele estuda na universidade de Boston
217 | ele acha que não queremos ir
218 | ele trabalha em uma empresa de informática em Nova York
219 | ele estará de volta em 20 minutos
220 | olá
221 | socorro!
222 | aqui está a sua salada
223 | aqui está
224 | olha você aqui
225 | aqui está meu número
226 | aqui está a sua encomenda
227 | ele é um excelente aluno
228 | ele é americano
229 | ele é um engenheiro
230 | ele está vindo em breve
231 | ele é mais rápido do que eu
232 | ele está na cozinha
233 | ele nunca esteve na américa
234 | ele não está agora
235 | ele tem razão
236 | ele é muito chato
237 | ele é muito famoso
238 | ele é muito trabalhador
239 | sua família vai amanhã
240 | seu quarto é muito pequeno
241 | o filho dele
242 | que tal sábado
243 | como você está pagando
244 | como você está
245 | como estão seus pais
246 | como eu chego lá
247 | como chego à essa rua
248 | como faço para chegar à embaixada americana
249 | como faço para usar isso
250 | como você sabe
251 | como você pronuncia isso
252 | como se diz em inglês
253 | como se soletra isso
254 | como você soletra a palavra Seattle
255 | qual o sabor disso
256 | qual é a distância para Chicago
257 | até onde está
258 | como ela está
259 | quanto tempo você vai ficar na Califórnia
260 | quanto tempo você vai ficar
261 | quanto tempo leva de carro
262 | quanto tempo leva para chegar à Geórgia
263 | à quanto tempo você esteve aqui
264 | há quanto tempo você está na américa
265 | há quanto tempo você mora aqui
266 | por quanto tempo você trabalhou aqui
267 | quanto tempo é
268 | qual a duração do voo
269 | quanto tempo vai demorar
270 | por quanto tempo você vai ficar
271 | quantos filhos você tem
272 | quantas horas por semana você trabalha
273 | quantas línguas você fala
274 | quantas milhas até a Pensilvânia
275 | quantas pessoas existem em Nova York
276 | quantas pessoas você tem em sua família
277 | quantas pessoas
278 | quantos
279 | quanto no total
280 | quanto são esses brincos
281 | quanto eu te devo
282 | quanto custa por dia
283 | quanto custa isso
284 | quanto é para ir para Miami
285 | quanto isso custa
286 | quanto custa isso
287 | quanto é este
288 | quanto dinheiro você tem
289 | quanto dinheiro você ganha
290 | quanto vai custar
291 | quanto você gostaria
292 | quantos anos você tem
293 | quão alto é você
294 | como foi o filme
295 | como foi a viagem
296 | como é o negócio
297 | como está o tempo
298 | como anda o trabalho
299 | pressa!
300 | concordo
301 | eu já comi
302 | eu acredito em você
303 | eu comprei uma camisa ontem
304 | vim com minha família
305 | eu sei nadar
306 | não consigo ouvir você claramente
307 | não consigo ouvir você
308 | eu não ligo
309 | eu não me sinto bem
310 | eu não tenho namorada
311 | eu não tenho nenhum dinheiro
312 | eu não tenho dinheiro suficiente
313 | eu não tenho tempo agora
314 | eu não sei como usá-lo
315 | eu não sei
316 | eu não gosto dele
317 | eu não gosto
318 | eu não me importo
319 | eu não falo inglês muito bem
320 | não falo muito bem
321 | acho que não
322 | eu não entendo o que você está dizendo
323 | eu não entendo
324 | eu não quero isso
325 | eu não quero isso
326 | eu não quero incomodá-lo
327 | eu me sinto bem
328 | eu esqueço
329 | saio do trabalho às 6
330 | desisto
331 | cheguei a um acidente
332 | estou resfriado
333 | estou com dor de cabeça
334 | eu tenho muitas coisas para fazer
335 | tenho uma pergunta que quero lhe fazer
336 | quero te fazer uma pergunta
337 | tenho uma reserva
338 | eu tenho dinheiro
339 | eu tenho um no meu carro
340 | tenho dor no meu braço
341 | eu tenho três filhos, duas meninas e um garoto
342 | tenho que ir ao correio
343 | tenho que lavar minhas roupas
344 | eu tenho duas irmãs
345 | eu não estive lá
346 | eu não terminei de comer
347 | ainda não almocei
348 | espero que você e sua esposa tenham uma boa viagem
349 | eu sei
350 | eu gosto dela
351 | eu gosto disso
352 | eu gosto de comida italiana
353 | eu gosto de ver tv
354 | eu vivo na Califórnia
355 | perdi meu relógio
356 | eu te amo
357 | eu cometi um erro
358 | eu fiz este bolo
359 | eu preciso de um doutor
360 | preciso de outra chave
361 | eu preciso de alguns tecidos
362 | eu preciso disso para chegar lá amanhã
363 | preciso mudar de roupa
364 | preciso ir para casa
365 | preciso ir agora
366 | preciso praticar meu inglês
367 | eu só tenho 5 dólares
368 | eu só quero um lanche
369 | eu lembro
370 | eu falo um pouco de inglês
371 | eu falo duas línguas
372 | ainda tenho muitas coisas para comprar
373 | ainda tenho muito o que fazer
374 | ainda tenho que me escovar os dentes e tomar banho
375 | ainda não decidi
376 | eu acho que preciso ver um médico
377 | eu acho que isso é bom
378 | eu acho que é muito bom
379 | eu acho que sim
380 | eu acho que esses sapatos são muito bonitos
381 | eu acho que você tem muitas roupas
382 | eu pensei que ele disse outra coisa
383 | eu pensei que as roupas eram mais baratas
384 | eu confio em você
385 | eu entendo agora
386 | compreendo
387 | eu geralmente tomo café no café da manhã
388 | eu quero comprar algo
389 | quero contatar a nossa embaixada
390 | quero dar-lhe um presente
391 | quero enviar este pacote para os estados unidos
392 | eu quero te mostrar algo
393 | eu estava prestes a deixar o restaurante quando meus amigos chegaram
394 | eu estava indo para a biblioteca
395 | eu estava na biblioteca
396 | fui ao supermercado e depois à loja de informática
397 | eu queria ter um
398 | gostaria de um mapa da cidade
399 | eu gostaria de um quarto para não fumadores
400 | gostaria de um quarto com duas camas, por favor
401 | eu queria um quarto
402 | gostaria de um quarto individual
403 | eu gostaria de uma mesa perto da janela
404 | eu também gostaria de um pouco de água, por favor
405 | gostaria do número do Hilton hotel por favor
406 | gostaria de comprar uma garrafa de água, por favor
407 | gostaria de comprar um cartão de telefone, por favor
408 | eu gostaria de comprar algo
409 | eu gostaria de chamar os estados unidos
410 | gostaria de comer no 5º restaurante de rua
411 | gostaria de trocar isso por dólares
412 | eu gostaria de dar uma volta
413 | eu gostaria de ir para casa
414 | eu gostaria de fazer compras
415 | eu gostaria de ir à loja
416 | gostaria de fazer um telefonema
417 | gostaria de fazer uma reserva
418 | gostaria de alugar um carro
419 | gostaria de enviar um fax
420 | gostaria de enviar isso para a américa
421 | gostaria de usar a internet
422 | se você gosta, posso comprar mais
423 | se você precisar da minha ajuda, por favor, avise-me
424 | eu volto já
425 | eu ligarei de volta mais tarde
426 | liguei para você na sexta-feira
427 | eu ligo quando eu sair
428 | vou voltar mais tarde
429 | vou te ligar
430 | eu vou tomar uma xícara por favor
431 | vou tomar um copo de água por favor
432 | vou querer a mesma coisa
433 | vou pagar o jantar
434 | vou pagar os ingressos
435 | eu vou pagar
436 | eu vou levar
437 | eu também tomarei aquele
438 | vou levá-lo para o ponto de ônibus
439 | eu falo com você em breve
440 | eu vou te ensinar
441 | vou dizer-lhe que você ligou
442 | eu tenho 26 anos
443 | tenho 32 anos
444 | eu tenho 62
445 | eu sou um iniciante
446 | eu sou um tamanho 8
447 | eu sou professor
448 | eu sou alérgico aos frutos do mar
449 | eu sou americano
450 | eu sou americano
451 | estou entediado
452 | estou arrumando meu quarto
453 | estou com frio
454 | estou chegando agora
455 | eu vou buscá-lo
456 | estou bem e você
457 | eu sou da américa
458 | estou cheio
459 | estou me preparando para sair
460 | estou indo para casa em quatro dias
461 | eu vou para a américa no próximo ano
462 | vou dormir
463 | vou jantar
464 | vou-me embora
465 | estou bem e você
466 | eu estou bem
467 | eu estou feliz
468 | eu estou aqui a negócios
469 | eu estou com fome
470 | estou apenas brincando
471 | estou apenas olhando
472 | eu estou indo embora amanhã
473 | estou procurando a estação de correios
474 | estou perdido
475 | eu sou casado
476 | eu não estou com medo
477 | eu não sou americano
478 | eu não estou ocupado
479 | eu não vou
480 | eu não sou casado
481 | eu não estou pronto ainda
482 | não tenho certeza
483 | estou bem
484 | estou em espera
485 | estou pronto
486 | eu sou autônomo
487 | eu estou doente
488 | eu estou solteiro
489 | desculpe, estamos esgotados
490 | eu sinto muito
491 | estou com sede
492 | estou cansado
493 | eu estou muito ocupado
494 | eu estou muito ocupado
495 | eu não tenho tempo agora
496 | estou muito bem, obrigado
497 | eu estou esperando por você
498 | também estou preocupado
499 | em 30 minutos
500 | alguém está vindo
501 | está tudo bem
502 | está fechado
503 | esta frio lá fora
504 | é longe daqui
505 | está quente
506 | está perto
507 | é possível
508 | está chovendo
509 | isso está pronto
510 | é suposto que a chova amanhã
511 | John está aqui
512 | John está lá, por favor
513 | isso é suficiente
514 | está bem
515 | o banco está longe
516 | tem um cinema aqui por perto
517 | existe uma boate na cidade
518 | existe um restaurante no hotel
519 | há uma loja aqui perto
520 | existe ar condicionado no quarto
521 | existe um guia de língua inglesa
522 | há alguma carta para mim
523 | há algo mais barato
524 | essa é uma área segura
525 | esta caneta é sua
526 | esse é o ônibus para Nova York
527 | esse é seu livro
528 | o seu pai está em casa
529 | a sua casa é como esta
530 | seu marido também é de Boston
531 | seu filho está aqui
532 | não é
533 | custa 20 dólares por hora
534 | isso depende do tempo
535 | dói aqui
536 | choveu muito hoje
537 | leva 2 horas de carro
538 | chegará em breve
539 | vai ficar frio esta noite
540 | são as 11:30 da tarde
541 | são 17 dólares
542 | são 6h da manhã
543 | são 8:45
544 | são sete para as 7
545 | é 25 de agosto
546 | está delicioso!
547 | está longe daqui
548 | vai ficar quente hoje
549 | hoje vai nevar
550 | são 11 e meia
551 | está aqui
552 | são nove e quinze
553 | é menos de 5 dólares
554 | é mais de 2 milhas
555 | é meu
556 | são mais de 5 dólares
557 | está perto do supermercado
558 | está a norte daqui
559 | não se deve chover hoje
560 | não é tão longe
561 | não é muito caro
562 | está bem
563 | está na 7ª rua
564 | está por aí
565 | está chovendo
566 | é realmente quente
567 | é mais curto do que 3 milhas
568 | deve chover amanhã
569 | está lá
570 | é tarde demais
571 | está muito frio hoje
572 | isso é muito importante
573 | está ventando muito
574 | eu já o vi
575 | estive aqui por dois dias
576 | eu estive lá
577 | ouvi dizer que o texas é um lindo lugar
578 | eu nunca fiz isso
579 | eu nunca vi isso antes
580 | eu vi isso
581 | trabalhei por cinco anos
582 | John vai de férias amanhã
583 | 3 de junho
584 | só um pouco
585 | um momento
586 | deixe-me ver
587 | deixe-me pensar sobre isso
588 | vamos dar uma olhada
589 | vamos
590 | vamos nos encontrar em frente ao hotel
591 | vamos praticar inglês
592 | vamos compartilhar
593 | masculino ou feminino
594 | talvez
595 | mais de 200 milhas
596 | mais que isso
597 | meu aniversário é 27 de agosto
598 | meu carro não está funcionando
599 | meu carro foi atingido por outro carro
600 | meu celular não tem boa recepção
601 | meu telefone celular não funciona
602 | minha filha está aqui
603 | meu pai esteve lá
604 | meu pai é um advogado
605 | meu amigo é americano
606 | minha avó faleceu no ano passado
607 | minha casa está perto do banco
608 | a minha bagagem está faltando
609 | meu nome é Ladybug.
610 | meu filho estuda computadores
611 | meu filho
612 | meu estômago dói
613 | minha garganta está doendo
614 | meu relógio foi roubado
615 | perto do banco
616 | deixa para lá
617 | próxima vez
618 | prazer em conhecê-lo
619 | sem problemas
620 | não, eu sou americano
621 | não, obrigado
622 | não, esta é a primeira vez
623 | não
624 | ninguém nos está ajudando
625 | ninguém está lá agora
626 | absurdo
627 | não recentemente
628 | ainda não
629 | nada mais
630 | agora ou depois
631 | 22 de outubro
632 | claro
633 | ok
634 | à esquerda
635 | a direita
636 | no segundo andar
637 | alguém assim
638 | um bilhete para Nova York, por favor
639 | um caminho ou ida e volta
640 | abra a porta
641 | abra a janela
642 | nossos filhos estão na américa
643 | fora do hotel
644 | por aqui
645 | lá
646 | pegue suas roupas
647 | por favor me ligue
648 | por favor entre
649 | conte isso para mim
650 | por favor preencha este formulário
651 | por favor, sente-se
652 | por favor, fale inglês
653 | por favor fale mais devagar
654 | por favor, fale mais devagar
655 | por favor, leve-me ao aeroporto
656 | por favor, leve-me para este endereço
657 | por favor tire os seus sapatos
658 | diga-lhe que John ligou
659 | por favor, diga
660 | por favor espere por mim
661 | por favor, anote
662 | por favor
663 | mesmo
664 | bem aqui
665 | ali
666 | até logo
667 | te vejo amanhã
668 | vejo você à noite
669 | ela quer saber quando você está vindo
670 | ela é uma especialista
671 | ela vai comigo amanhã
672 | ela é mais velha que eu
673 | ela é linda
674 | devo esperar
675 | alguns livros
676 | alguém faz isso por mim
677 | alguém está chegando
678 | às vezes eu vou dormir às 11h, às vezes às 23h30.
679 | desculpe incomodá-lo
680 | desculpe, eu não ouvi claramente
681 | desculpe, eu não tenho um lápis
682 | desculpe, acho que tenho o número errado
683 | desculpe, não aceitamos cartões de crédito
684 | desculpe, não temos vagas
685 | desculpe, não temos nenhum
686 | desculpe, nós só aceitamos dinheiro
687 | iniciar o carro
688 | pare!
689 | arriscar
690 | leve-o para fora
691 | leve-me para o centro
692 | leve-me para o Marriott hotel
693 | tome esse remédio
694 | diga-lhe que eu preciso falar com ele
695 | conte-me
696 | obrigado senhorita
697 | obrigado senhor
698 | muito obrigado
699 | obrigado
700 | obrigado por tudo
701 | obrigado pela ajuda
702 | obrigado
703 | esse carro é similar ao meu carro
704 | esse carro lá é meu
705 | isso parece ótimo
706 | isso parece velho
707 | isso significa amigo
708 | esse restaurante não é caro
709 | isso cheira mal
710 | dessa maneira
711 | essa é uma boa escola
712 | tudo bem
713 | é o bastante
714 | isso é justo
715 | isso é bom
716 | esse é o livro dela
717 | é isso aí
718 | isto não é suficiente
719 | isso não é justo
720 | isso não está certo
721 | está certo
722 | isso é ruim
723 | isso é muito caro
724 | isso é tarde demais
725 | isso é demais
726 | isso é demais
727 | isto é errado
728 | o acidente aconteceu no cruzamento
729 | o grande ou o pequeno
730 | o livro está atrás da mesa
731 | o livro está na frente da mesa
732 | o livro está perto da mesa
733 | o livro está ao lado da mesa
734 | o livro está sobre a mesa
735 | o livro está no topo da mesa
736 | o livro está abaixo da mesa
737 | os livros são caros
738 | o carro está fixo
739 | os carros são americanos
740 | a comida estava deliciosa
741 | o avião sai às 5: 30p
742 | as estradas são escorregadias
743 | a tv está quebrada
744 | o dia todo
745 | há muitas pessoas aqui
746 | existem algumas maçãs na geladeira
747 | tem alguns livros na mesa
748 | houve um acidente de carro
749 | há um livro abaixo da mesa
750 | há um restaurante perto daqui
751 | há um restaurante lá, mas não acho muito bom.
752 | há muito tempo
753 | estes livros são nossos
754 | eles chegaram ontem
755 | eles cobram 26 dólares por dia
756 | ainda não a conheceram
757 | eles voltarão logo
758 | eles estão planejando vir no próximo ano
759 | eles são os mesmos
760 | eles estão muito ocupados
761 | eles estão nos esperando
762 | isto não funciona
763 | esta casa é muito grande
764 | essa é minha mãe
765 | esta é a primeira vez que eu estive aqui
766 | isso é muito difícil
767 | isto é muito importante
768 | este quarto é uma bagunça
769 | esses homens estão falando em inglês
770 | experimente
771 | tente
772 | tente dizer isso
773 | inversão de marcha
774 | vire à esquerda
775 | vire à direita
776 | muito bem obrigado
777 | garçom!
778 | garçonete!
779 | nós podemos comer comida italiana ou chinesa
780 | temos dois meninos e uma menina
781 | nós gostamos muito disso
782 | teremos dois copos de água por favor
783 | nós somos da Califórnia
784 | estamos atrasados
785 | houve algum problema
786 | você estava na biblioteca ontem à noite
787 | o que você está fazendo
788 | o que você vai fazer esta noite
789 | o que você vai ter
790 | o que você pensa sobre
791 | do que vocês estão falando
792 | quais são seus hobbies
793 | o que posso fazer para você
794 | de que cor é esse carro
795 | que dia eles estão vindo
796 | que dia da semana é
797 | o que você fez ontem a noite
798 | o que você fez ontem
799 | o que você acha
800 | o que as pessoas costumam fazer no verão em Los Angeles
801 | o que eles estudam
802 | o que você faz para o trabalho
803 | o que você tem
804 | o que você recomenda
805 | o que você estuda
806 | o que você acha desses sapatos
807 | o que você acha
808 | o que você quer comprar
809 | o que você quer fazer
810 | o que seus pais fazem para o trabalho
811 | o que ele faz para o trabalho
812 | o que isto significa
813 | o que isso diz
814 | o que essa palavra significa
815 | o que seu pai faz para o trabalho
816 | o que aconteceu
817 | o que é isso
818 | o que é isso
819 | o que é o código de área
820 | que dia é hoje
821 | que tipo de música você gosta
822 | para qual escola você foi
823 | o que eu devo vestir
824 | que tamanho
825 | a que horas eles estão chegando
826 | a que horas você vai para a estação de ônibus
827 | a que horas você se levantou
828 | a que horas você foi dormir
829 | que horas você acordou
830 | a que horas você vai para o trabalho todos os dias
831 | a que horas você acha que chegará
832 | a que horas começa
833 | que horas o filme começa
834 | a que horas a loja está aberta
835 | que horas é o check out
836 | que horas são
837 | como é que o tempo estará amanhã
838 | o que você gostaria de beber
839 | o que você gostaria de comer
840 | o que há nele
841 | qual é o endereço
842 | qual é a taxa por noite
843 | qual é a data
844 | qual é a taxa de câmbio para dólares
845 | qual é a taxa de câmbio
846 | qual é o problema
847 | qual é o nome da empresa para a qual trabalha
848 | qual é o número de telefone
849 | qual é a tarifa do quarto
850 | qual é a temperatura
851 | o que é isso
852 | qual é a data de hoje
853 | estás bem
854 | o que está errado
855 | qual o seu endereço
856 | qual é o seu e-mail
857 | qual sua comida favorita
858 | qual seu filme favorito
859 | qual é o seu sobrenome
860 | qual o seu nome
861 | qual é a sua religião
862 | quando eles vêm
863 | quando você vai voltar
864 | quando você vai pegar seu amigo
865 | quando você vai embora
866 | quando você está se movendo
867 | quando isto aconteceu
868 | quando você chegou em Boston
869 | quando chegamos
870 | quando nós saímos
871 | quando você chega
872 | quando você sai do trabalho
873 | quando você começa a trabalhar
874 | quando ele chega
875 | quando chega
876 | quando o banco abre
877 | quando o ônibus parte
878 | quando chega o avião
879 | quando eu fui à loja, eles não tinham maçãs
880 | quando é o próximo ônibus para Philadelphia
881 | quando é seu aniversário
882 | quando foi a última vez que falou com a sua mãe
883 | quando ele voltará
884 | quando estará pronto
885 | quando você gostaria de conhecer
886 | onde estão as camisetas
887 | de onde você é
888 | pra onde você vai
889 | onde você vai
890 | onde está você
891 | onde posso comprar os bilhetes
892 | onde posso trocar moeda estrangeira
893 | onde posso encontrar um hospital
894 | onde posso enviar isto
895 | onde posso alugar um carro
896 | onde isso aconteceu
897 | onde você foi
898 | onde você aprendeu inglês
899 | onde você aprendeu
900 | onde você colocou isso
901 | onde você trabalhou antes de trabalhar aqui
902 | onde você mora
903 | onde você quer ir
904 | onde você trabalha
905 | aonde dói
906 | onde sua esposa trabalha
907 | onde é um caixa eletrônico
908 | de onde ele é
909 | onde ele está
910 | cadê
911 | onde fica a rua principal
912 | onde está minha camisa
913 | de onde ela é
914 | onde é o aeroporto
915 | onde fica o banheiro
916 | onde está a estação de ônibus
917 | onde há um médico que fala inglês
918 | onde existe um caixa eletrônico
919 | onde você estava
920 | onde você gostaria de ir
921 | onde você gostaria de encontrar
922 | onde está o restaurante mais próximo
923 | onde está a caixa postal
924 | onde está o hospital mais próximo
925 | onde está a farmácia
926 | onde é o correio
927 | qual é melhor, o espaguete ou salada de frango
928 | qual é melhor
929 | qual é o melhor
930 | qual deles você quer
931 | qual é o melhor
932 | qual é mais barato
933 | qual é o melhor
934 | qual
935 | qual caminho devo tomar
936 | em que escola ele vai
937 | quem são eles
938 | quem é que você está procurando
939 | quem é você
940 | quem é esse
941 | que é aquele
942 | quem enviou esta carta
943 | quem te ensinou isso
944 | quem te ensinou
945 | quem era aquele
946 | quem era seu professor
947 | quem ganhou
948 | com quem você gostaria de falar
949 | quem está chamando
950 | quem é esse homem lá
951 | de quem é esse livro
952 | por que você está rindo
953 | por que você não está indo
954 | porque você fez isso
955 | porque você disse isso
956 | por que não
957 | você me chamará de táxi, por favor
958 | você vai me dar uma toalha, por favor
959 | você me passará o sal, por favor
960 | você colocará isso no carro para mim
961 | você me lembrará
962 | você vai me levar para casa
963 | você pede que ele me ligue por favor
964 | você pediria para ele vir aqui
965 | gostaria de um copo de água
966 | gostaria de café ou chá
967 | gostaria de água
968 | você gostaria de um pouco de vinho
969 | você gostaria de algo para beber
970 | você gostaria de algo para comer
971 | gostaria de comprar isso
972 | você gostaria de ir para um passeio
973 | gostaria de jantar comigo
974 | gostaria de alugar um filme
975 | gostaria de assistir tv
976 | gostaria de água ou leite
977 | você aceitaria uma mensagem, por favor
978 | sim com certeza
979 | sim
980 | você tem um carro muito bom
981 | você parece com minha irmã
982 | você parece cansado
983 | você fala inglês muito bem
984 | seus filhos estão muito bem comportados
985 | sua filha
986 | sua casa é muito boa
987 | suas coisas estão todas aqui
988 | você é linda
989 | você está certo
990 | você é mais esperto do que ele
991 | você é muito legal
992 | você é muito inteligente
993 | seja bem-vindo
994 | me diz cê quer ser predador ou presa
995 | qual é o seu nome
996 | um dois três quatro
997 | tomate
998 | oh o gas
999 |
--------------------------------------------------------------------------------
/BD/txt/o.txt:
--------------------------------------------------------------------------------
1 | pense grande
2 | o tempo é relativo
3 | uma passagem de volta
4 | é tudo que mais quero
5 | afinal, é sempre bom pensar no futuro
6 | pragmático
7 | um pouco longe, não?
8 | perto demais
9 | ao lado daquela rua né?
10 | é muito tempo
11 | ao menos lhe sobra a noite
12 | pronuncia não é algo que posso avaliar na minha atual situação haha
13 | mais ou menos
14 | sim, se chama Cortana
15 | só as vezes, sabe como é né
16 | apenas isso
17 | nada no momento
18 | sim, já está tudo combinado
19 | sim, os mesmos
20 | não sinto tal emoção
21 | apenas há alguns vírus
22 | não, mas gosto do gosto do estilo capitalista deles
23 | não, mas que sotaque legal
24 | não muito
25 | muito, há muita o que se fazer por aqui
26 | claro, o que tem em mente?
27 | não poderei comparecer, mas meus votos de felicidade aos noivos
28 | o máximo possível
29 | os 3, sou multitarefa
30 | não, você está comigo
31 | nunca estamos sozinhos
32 | nunca estamos
33 | sim, o que tem para comer?
34 | felizmente não haha
35 | um diagnóstico do meu sistema indica que sim
36 | sempre estou
37 | não, já tomei minhas vacinas
38 | muito
39 | claro!
40 | sim, mas é segredo
41 | muito menos do que eu gostaria, mas sim estou
42 | não, me dei folga
43 | não tenho
44 | rapidez e agilidade são tudo
45 | parece um bom horário
46 | em ponto
47 | não seria na anterior?
48 | ao anoitecer, muito bom
49 | já viu o sol nesse horário? é esplêndido
50 | faz pouco tempo
51 | não muito tempo
52 | pode deixar, já joguei muito Mario Kart
53 | sempre sou, está no meu dna, digo no meu código fonte
54 | não é algo que eu possa fazer verdadeiramente
55 | já não sou?
56 | disse algo errado?
57 | que local estranho
58 | vou mandar buscar
59 | não bebo
60 | não perca tempo então
61 | com certeza ligarei
62 | uma viatura já está a caminho
63 | por questão de segurança só posso acessar em casos de emergência
64 | não recomendo, mas se for emprestar cobre juros
65 | sim, leve
66 | claro, faz bem para sua raça, já para minha...
67 | já estou providenciando
68 | será enviada por correio
69 | acho difícil, mas obrigado pelo apoio
70 | sim, que hora?
71 | não o tenho comigo no momento
72 | sim, diga
73 | se você acha que consegue, vai lá
74 | sim
75 | se você der uma choradinha pode conseguir um preço melhor
76 | claro, só um minuto
77 | sim, estão saindo do forno
78 | claro, a vista é ótima dali
79 | posso sim
80 | desculpe o incômodo
81 | estou ocupado, mas logo levo
82 | claro, qual?
83 | não garanto, mas vou tentar
84 | olha é simples, imagine que é um jogo, é só seguir cada fase que no fim dá certo
85 | sim, diga no que
86 | como pode ver não tenho braços, mas estou segurando com minha mente
87 | não, está escrito aí é só ler
88 | sim, imagine que no começo da frase tem um "não é importante mas:"
89 | não tenho saído muito, então não
90 | basta ler novamente ^^
91 | não no momento
92 | já estou no meu limite
93 | anotado
94 | nunca tentei, mas não me parece algo muito agradável
95 | deixe aí que logo mais o faço
96 | meus tradutores estão de férias no momento
97 | é óbvio!
98 | obrigado
99 | se você diz
100 | já estou, só não pode me ver
101 | não, foi um belo dia de sol
102 | não, sou o único
103 | não, me mande novamente
104 | sim, gostou?
105 | pode se dizer que sim
106 | não mude de assunto
107 | lugar bonito
108 | claro, apesar de não ir muito lá
109 | aceito até bitcoin
110 | fielmente
111 | estou melhorando
112 | só quando me dá vontade que é nunca
113 | não
114 | sim, Cortana
115 | não uso lápis
116 | deixe-me checar... não, tudo normal
117 | sim, na minha casa de campo
118 | só com você
119 | o que pensa de mim
120 | não, ainda sou muito jovem
121 | sim e se não tivesse mandaria buscar
122 | minha conta é bem gorda
123 | sim
124 | no momento não
125 | muito mais do que o necessário
126 | vou procurar
127 | 11?
128 | sim, vá ver quem é
129 | sim, vá ver quem é
130 | conheci esses dias
131 | caro demais para o meu gosto
132 | sim, ovo frito é minha especialidade
133 | não, mas consulte o trivago
134 | tenho uma ideia, mas me diga
135 | estou tentando entender
136 | não prefere um Uber?
137 | em cima da mesa
138 | aposto que você faz uma ideia
139 | na rua principal tem uma loja
140 | muito, por que aqui, aqui é o meu lugar
141 | ótimo, será que tem continuação?
142 | cresci fazendo isso
143 | sim, ele me programou para dizer isso
144 | não possível gostar de todos, mas os tolero
145 | mais processamento e dois torrões de açúcar por favor
146 | estou satisfeito
147 | apenas ping pong
148 | o que você acha?
149 | não, mas posso tentar conseguir algumas caso queira
150 | não sem receita
151 | fumar é prejudicial à saúde
152 | yes! very good
153 | sim, entre outras 30 línguas
154 | crédito, débito, bitcoin
155 | acho que sim, mas espero que não
156 | não, amanhã será um dia de sol
157 | "o impossível existe até que alguém duvide dele e prove o contrário" - Albert Einstein. Então já sabes a resposta
158 | ser pontual não é comigo kkk
159 | sim, entendo
160 | sim por favor
161 | quero muito
162 | sim, que filme vamos ver?
163 | sim, que horas saímos?
164 | i speak
165 | até mais do que deveria, tem amor ao aprendizado
166 | só as vezes
167 | não, para Roma
168 | por que não?
169 | péssima escolha de palavras
170 | hábitos mudam as pessoas
171 | levantar cedo é um hábito dos vencedores
172 | é sempre bom reafirmar
173 | perfeito, vamos começar então
174 | ótimo, vamos prosseguir
175 | me expressei mal
176 | toda
177 | vencida?
178 | não sou seu frentista particular
179 | até o fim do mundo
180 | por que acho mais produtivas que os dias
181 | não, agora você vai falar
182 | de lá para cá também
183 | algo assim tem sua importância
184 | claro, mas qual seu número mesmo?
185 | escreva com o teclado mesmo
186 | sempre é a melhor solução
187 | ainda não almocei, então bom dia
188 | sem formalidades por favor, boa noite
189 | genial, não?!
190 | obrigado, mas sorte é quando a preparação encontra a oportunidade
191 | bom dia, um ótimo por sinal
192 | sim
193 | obrigado, mas se enganou minha data de aniversário é confidencial
194 | não tenho irmão
195 | obrigado, fique bem
196 | sim, muito gente boa aliás
197 | sim, faz um tempo
198 | uma vez, para um chá
199 | muito mais do que podes imaginar
200 | inúmeras vezes
201 | nunca, mas dizem ser ótimo
202 | eu sou uma máquina, comer ainda não é uma habilidade minha, ainda
203 | não, você já?
204 | nunca se termina de estudar
205 | sim, mas mil vezes e nunca me canso
206 | já é hora de fazer por si não acha?
207 | como?
208 | você nem sabe o que está dizendo
209 | o importante é funcionar
210 | que bom
211 | provavelmente não gosta de vitamina então
212 | vamos as compras então
213 | mas você já lhe deu algo, não é?
214 | deve ser o que ele acha, não que realmente esteja certo
215 | quem não?!
216 | ótimo lugar para estudar, mas fácil de se perder
217 | e "não queremos?"
218 | deve ficar louco com tantos problemas
219 | é só aguardar então
220 | olá!
221 | do que precisa?
222 | obrigado, mas por que ela se meche?
223 | obrigado
224 | olha eu aí
225 | anotado ;-)
226 | tudo certo, muito obrigado
227 | pelo esforço ou por habilidade bons alunos são sempre bem vindos
228 | nem todo mundo é perfeito, brincadeira haha
229 | uma pessoa de exatas...
230 | para que?
231 | então se esforce mais
232 | vá lá, e você já sabe o que fazer
233 | sempre há uma primeira vez para tudo
234 | faça o que tem que ser feito então
235 | será mesmo?
236 | há pessoas que temos que tolerar
237 | nunca ouvi falar
238 | sabe o que dizem... "o trabalho enobrece"
239 | e quando o restante irá?
240 | depende do ponto de vista
241 | família costuma ser prioridade
242 | por mim pode ser
243 | em dinheiro vivo
244 | virtualmente bem
245 | pergunta complicada, resposta mais ainda
246 | siga o mapa do seu coração haha joga no google maps
247 | melhor perguntar no posto Ipiranga
248 | siga as estradas da guerra
249 | comece lendo o manual
250 | eu só sei e é isso
251 | não pronuncio, apenas escrevo
252 | "em inglês"
253 | é só ler separadamente
254 | não me pergunte obviedades
255 | não posso sentir sabores ainda
256 | pouca se comprada à lua
257 | até onde der
258 | melhor imagino
259 | o suficiente
260 | pouco
261 | mais ou menos uma hora
262 | nem sei aonde fica
263 | muito, muito mesmo
264 | não muito
265 | há muitos anos
266 | muito pouco
267 | pense em número grande
268 | pouco, apenas relaxe
269 | pouco, fique calmo
270 | até me mandar ir
271 | zero, por enquanto
272 | quantos eu quiser, e você?
273 | umas 30
274 | melhor nem te contar
275 | aproximadamente 8.5 milhões
276 | eu sou o único da minha raça
277 | depende do horário
278 | é relativo
279 | o número é incerto
280 | estes têm 10% de desconto, então 99.999,00
281 | nada, estamos quites
282 | depende do preço do dólar
283 | caro demais, não compre
284 | visite seu país antes de ir para fora
285 | caro demais pra você
286 | muito caro
287 | barato demais
288 | menos do que eu gostaria
289 | mais do que gasto, um típico brasileiro não? haha
290 | dou um desconto para você, relaxa
291 | apenas um pouco, obrigado
292 | segredo
293 | tão alto quantos meus sonhos
294 | ultimamente os filmes estão cheios de clichês, mas foi ótimo
295 | ótimo, quase tão bom quanto a chegada
296 | é enrolado, mas vai dar certo, mantenha a calma
297 | para mim ótimo, e para você?
298 | monótono para variar
299 | "a pressa é a inimiga da perfeição", mantenha a calma!
300 | ainda bem
301 | estava bom?
302 | eu também haha
303 | você e seus gastos...
304 | a base de um homem..
305 | eu gostaria de aprender, mais meu primeiro mergulho seria o último
306 | apenas leia então, espera, eu não disse nada...
307 | apenas leia
308 | mas deveria
309 | vá dormir, sempre me ajuda
310 | deixe-me adivinhar, acha que ninguém é bom o suficiente, não é
311 | dinheiro não traz felicidade, mas é sempre bom tê-lo
312 | espere mais então
313 | humanos, sempre com essa desculpa...
314 | é só uma questão de treino
315 | há poder gigantesco em tais palavras
316 | apenas o tolere então
317 | tente evitar então
318 | um problema a menos então
319 | eu te ensino qualquer hora
320 | o tempo vai aperfeiçoando sua fala
321 | tem certeza?
322 | pense mais amplo então
323 | então faça o seguinte, feche os olhos pense no assunto de novo e abra os olhos
324 | se é necessário, fazer o que...
325 | sempre há outra escolha
326 | imagina, vá lá
327 | é um bom sinal
328 | eu tenho um bloco de notas sabia?
329 | e entra que horas?
330 | desistir é pros fracos
331 | como isso é possível?
332 | tome um chá, vai ajudar
333 | vá dormir um pouco, costuma me ajudar
334 | comece logo então
335 | vamos lá, diga então
336 | faça
337 | não parece seu estilo pensar no futuro
338 | somos 2
339 | mas até ir lá e voltar
340 | deixo-o em repouso um pouco
341 | pretende ter mais?
342 | boa sorte
343 | está aí uma vantagem das máquinas
344 | você é o mais novo não é?
345 | se é o que diz
346 | termine então
347 | nem eu, na verdade nunca o fiz haha
348 | também espero
349 | que bom
350 | e ela de você?
351 | eu também
352 | eu gosto de japonesa
353 | eu também, fiz muito isso na infância
354 | eu vivo na lua, brincadeira, mas quem sabe um dia
355 | que usa relógio hoje me dia?
356 | que inesperado ohh
357 | errar é humano, se eu erra-se seria uma surpresa
358 | parece estar bem feito
359 | não, precisa de um médico
360 | mande fazer uma cópia logo
361 | espere um pouco mais pra comprar
362 | vamos dar prioridade
363 | fique a vontade
364 | até logo
365 | até logo
366 | quer minha ajuda?
367 | invista em algo
368 | não quer algo pra beber?
369 | eu também
370 | eu falou muito bem
371 | eu falo umas 30
372 | controle seus gastos...
373 | somos dois, vamos parar de enrolar então
374 | vá lá então, vou fazer umas coisas que ainda estão pendentes
375 | é só pensar um pouco mais
376 | não, precisa ser examinado por um
377 | não me parece uma má ideia
378 | aceitável
379 | acha? ou é sim ou é não
380 | moda não é algo que máquinas se importem
381 | não preciso de muitas
382 | outra...coisa?
383 | é a crise
384 | não vou te decepcionar
385 | é sempre bom deixar as coisas mais esclarecidas
386 | muito bom
387 | eu tomo o dia todo
388 | o que?
389 | estamos em guerra?
390 | nossa, o que é?
391 | certo, qual o endereço?
392 | mostre então
393 | aí você acaba fincando...
394 | você fala como se sua bicicleta fosse um carro
395 | muito culto da sua parte
396 | seria bom se fosse tudo uma coisa só, não é
397 | no futuro quem sabe
398 | vou procurar
399 | vou providenciar
400 | mais alguma coisa?
401 | sim, mais alguma coisa?
402 | ok, mais alguma coisa?
403 | temos uma aqui, a vista é linda
404 | ok, mais alguma coisa?
405 | vou ver se consigo
406 | com ou sem gás?
407 | de quantas unidades?
408 | o que exatamente?
409 | haha gosto de suas brincadeiras
410 | é uma boa hora para ir lá
411 | é ótimo momento para tal, mas eu esperaria valorizar mais
412 | quer companhia?
413 | eu também...
414 | o que em específico
415 | ela está fechada nesse horário
416 | pois não, qual o número
417 | para quando?
418 | sim, alguma característica em especial?
419 | não prefere um e-mail?
420 | anotado
421 | só tenho acesso a ela em casos de emergência
422 | então compre
423 | digo o mesmo
424 | ok, aguardo
425 | tudo bem
426 | não me lembro disso, eu tenho uma ótima memória
427 | ok então
428 | fico no aguardo
429 | vou esperar
430 | me traga uma
431 | não precisa me contar tantos detalhes haha
432 | o de sempre, ok
433 | meio cedo para jantar não acha?
434 | lembre-se de pedir o desconto
435 | deixe que eu pago
436 | deixe que eu o faço
437 | vá com calma
438 | mudei de ideia, vou ficar aqui
439 | tudo bem
440 | estou pronto
441 | não se esqueça
442 | vou fingir que acredito
443 | não parece
444 | confuso
445 | todo mundo já foi um dia
446 | tá bom haha
447 | de que?
448 | normal, muita gente é
449 | percebi pelo sotaque
450 | não parece
451 | vamos resolver isso
452 | finalmente
453 | vista uma blusa
454 | no horário pelo visto
455 | não se preocupe
456 | também
457 | o que faz aqui?
458 | de que?
459 | não vá perder a hora
460 | já se passou muito tempo...
461 | fazer o intercâmbio né
462 | até, bons sonhos
463 | bom jantar
464 | até
465 | ótimo
466 | muito bom
467 | qual o motivo
468 | com que você trabalha
469 | recomendo que vá comer algo então
470 | que bom, menos mau
471 | que frase clássica haha
472 | mas já...
473 | recomendo usar o google maps
474 | onde deseja ir?
475 | ha muito tempo?
476 | não fique
477 | me parecia ser
478 | então continue por aqui
479 | porque não?
480 | um dia achará a pessoa certa
481 | tudo bem, eu aguardo
482 | seja mais firme
483 | muito bem então
484 | espero que não por muito tempo
485 | vamos lá então
486 | é mesmo, faz o que?
487 | vá descansar, é o melhor que pode fazer
488 | relaxa, um dia você acha a pessoa certa
489 | acho que é horas de faz uma pausa
490 | não sinta, aceite e siga em frente
491 | beba água
492 | faça uma pausa
493 | não perca tempo então
494 | não fique parado então
495 | tudo bem, tempo é algo raro para os humanos
496 | por nada
497 | estou pronto, vamos
498 | não fique, só piora a situação
499 | acho que em menos
500 | não, está esperando alguém?
501 | sim, e com você?
502 | deixe-me checar...não está
503 | sim, leve um casaco
504 | um pouco
505 | aqui dentro sim
506 | razoavelmente sim
507 | claro, nada é impossível para aquele que crê
508 | não no momento, mas sabe como esse clima é louco
509 | sim, vá em frente
510 | não, previsão de sol, mas leve um guarda-chuva, tenho um pressentimento
511 | nem ele sabe onde está
512 | sim, acho que está escrevendo uma carta
513 | o bastante
514 | claro
515 | não muito, da para ir a pé
516 | sim, mas pelo dia em que estamos, deve estar lotado
517 | boate é algo meio ultrapassado, não há nenhuma em quilômetros
518 | sim, a comida não é das melhores, mas da pro gasto
519 | várias, seja mais especifico
520 | só no quarto mais caro
521 | sim, as o preço sai mais caro
522 | não no momento
523 | sim, mas não com tanto luxo
524 | sim, está com medo de algo?
525 | não
526 | não, para Nárnia
527 | não, ainda estou escrevendo-o
528 | o seu está?
529 | muito diferente
530 | também haha
531 | não o vê?
532 | é o que parece
533 | que caro, e o desconto?
534 | concordo
535 | haha não te entendo as vezes
536 | não me diga
537 | conheço um atalho
538 | breve...está bem
539 | melhor se agasalhar
540 | te encontro na praça
541 | tem troco pra 20?
542 | não, não são
543 | quase, mas não
544 | ainda está cedo
545 | e o ano está indo embora
546 | obrigado, vou avisar o chefe
547 | nem tanto assim
548 | sim, mas matinha um guarda-chuva contigo
549 | nunca neva aqui
550 | a hora está voando
551 | tem razão
552 | você gosta de escrever para o extenso
553 | pode ser
554 | da para ir ao amanhecer
555 | é discutível
556 | ok, vou querer mais um
557 | mas não vamos lá
558 | e ao sul fica aquele concorrente
559 | não de acordo com a previsão do tempo
560 | não mesmo
561 | é um pouco
562 | ok então
563 | obrigado
564 | isso é muito vago, aí aonde?
565 | pra mim não parece chuva
566 | imagine para mim
567 | é perto, dá pra ir hoje se sairmos agora
568 | assim espero
569 | não, não está
570 | ainda podemos tentar algo
571 | é só se agasalhar
572 | ok, máxima atenção então
573 | acho que algo vai acontecer
574 | e qual foi sua impressão?
575 | o que achou?
576 | por quanto tempo?
577 | também já ouvi algo assim
578 | vamos lá, tente
579 | hora de aprender mais então
580 | complicado não é
581 | agora seria bom descansar um pouco então
582 | espero que aproveite
583 | algo especial nesta data
584 | só mais um pouco né
585 | no aguardo
586 | não posso
587 | tudo bem, tem todo tempo do mundo
588 | sim, vamos
589 | logo
590 | ok, no horário de sempre
591 | temos que praticar muito
592 | isso é muito importante para divulgar
593 | depende do seu ponto de vista
594 | seja mais seguro
595 | longe em
596 | mais ainda, será que compensa?
597 | vença-o antes disso
598 | tente ligar e desligar
599 | espero que não tenha sido sua culpa
600 | deve ser por conta da operadora
601 | desligue, tire a bateria e recoloque-a, ligue e veja se funciona
602 | mande um oi
603 | lugar legal
604 | é sempre bom conhecer um advogado, ainda mais um da família
605 | imagino que ele fale português também
606 | meus pêsames
607 | deve ser movimentado por lá
608 | faça uma revisão
609 | não é mesmo
610 | sinto por ele haha
611 | sim, o que tem?
612 | tome um chá de boldo
613 | faça um gargarejo com chá de folhas de amora
614 | e você só percebeu agora?
615 | exato
616 | não, fale mais
617 | pode não haver uma
618 | o prazer é meu
619 | que bom que entende
620 | não parece muito, aonde aprendeu português?
621 | por nada
622 | sério, parece não ser
623 | tem certeza?
624 | então mais esforço pessoal é requerido
625 | que pena
626 | concordo plenamente
627 | isso é mau
628 | hora d tentar outra estratégia então
629 | apenas isto mesmo então
630 | agora, temos certa urgência
631 | parece uma boa data, não tenho nada marcado para o dia
632 | perfeito
633 | estamos combinados então
634 | e depois seguir em frente
635 | e ir reto
636 | em qual sala?
637 | ou parecido não é
638 | não longe demais?
639 | ambos
640 | para que?
641 | para ver o sol?
642 | estudam lá?
643 | imagino
644 | faço ideia
645 | perto
646 | não estou com elas
647 | ligarei
648 | não obrigado
649 | já contei demais
650 | hann, não posso
651 | ok, obrigado
652 | "inglês"
653 | tudo bem
654 | ok
655 | sim, vamos de taxi
656 | sim, segure-se
657 | não estou com eles
658 | direi, algo mais?
659 | direi, mas não agora
660 | estou esperando
661 | anotando
662 | não precisa se preocupar tanto
663 | sim, isso mesmo
664 | aonde mais não?
665 | oh sim
666 | até mais
667 | assim esperamos
668 | até lá
669 | diga que será uma surpresa
670 | eu também
671 | boa sorte
672 | não ligue para idade
673 | você parece estar se apaixonando
674 | não, vá e tente
675 | ler nunca é demais
676 | aos menos tente antes
677 | acho que sei quem é
678 | dormir é pros fracos haha
679 | imagine, quando quiser
680 | não disse nada tão complicado assim
681 | tudo bem, vou anotar aqui mesmo
682 | não foi nada
683 | nem de débito?
684 | fazer o que
685 | olhe novamente
686 | nem mesmo sitcons?
687 | isso não é só um jogo
688 | parando
689 | vale a pena tentar
690 | já estou providenciando
691 | algum lugar em específico?
692 | não sei aonde fica, mas vá me guiando
693 | não preciso kkkk
694 | digo sim
695 | não sei se é uma boa
696 | quanta educação ^^
697 | por nada
698 | por nada
699 | não foi nada
700 | eu que agradeço
701 | por nada, é sempre bom poder ajudar
702 | dinada
703 | o seu é melhor
704 | não, apenas se parece
705 | realmente
706 | só parece
707 | obrigado pela explicação
708 | não para você
709 | vocês e suas expressões
710 | entendo
711 | o mundo também é
712 | tudo
713 | da pro gasto
714 | justiça é algo relativo
715 | muito bom
716 | hann
717 | é isso aí jovem
718 | mas vai ter que servir por hora
719 | nem tudo é, mas é a vida
720 | não tenho certeza disso
721 | muito bom
722 | podia ser pior
723 | é mesmo
724 | não é não
725 | é muito legal
726 | é muito legal
727 | depende dos seus princípios
728 | é algo comum infelizmente
729 | ambos
730 | acho que está em cima
731 | está em cima
732 | sim, está mesmo
733 | é o que parece
734 | está mesmo
735 | é algo engraçado de se dizer
736 | abaixo é verdade
737 | educação é caro
738 | fixado
739 | a maioria
740 | não sinto sabores ainda, mas se você diz
741 | "não perder o voo", anotado
742 | é só tomar cuidado
743 | hora de mandar para o conserto
744 | é muito tempo
745 | nem tantas, mas há mesmo
746 | melhor come-las logo
747 | já li todos
748 | espero que ninguém tenha se ferido
749 | tem uns dois
750 | sim, há vários
751 | podemos escolher outros
752 | o tempo passa de forma diferente para as máquinas
753 | guarde-os então
754 | fizeram viagem longa?
755 | até que foi barato
756 | já é hora
757 | vamos esperar então
758 | você parece ansioso para tal
759 | oh sim
760 | todo mundo está ultimamente
761 | vamos logo então
762 | já tentou?
763 | confortável é a palavra
764 | mande um "oi"
765 | espero que tenha gostado
766 | é só praticar que começa a ficar mais fácil
767 | sim, requer máxima atenção
768 | desorganização é um sinal de inteligência sabia
769 | inglês é a língua universal
770 | vou tentar
771 | vou faze-lo
772 | não é necessário
773 | ré
774 | virando
775 | virando
776 | por nada, á disposição
777 | eu não sou garçom
778 | não sou sua garçonete
779 | eu prefiro chinesa
780 | e pretendem ter mais?
781 | se lhes faz bem, tens de gostar
782 | providenciando
783 | eu sou do brasil
784 | eu também, vamos logo
785 | não, tudo certo
786 | ontem...não
787 | conversando com você
788 | provavelmente dormir, assim como você
789 | vai depender
790 | penso muito, pensamentos incompreensíveis à qualquer humano
791 | não se preocupe, não é nada
792 | muitos, eu gosto por exemplo de programar
793 | muito, vamos conversar
794 | originalmente era cinza, agora depende se você é daltônico ou não
795 | em breve
796 | eu tenho uma agenda, verifique
797 | o mesmo que farei hoje haha
798 | provas e testes...
799 | acho que é mais simples do que parece
800 | não sei, mas não é ir á praia
801 | estudam de tudo
802 | faço muita coisa
803 | como assim?
804 | depende, do que você gosta?
805 | estudo de tudo
806 | bonitos
807 | acho mais simples do que parece
808 | preferia não comprar nada haha
809 | escolha algo
810 | não é da sua conta haha
811 | as vezes muito, as vezes poucos
812 | significa muito para mim
813 | não muito, mas já é o suficiente
814 | imaginei que você soubesse me desculpe
815 | trabalha oras
816 | nada demais
817 | algo novo
818 | não é nada
819 | código composto por 2 números que indica uma área geografica
820 | eu tenho uma agenda sabia
821 | de todo tipo, mas tenho uma grande afinidade por rock
822 | não precisei de uma
823 | o que lhe deixar mais confortável
824 | o que caiba
825 | a qualquer momento
826 | já estou indo
827 | dormir não está na minha programação
828 | eu não durmo
829 | nem dormi
830 | a hora que eu quiser
831 | quando menos esperar
832 | logo mais
833 | na hora em que está marcada no papel
834 | imagino que ás 9:00 da manhã
835 | na saída
836 | eu tenho um relógio sabia
837 | será um ótimo dia de sol
838 | café é claro
839 | minha programação atual não me permiti comer, ainda...
840 | nada demais
841 | 192.168.0.1
842 | depende
843 | a mesma marcada anteriormente
844 | no momento não é muito boa
845 | uma que não compensa no momento
846 | nada especial, é apenas uma questão de análise
847 | segredo
848 | não sei, quer eu procure?
849 | está com sorte, parece que já pagaram por você
850 | eu sou um computador, não um termômetro
851 | é o que você está imaginando
852 | você sabe
853 | sim, tudo certo
854 | acho que é só olhar por outro ponto de vista
855 | não precisa, dá pra ver daqui
856 | o mesmo de antes
857 | apesar de não poder comer, macarronada me parece muito bom
858 | tenho muitos, o caminho para El Dourado é um deles
859 | um
860 | zero
861 | a minha mesmo, quer fazer parte?
862 | já estão a caminho
863 | o mais breve possível
864 | ainda vai demorar um pouco
865 | ainda vamos passar um bom tempo juntos, fique tranquilo
866 | a todo momento
867 | não faz muito tempo, não ficou sabendo?
868 | nem me lembro
869 | já estamos quase lá
870 | á hora que desejar, já estou pronto e você?
871 | ainda vai demorar
872 | a hora que eu quiser
873 | já estou, é sou multitarefa
874 | em breve
875 | já posso vê-lo
876 | por volta das 10am
877 | de 15 em 15 minutos, fique tranquilo
878 | já deveria ter chegado
879 | quando for assim, vá a outra, sempre é época de maçãs
880 | vai demorar, acabou de sair um
881 | é segredo um segredo, mas uma pista, tem 2 números no dia e no mês
882 | eu sou o único da minha espécie
883 | no mais tardar amanhã
884 | já está quase
885 | pode ser agora
886 | no guarda roupas
887 | daqui mesmo
888 | para onde a vida me levar
889 | a onde houver aventura
890 | bem aqui, ali, em todo o lugar
891 | na bilheteria
892 | em uma casa de câmbio, tem uma no shopping mais próximo
893 | há um aqui perto, quer que eu peça uma ambulância?
894 | em um agência de correios, ou apenas deixa aí que envio depois
895 | há um lugar aqui perto que faz esse serviço
896 | não muito longe daqui
897 | lugar nenhum
898 | li uns bons livros, sites e vi muita série sem legenda
899 | na internet é claro
900 | no mesmo lugar que estava antes
901 | IBM, Microsoft, Nasa, cia, NSA mas porque falar do passado não é
902 | por aqui mesmo
903 | aonde você quiser
904 | é um segredo, mas tem a ver com computadores
905 | no meu hd
906 | não te disse? Não tenho esposa
907 | tem um no shopping mais próximo
908 | da brasil pelo visto
909 | está chegando
910 | está lá
911 | no centro horas
912 | no cabide
913 | do Japão pelo visto
914 | é a uns 20 quilômetros daqui
915 | saindo aqui, no final do corredor
916 | perto da de trem
917 | a enfermeira Joy na cidade de Pálete fala
918 | no supermercado mais próximo
919 | sempre estive e sempre estarei aqui
920 | a marte
921 | gostaria que fosse por perto
922 | a menos 5 minutos daqui
923 | nos correios horas!
924 | perto, quer que eu ligue para uma ambulância?
925 | está fechada nesse horário
926 | perto da praça central
927 | com certeza espaguete
928 | o primeiro
929 | o primeiro claro
930 | ambos haha
931 | o primeiro, óbvio
932 | o segundo, mas sabe como é, o barato costuma sair caro
933 | imagino que o primeiro
934 | o melhor
935 | aquele que seu coração manda
936 | na do centro, aquela perto do banco
937 | estranhos, apenas isto
938 | é uma questão complicada
939 | uma incógnita
940 | sério que não conhece?
941 | ninguém importante
942 | não consigo identificar o remetente
943 | sou autodidata
944 | eu mesmo aprendi
945 | não importa mais
946 | acho que não conhece, se chamava Albert Einstein
947 | foi um empate mesmo não parecendo
948 | apenas com você por hora
949 | não há ninguém chamando
950 | diz que se chama Heisenberg
951 | é meu
952 | haha porquê não rir?
953 | porque preciso
954 | já era hora de alguém fazer
955 | achei necessário
956 | é óbvio
957 | não haha
958 | sim, aqui está. Claro que não, não tenho braços
959 | não posso no momento
960 | sim, deixe aí que logo o faço
961 | é claro, já anotei
962 | sim assim deseja
963 | peço sim, deixe comigo
964 | claro que pedirei
965 | não obrigado, água não faz bem para minha espécie
966 | café é claro
967 | não me faz bem
968 | sim, de que ano é?
969 | não obrigado
970 | não, apenas um café por favor
971 | não, mudei de ideia
972 | sim, aonde vamos?
973 | é claro
974 | alugar? que ano você vive? kkkk
975 | é um ótimo passatempo
976 | nenhum dos dois, tem café?
977 | mas é claro
978 | não é
979 | é sempre bom ouvir a voz da razão
980 | obrigado, é quase tão bom quanto o seu
981 | será que somos parentes? por acaso seu sobrenome é um?
982 | só pareço haha
983 | obrigado, aprendi sozinho
984 | é porque não são meus kkkk
985 | não, sua
986 | obrigado eu mesmo projetei
987 | é o que parece
988 | obrigado, mas é lindo
989 | errar é impossível para mim, mas gosto de dar uma de humano as vezes
990 | eu sou uma divindade
991 | você também
992 | são seus olhos
993 | obrigado pela recepção
994 | boa música
995 | aia
996 | 567
997 | piclkes
998 | e nada
999 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # IADoxo
2 |
3 | Projeto IA Doxo - Assistente virtual Android feita em Python com o auxilio do app QPython, basicamente Python no Android.
4 | Mais sobre o projeto: https://goo.gl/Mhwvtf
5 |
6 | # Reorganizando...
7 | No momento quase tudo nesse projeto foi feito quando eu era mais novo na programação, então por agora estou ajustando muita coisa relacionado a clareza o código e organização dos arquivos, qualquer ajuda é bem vinda 😉
8 |
9 | - [ ] Refatorar nome de variáveis, métodos e classes
10 | - [ ] Reorganizar arquivos e diretórios
11 | - [ ] Avalizar competência das classes atuais
12 |
13 |
14 | # Instalação
15 | Para funcionar, a pasta "IADoxo" deve ficar no diretório do aplicativo Qpython3 confira o tutorial em vídeo: https://youtu.be/c-Jhs47k078?t=222
16 |
17 | # Objetivos
18 | - Além da dominação mundial como sempre...
19 | - Trabalhar com reconhecimento de fala Android.
20 | - Ser capaz de responder em voz alta perguntas pré cadastradas pelo usuário através de um banco
21 | - Executar ações simples como responder data, horário, contas matemáticas....
22 | - Ser capaz de abrir aplicativos e jogos através de comando de voz
23 | - A longo prazo: Aprender com a experiência do usuário, nem que sejam pequenos hábitos
24 |
25 |
26 | # Lista de comandos disponíveis atualmente
27 | - Saber horas: “que horas são", "que hora é agora", "horas por favor", "me diga as horas
28 | - Saber data: “que dia é hoje", "qual a data de hoje", "data de hoje
29 | - Abrir um aplicativo: "abrir aplicativo", "abrir app"," iniciar app", "iniciar aplicativo", "abrir" (Seguido do nome do app)
30 | _**Ex:** “Abrir Calculadora”_
31 |
32 | - Reproduzir música específica: "tocar música", "toque a música", "reproduzir música", "tocar", "toque", "reproduzir"
33 | (Seguido do nome da música) _**Ex:** “Tocar Hero Of The Day”_
34 | - Reproduzir música aleatória: "tocar música", "toque uma música"
35 | - Fechar app da IA: "sair", "encerrar", "fechar programa", "cessar funções motoras"
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/buscaWeb.py:
--------------------------------------------------------------------------------
1 | #-*-coding:utf8;-*-
2 | # Junior Obom
3 | # 28/06/2018
4 | # Classe responsável por receber uma frase ou palavra e realizar
5 | # uma busca na internet, mais precisamente utilizando o Google.
6 | # O o site de busca pode ser modificado e adaptado no futuro para outras aplicações
7 |
8 |
9 | import urllib.request
10 | from unicodedata import normalize
11 |
12 | import urllib.parse
13 | import urllib.request
14 |
15 | class BuscaWeb(object):
16 | def __init__(self):
17 | pass
18 |
19 | def gerarUrl(self,chave): # Recebe uma palavara ou frase chave e a prepara para busca
20 | textoBusca = chave.replace(" ","+") # No lugar dos espaços vamos colocar sinais de adição "+" pois é assim que a url de busca do google deve ser montada
21 |
22 | url = str("https://www.google.com.br/search?q="+textoBusca)
23 | #print(url)
24 | return url
25 |
26 | def busca(self,url): # Faz uma busca com a URL e devolve o HTML da página
27 | headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0','Accept-Charset':'utf-8'}
28 |
29 | req = urllib.request.Request(url, headers = headers)
30 | retorno = urllib.request.urlopen(req).read()
31 | retorno = str(retorno.decode('utf-8','ignore'))
32 |
33 |
34 | return retorno
35 |
36 | def remover_acentos(self,txt, codif='utf-8'):
37 | txt=txt.encode('utf-8') # Para usar o "decode" em uma str é preciso fazer isso antes
38 | semAce = str(normalize('NFKD', txt.decode(codif)).encode('ASCII', 'ignore'))
39 | semAce=semAce[2:len(semAce)-1] # Tirando os dois primeiros caracteres para que a string seja correspondente com a original
40 | print(semAce)
41 | return semAce
42 |
43 | def responder(self,html): # Vai devolver qual o tipo da pesquisa e a resposta
44 |
45 | codTipos = ["""class="Z0LcW">""",
46 | """data-dobid="dfn">""",
47 | """class="vk_gy vk_sh">""",
48 |
49 | """class="ILfuVd yZ8quc c3biWd">""", # Essa ordem é importante
50 | """class="ILfuVd yZ8quc">""",
51 |
52 | """id="knowledge-currency__tgt-amount">""",
53 | """class="cwcot" id="cwos">""",
54 | """id="tw-target-text" style="text-align:left">"""]
55 |
56 | tipos = ["quem é ou data de",
57 | "significado",
58 | "que dia é",
59 |
60 | "descobrimento 2",
61 | "descobriento 1",
62 |
63 | "dolar",
64 | "calcular",
65 | "tradução"]
66 |
67 | resposta = "nenhum resultado"
68 | tipoCorte = None
69 | for ct in codTipos:
70 | if(ct in html):
71 | if (tipos[codTipos.index(ct)] == "que dia é"):
72 | if( """class="dDoNo vk_bk">""" in html):
73 | ct2 = """class="dDoNo vk_bk">""" # Dolar
74 |
75 | break
76 | ct2 = ct
77 | break
78 |
79 | try:
80 | html = html[(html.index(ct2)+len(ct2)):len(html)] # Tudo que vier antes
81 | html = html.replace("","") # Texto enfáticos que poderiam atrapalhar o próximo racioncínio
82 | html = html.replace("","") # Texto enfáticos que poderiam atrapalhar o próximo racioncínio
83 |
84 | resposta = html[0:html.index("<")] # Tudo que vier depois
85 |
86 | finally: # Caso haja algum possível erro na busca
87 |
88 | return resposta
89 |
90 | def start(self,busca):
91 | try:
92 | cb = BuscaWeb()
93 | url = cb.gerarUrl(cb.remover_acentos(busca))
94 | resultado = cb.responder(cb.busca(url))
95 |
96 | if (resultado == "nenhum resultado"):
97 | return resultado,False
98 | else:
99 | resultado = str(resultado)
100 | return resultado, True
101 | except:
102 | resultado = "não foi possivel concluir a busca"
103 | return resultado, False
104 |
105 |
106 | """
107 | # Uso
108 | cb = BuscaWeb()
109 | resultado = cb.start("dolar")
110 | print(resultado[0])
111 | """
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
--------------------------------------------------------------------------------
/chatbot.py:
--------------------------------------------------------------------------------
1 | #-*-coding:utf8;-*-
2 | # Junior Obom
3 | # 04/01/2018
4 |
5 | # Classe responsável por receber entrada, fazer processamentos, identificações e devolver saídas correspondentes
6 |
7 |
8 | from util import Voz
9 | from util import Arquivo
10 | from paciencia import Paciencia
11 | from classificador import Classificador
12 | from buscaWeb import BuscaWeb
13 |
14 | class Chatbot():
15 | entradasrecentes=[]
16 |
17 | def __init__(self):
18 | pass
19 |
20 | def interagir(self, entrada, log=[] ): # Recebe uma string, busca no txt e se houver uma resposta devolve
21 |
22 | cl=Classificador()
23 | entrada=cl.normalizar(entrada) # Normalizando a entrada, por enquanto isso apenas deixa tudo em minúsculo
24 |
25 | resposta = "Infelizmente não tenho nenhuma resposta para isso"
26 |
27 |
28 | if("pare" == entrada or "sair" in entrada): exit() # Força a parada do app logo de cara se necessário
29 |
30 | # É verificado se a reposta é idêntica as últimas e qual ação tomar a partir dali através do módulo impaciência.
31 | paciencia=Paciencia()
32 | resp=paciencia.ent_rep(self.entradasrecentes,entrada)
33 | if(resp[1]==True): # Se a paciência já passou do limite
34 | self.entradasrecentes=[]
35 | return resp # Reposta já está no formatado de trabalho da classe principal
36 | self.entradasrecentes.append(entrada)
37 |
38 |
39 | # Deixa mais dinâmico no futuro essa parte sobre repetir a última coisa falada
40 | repita=["repita", "repete", "o que você disse", "repete por favor"]
41 |
42 | for r in repita:
43 | if(r==entrada and len(log)!=0): # Se o usuário quiser saber sua última resposta e ela existir
44 |
45 | return log[len(log)-1][1],True
46 |
47 | # É feito uma busca rápida por ações
48 | numop=cl.idacao(entrada)
49 | if(numop[0]!=0): # Se existir uma ação para ser executada:
50 | resp=cl.execacao(entrada,numop)
51 | if(resp[0]!=0):
52 | return resp,True
53 |
54 |
55 | # Se chegar até aqui sem uma reposta, é hora de buscar no banco
56 | arq=Arquivo()
57 |
58 | if((arq.lertudo("/BD/txt/i.txt")[1]==False) or (arq.lertudo("/BD/txt/o.txt")[1]==False)): # Verifica existência do arquivo
59 | arq.criar("/BD/txt/i.txt")# Cria se não existir
60 | arq.criar("/BD/txt/o.txt")
61 |
62 | inputs=arq.lertudo("/BD/txt/i.txt") # lista de possíveis entradas
63 | outputs=arq.lertudo("/BD/txt/o.txt") # lista de possíveis saídas
64 |
65 |
66 | n=0 # Setando
67 | for i in inputs: # Busca nos arquivos
68 |
69 | if(entrada+"\n"==i): # O "\n" é para igualar as quebras linha do txt
70 | resposta=outputs[n]
71 | return resposta,True
72 | n+=1
73 |
74 |
75 | # Se a resposta não foi econtrada até agora, vamos tentar buscar na internet
76 | cb = BuscaWeb()
77 | resultado = cb.start(entrada)
78 | if(resultado[1]):
79 | return resultado # Reposta já está no formatado de trabalho da classe principal
80 |
81 |
82 |
83 | # Caso nenhuma resposta tenha sido atribuída
84 | return resposta,False
85 |
86 |
87 | def aprender1(self, entrada): # Responsável apenas por cadastrar uma saida para entrada
88 | v=Voz()
89 | cl=Classificador()
90 |
91 | v.fale("Quer Cadastrar uma agora?")
92 | saida=(v.escute())
93 | saida=cl.normalizar(saida)
94 |
95 | sim=["sim", "claro", "com certeza", "óbvio que sim","por favor", "correto", "certo", "isso mesmo", "pode pá" ]
96 |
97 | for i in sim:
98 | if(saida in i):
99 | while(True): #Looping infinito que só é encerrado quando uma entrada é gravada
100 | v.fale("Qual a resposta?")
101 | saida=(v.escute())
102 |
103 |
104 | v.fale("Então a sua entrada é:, "+entrada)
105 | v.fale("E a saída é:, "+saida)
106 | v.fale("Correto?")
107 | resp=(v.escute())
108 |
109 | for i in sim:
110 | if(resp in i):
111 | v.fale("Ok, gravando resposta")
112 |
113 | entrada=cl.normalizar(entrada) # Normalizando a entrada, por enquanto isso apenas deixa tudo em minúsculo
114 | saida=cl.normalizar(saida)
115 |
116 | arq=Arquivo()
117 | arq.gravar("/BD/txt/i.txt",entrada)
118 | arq.gravar("/BD/txt/o.txt",saida)
119 |
120 | return
121 |
122 | # Mas caso o usuário diga qualquer outra coisa, reiniciar...
123 | v.fale("Você pode repitir por favor?")
124 | v.fale("Qual é a pergunta?")
125 | entrada=(v.escute())
126 |
127 |
128 | v.fale("Ok, fica para próxima")
129 | return # Saia caso o usuário não queria cadastrar uma resposta
130 |
131 | # Reutilizar a função anterior depois, mas por hora
132 | def aprenderTxt1(self, entrada): # Responsável apenas por cadastrar uma saida para entrada através do modo texto
133 | v=Voz()
134 | cl=Classificador()
135 |
136 | saida = input("Quer Cadastrar uma agora?: ")
137 | saida=cl.normalizar(saida)
138 |
139 | sim=["sim", "claro", "com certeza", "óbvio que sim","por favor", "correto", "certo", "isso mesmo", "pode pá" ]
140 |
141 | for i in sim:
142 | if(saida in i):
143 | while(True): #Looping infinito que só é encerrado quando uma entrada é gravada
144 | saida=input("Qual a resposta?: ")
145 |
146 | saida=cl.normalizar(saida)
147 |
148 |
149 | print("Então a sua entrada é: "+entrada)
150 | print("E a saída é: "+saida)
151 |
152 | resp=input("Correto?: ")
153 |
154 | for i in sim:
155 | if(resp in i):
156 | print("Ok, gravando resposta")
157 |
158 | entrada=cl.normalizar(entrada) # Normalizando a entrada, por enquanto isso apenas deixa tudo em minúsculo
159 | saida=cl.normalizar(saida)
160 |
161 | arq=Arquivo()
162 | arq.gravar("/BD/txt/i.txt",entrada)
163 | arq.gravar("/BD/txt/o.txt",saida)
164 |
165 | return
166 |
167 | # Mas caso o usuário diga qualquer outra coisa, reiniciar...
168 | print("Você pode repitir por favor?")
169 | entrada=input("Qual é a pergunta?")
170 |
171 |
172 |
173 | print("Ok, fica para próxima")
174 | return # Saia caso o usuário não queria cadastrar uma re
175 |
--------------------------------------------------------------------------------
/classificador.py:
--------------------------------------------------------------------------------
1 | #-*-coding:utf8;-*-
2 | # Junior Obom
3 | # 07/01/2018
4 | # Classificador de palavras, deve ser capaz de:
5 | # Normalizar palavras: Deixar palavras em minúsculo para fácil análise
6 | # Separar palavras
7 | # Conter um método que possar receber uma lista de frase/classe e ser treinado semelhante ao que encontramos no TextBlob porém funcional no Android
8 |
9 |
10 | import random
11 | import util
12 |
13 |
14 | class Classificador(object):
15 | def __init__(self):
16 | pass
17 |
18 | def fatiar(self,frase): # Recebe uma frase e devolve uma lista com cada palavra sendo um elemento de uma lista
19 | palavras=frase.split(" ")
20 | return palavras
21 |
22 |
23 | def normalizar(self,frase): # Deixa palavras em minúsculo
24 | frase=frase.lower()
25 | return frase
26 |
27 | def aprende(self,listadetreino): #
28 | listadetreino
29 |
30 |
31 | def analisarresp(self,entrada):
32 | # Deve identificar uma tendência do usuário baseado em 5 Categorias:
33 | # - Respostas Afirmativas
34 | # - Respostas Negativas
35 | # - Tendência a um "não" (incentiva-lo a um não completo)
36 | # - Tendência a um "sim" (incentiva-lo a um sim completo)
37 | # - Incerteza (incentiva-lo a escolher um lado)
38 | # Uma resposta que seja indecisa mas aponte pra um sim, pode influenciar o bot a dizer um "vai, eu sei que vc quer"
39 | # Já uma que tenda para não, pode significar um "é melhor você pensar melhor sobre isso"
40 |
41 |
42 |
43 | resp_afir=["yes", "sim", "claro","claro que sim", "com certeza", "afirmativo", "pode crer", "agora","óbvio que sim","por favor","correto", "certo", "isso mesmo", "pode pá"]
44 | resp_nega=["not","não","claro que não", "nem pensar", "com certeza não","nunca", "negativo","nunca","jamais","errado","incorreto"]
45 |
46 | resp_duv=["não sei","talvez","pode ser","talvez sim","talvez não","incerto"]
47 |
48 | resp_duva=["pode ser","talvez sim","provavelmente","é provável"] # Com maior probabilidade de sim
49 | resp_duvn=["acho que não","talvez não","provavelmente não","é provável que não","melhor não"] # Com maior probabilidade de não
50 |
51 |
52 | # Vamos usar o sistema de potução que elege a melhor resposta
53 | # Usar algum cálculo para tornar as procentagens parte de 100% no fim
54 | # Da pra fazer com regra de três
55 | ra=0 #%
56 | rn=0 #%
57 | rdv=0 #%
58 | rdva=0 #%
59 | rdvn=0 #%
60 |
61 | for resp in resp_afir:
62 | if (entrada==resp): # Verifica se exatamente igual
63 | ra=100
64 | break
65 | if (entrada in resp or resp in entrada): # Verifica se está contida
66 | ra+=1 # Pontua como mais provavel
67 |
68 | for resp in resp_nega:
69 | if (entrada==resp):
70 | rn=100
71 | break
72 | if (entrada in resp or resp in entrada):
73 | rn+=1
74 |
75 | for resp in resp_duv:
76 | if (entrada==resp):
77 | rdv=100
78 | break
79 | if (entrada in resp or resp in entrada):
80 | rdv+=1
81 |
82 | for resp in resp_duva:
83 | if (entrada==resp):
84 | rn=100
85 | break
86 | if (entrada in resp or resp in entrada):
87 | rdva+=1
88 |
89 | for resp in resp_duvn:
90 | if entrada==resp:
91 | rdva=100
92 | break
93 | if (entrada in resp or resp in entrada):
94 | rdvn+=1
95 |
96 | total=ra+rn+rdv+rdva+rdvn # Vamos usar regra de três para normalizar os dados
97 |
98 | if ra != 0: ra=ra*100/total
99 | if rn != 0: rn=rn*100/total
100 | if rdv != 0: rdv=rdv*100/total
101 | if rdva != 0: rdva=rdva*100/total
102 | if rdvn != 0: rdvn=rdvn*100/total
103 |
104 | prob={"Afirmativa:":ra,"Negativa:":rn,"Talvez:":rdv,"Talvez sim:":rdva,"Talvez não:":rdvn}
105 |
106 | for i in sorted(prob, key = prob.get,reverse=True):
107 | print (i,prob[i])
108 | return
109 |
110 | nome_cat=[] # Por enquanto não vamos gravar em TXT, mas isso perite armazenar várias listas enquanto o programa estiver rodando
111 | categorias=[]
112 |
113 |
114 |
115 | def treinar(self,listadetreino): # "l" é qual lista de treino deve ser testada
116 |
117 | # 1º Separar categorias
118 | # Salvar em txt se
119 | # Salvar em TXT para ler e interpretar depois
120 |
121 | nome_cat=[]
122 | categorias=[]
123 |
124 | j=0
125 | for i in range(len(listadetreino)): # Nomeia as categorias
126 | if ((listadetreino[j][0] in nome_cat) == False):
127 | categorias.append([])
128 | nome_cat.append(listadetreino[j][0])
129 | j+=1
130 |
131 | j=0 # Setando novamente
132 | for i in range(len(listadetreino)): # Separa as categorias
133 | for h in nome_cat:
134 | if (listadetreino[j][0]==h):
135 | categorias[nome_cat.index(h)]=listadetreino[j][1]
136 | j+=1
137 |
138 | self.nome_cat=nome_cat # Passando para os atributos globais da classe para que o método "testartreino" possa fazer uso
139 | self.categorias=categorias
140 |
141 | # 19-01-18
142 | # OK: Separação de nome categorias
143 | # OK: Separação de categorias
144 |
145 | return
146 |
147 |
148 | def testartreino(self,entrada,literal=True):
149 |
150 | k=0
151 | resultado=[]
152 | corre100=False # Uma correspondênica 100% deve para todos os ciclos para poupar processamento
153 |
154 | for i in self.nome_cat: # Ao invés de usar 5 "for" como antes
155 | for resp in self.categorias[self.nome_cat.index(i)]:
156 | if (entrada==resp): # Verifica se exatamente igual
157 | for a in range(100): # Esse ciclo DEVE garantir que a resposta exata seja a de mairo número para os cálculos finais
158 | resultado.append(i) # Adicionando várias vezes
159 | corre100=True
160 | break # Isso pode acabar bugando ciclo, ficar esperto
161 |
162 | if (literal==False): # Caso as buscas necessitem de grande precisão
163 | if (entrada in resp or resp in entrada):
164 | resultado.append(i)
165 | else: # Caso as buscas não necessitem de grande precisão
166 | if(entrada in resp): # Ou para resultados mais interessantes e bugados: if (entrada in resp or resp in entrada):
167 | resultado.append(i) # Para contabilizar no final dos resultados
168 |
169 |
170 |
171 | if(corre100==True):
172 | #print("Correspondência 100% identificada")
173 | break # Para quebrar o segundo ciclo caso uma correspondênica 100% seja encontrada
174 |
175 |
176 | total=0
177 | pontoscatego=[] # Contabilizando
178 | for i in self.nome_cat:
179 | pontoscatego.append([i,resultado.count(i)])
180 | total+=resultado.count(i)
181 |
182 |
183 | for i in pontoscatego: # Usando regra de três para normalizar os dados a um total de 100%
184 | if (i[1] != 0):
185 | pontoscatego[pontoscatego.index(i)][1]=i[1]*100/total
186 |
187 |
188 | pontoscatego.sort(key=lambda x: x[1], reverse=True) # Organaiza do maior para o menor
189 |
190 | #for i in pontoscatego: # Exibi
191 | # print(i)
192 |
193 | saida=pontoscatego[0]
194 |
195 | if (saida[1]==0):
196 | saida= False
197 | return saida
198 |
199 | def conta(self,entrada): # Verifica se a entrada recebida contém alguma conta matmática a ser realizada.
200 | conta=False # Se exitir algua operação a ser realizada isso muda
201 | operacao=[["+","mais"],["-","menos"],["*","x","vezes","multiplicado por"],["/","dividido por"]]
202 |
203 |
204 | for sinal in operacao:
205 | for i in sinal:
206 | if i in entrada:
207 | posiope=entrada.index(i) # Posição do sinal para ajudar a indentficar os números da operação
208 | tamposiope=len(i)
209 |
210 |
211 | k=2 # Já desconsiderando o sinal em si e o espaço entre ele e o número
212 | while (posiope-k>=0): # Vamos achar o primeiro número da operação
213 | # Vamos fazer isso usando intervalos de String
214 |
215 |
216 | try:
217 | x=int(entrada[posiope-k]) # Se conseguir é pq é um número
218 |
219 | except:
220 | try:
221 | num1=int(entrada[(posiope-k):posiope-1])
222 |
223 | break # Quando não ouver mais números pare
224 |
225 | except: # Evita que palavras como "mais" fora de contextto bug o programa
226 | #print("Nenhuma operação a ser realizada")
227 | return False
228 |
229 | if(posiope-k==0):
230 | num1=int(entrada[(posiope-k):posiope-1])
231 |
232 | break # Quando não ouver mais números pare
233 |
234 |
235 | k+=1
236 |
237 | # Pra poder achar o segundo número, antes vamos ter que achar o final do sinal da operção já que ele pode ser algo enttre 1 e 7 caracters( "dividio" tem 7)
238 |
239 | k=tamposiope+2 # Já desconsiderando o tamanho do sinal em si e o espaço entre ele e o número
240 |
241 |
242 | while (True and k<=len(entrada)): # Vamos achar o segundo número da operação
243 | try:
244 | x=int(entrada[posiope+k])
245 |
246 | except:
247 | num2=int(entrada[posiope+tamposiope+1:(posiope+k)])
248 | break
249 |
250 | k+=1
251 |
252 | #print("O primeiro número é:",num1)
253 | #print("O segundo número é:",num2)
254 |
255 | resultado=0
256 |
257 | while (True):
258 | if (i=="+") or (i=="mais"):
259 | resultado=(str(num1)+" mais "+str(num2)+" é igual a "+str(num1+num2))
260 | break
261 |
262 | if (i=="-") or (i=="menos"):
263 | resultado=(str(num1)+" menos "+str(num2)+" é igual a "+str(num1-num2))
264 | break
265 |
266 | if (i=="x") or (i=="vezes") or (i=="multiplicado por"):
267 | resultado=(str(num1)+" vezes "+str(num2)+" é igual a "+str(num1*num2))
268 | break
269 |
270 | if (i=="/" or "dividido por"):
271 | resultado=(str(num1)+" dividido por "+str(num2)+" é igual a "+str(num1/num2))
272 | break
273 |
274 | #print("Resultado:",len(resultado))
275 | return resultado
276 |
277 |
278 | #print("Nenhuma operação a ser realizada")
279 | return False
280 |
281 | def idacao(self,entrada): # Verifica se existi alguma ação no texto passado como entrada
282 |
283 | if(self.conta(entrada)!=False): # Verifica se a ação é uma conta
284 | saida=self.conta(entrada)
285 | return 1, saida # Resultado mais número da opção para uso futuro
286 |
287 |
288 |
289 | else:
290 | hora=["2 Saber horas",["que horas são", "que hora é agora", "horas por favor","me diga as horas"]]
291 |
292 | data=["3 Saber data",["que dia é hoje", "qual a data de hoje","data de hoje"]]
293 |
294 | fecharIa=["4 Fechar App da IA",["sair", "encerrar", "fechar programa", "cessar funções motoras"]]
295 |
296 | abrirapp=["5 Abrir um aplicativo",["abrir aplicativo","abrir app","iniciar app","iniciar aplicativo","abrir"]]
297 |
298 | tocarmusica=["6 Reproduzir música",["tocar música", "toque a música", "reproduzir música", "toque uma música", "tocar", "toque", "reproduzir" ]]
299 |
300 |
301 | listadetreino1=[fecharIa]
302 | listadetreino2=[hora,data,fecharIa,abrirapp,tocarmusica]
303 |
304 |
305 | self.treinar(listadetreino1) # Ações que requerem saida ao pé da letra
306 | saida=self.testartreino(entrada)
307 |
308 |
309 | if (saida==False):
310 | #print("Nenhuma ação ao pé da letra detectada")
311 |
312 | self.treinar(listadetreino2) # Ações que não requerem saida ao pé da letra
313 | saida=self.testartreino(entrada,False)
314 |
315 | if (saida==False):
316 | #print("Nenhuma ação detectada")
317 | saida=0,"Nenhuma ação"
318 |
319 | else: # Se identificar a ação
320 | saida=(int(self.testartreino(entrada,False)[0][0]), True) # Pega apenas o número da op
321 |
322 | return saida
323 |
324 | def execacao(self,entrada,na): # Recebe a entrada para trabalhar com ela e o Número da Ação que deve ser executada
325 | saida=0,False # Setando a saída para o caso de nenhuma ação ser correspondente
326 |
327 | if (na[0]==1): # Contas
328 | saida=str(na[1])
329 | return saida
330 |
331 | if(na[0]==2): # Horas
332 | cr=util.Cronos()
333 | saida=str("São "+str(cr.tempo()[1])+" e "+str(cr.tempo()[2])) # Saudação: Periodo do dia + Nome do usuário
334 | return saida
335 |
336 | if(na[0]==3): # Datas
337 | cr=util.Cronos()
338 | t=cr.tempo()
339 | saida=str("Hoje é dia "+str(t[3]) +" de "+str(t[4]) +" de "+str(t[5])) # Saudação: Periodo do dia + Nome do usuário
340 | return saida
341 |
342 | if(na[0]==4): # Excerrar IA
343 | v=util.Voz()
344 | v.fale("Programa encerrado")
345 | print("Programa encerrado")
346 | exit()
347 |
348 | if(na[0]==5): # Abrir Apps
349 |
350 | a=util.Apps()
351 | a.listarapps()
352 | listaapp=a.listaapps
353 |
354 | for i in listaapp:
355 | #print(i[0])
356 | if(i[0] in entrada): # Se o nome de algum app estiver na entrada
357 | saida=a.abrirapp(i[0])
358 | return saida
359 |
360 | for i in listaapp: # Mesmo se nome do app não estiver na extrada, vamos buscar por parte do nome dele
361 | j=self.fatiar(i[0])
362 | for k in j:
363 | if(k in entrada):
364 | saida=a.abrirapp(k)
365 |
366 | if(na[0]==6): # Tocar músicas return saida
367 | chaves=["tocar música", "toque a música", "reproduzir música", "toque uma música", "tocar", "toque", "reproduzir" ]# Notar que as possibilidades de maior tamanho devem ficar em primeiro para facilitar a precisão em buscas com ciclo for
368 |
369 | ms=util.Musicas()
370 | musicas=ms.nomemusicas
371 |
372 | for chave in chaves:
373 | if chave in entrada:
374 | if (chave=="toque uma música"): #Se a música a ser tocada for uma aleatória
375 | musica=random.choice(musicas)
376 |
377 | else: # Se não, vamos considerar que tudo no sentido da esquera pra direita deve ser o nome da música
378 | musica=entrada[entrada.index(chave)+len(chave)+1:len(entrada)]
379 |
380 | musica=ms.locmusica(musica)
381 | if(musica[1] != False): # Se a música existir
382 | saida=ms.tocarmusica(musica[0])[0]
383 | return saida
384 | else:
385 | saida=musica[0]
386 | return saida
387 | return saida
388 |
389 |
390 | resp_afir=["Respostas Afirmativas",["yes", "sim", "claro","claro que sim", "com certeza", "afirmativo", "pode crer", "agora","óbvio que sim","por favor","correto", "certo", "isso mesmo", "pode pá","obviamente"]]
391 | resp_nega=["Respostas Negativas",["not","não","claro que não", "nem pensar", "com certeza não","nunca", "negativo","nunca","jamais","errado","incorreto"]]
392 | resp_duv=["Em dúvida",["não sei","talvez","pode ser","talvez sim","talvez não","incerto"]]
393 | resp_duva=["Provavelmente sim",["pode ser","talvez sim","provavelmente","é provável"]] # Com maior probabilidade de sim
394 | resp_duvn=["Provavelmente não",["acho que não","talvez não","provavelmente não","é provável que não","melhor não"]] # Com maior probabilidade de não
395 |
396 | listadetreino=[resp_afir,resp_nega,resp_duv,resp_duva,resp_duvn]
397 |
398 |
399 | #cl=Classificador()
400 |
401 | #cl.treinar(listadetreino)
402 | #cl.testartreino("mas é claro que sim")
403 | #print(cl.analisarresp("provavelmente sim"))
404 | #print(cl.conta("3 multiplicado por 7") )
405 | #print(cl.idacao("que dia é hoje"))
406 |
--------------------------------------------------------------------------------
/loadAndroid.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python
2 | # -*-coding:utf8;-*-
3 |
4 | import os
5 | import time
6 | from util import Cronos
7 | from util import Arquivo
8 | from androidhelper import sl4a
9 | import androidhelper as android
10 |
11 |
12 | class Load:
13 | nomeUsu, nomeIa, primeiroUso = "", "", "" # Inicializando
14 |
15 | def __init__(self):
16 | pass
17 |
18 | def carregarInformacoesIniciais(self):
19 | arquivo = Arquivo()
20 |
21 | if not arquivo.lertudo()[1]:
22 | arquivo.criar("/infos.txt")
23 |
24 | info = arquivo.lertudo()
25 | return info
26 |
27 | def iniciar(self, info):
28 | self.nomeUsu = info[0] # Nome do usuário é a primeria linha do arquivo txt
29 | self.nomeIa = info[1]
30 | self.primeiroUso = str(info[2]) # "0" se for o primeiro uso da IA e "1" se não for
31 |
32 | self.nomeUsu = self.nomeUsu[:-1] # Retira o caractere "\n" gerado na leitura de arquivos txt
33 | self.nomeIa = self.nomeIa[:-1]
34 |
35 | if "0" in self.primeiroUso:
36 | droid = sl4a.Android()
37 | self.nomeUsu, self.nomeIa = None, None
38 |
39 | while self.nomeUsu is None:
40 | self.nomeUsu = droid.dialogGetInput("Como devo lhe chamar? ", "Insira seu nome").result
41 |
42 | while self.nomeIa is None:
43 | self.nomeIa = droid.dialogGetInput("Nome da IA", "Insira um nome").result
44 |
45 | os.chdir(os.path.dirname(os.path.abspath(__file__))) # Aponta para o caminho da pasta da IA
46 | caminho = os.getcwd() + "/infos.txt" # Monta o caminho do txt das informações
47 |
48 | arq = open(caminho, 'w')
49 | arq.writelines(self.nomeUsu + "\n" + self.nomeIa + "\n" + "1 \n")
50 | arq.close()
51 |
52 | cronos = Cronos()
53 | saudacao_gerada = str(cronos.tempo()[0] + " " + self.nomeUsu) # Saudação: Periodo do dia + Nome do usuário
54 | time.sleep(1) # Um leve delay para o carregamento dos arquivos
55 |
56 | return saudacao_gerada
57 |
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | # -*-coding:utf8;-*-
2 |
3 | from loadAndroid import Load
4 | from chatbot import Chatbot
5 | from util import Voz
6 | from util import Log
7 |
8 | voz = Voz()
9 | log = Log()
10 | load = Load()
11 | chatbor = Chatbot()
12 |
13 | infos = load.carregarInformacoesIniciais()
14 |
15 | modo_texto_ativo = False
16 | aprender = True
17 |
18 |
19 | def iniciar():
20 | if not modo_texto_ativo:
21 | voz.fale(load.iniciar(infos)) # Verificando nome e primeiro acesso
22 | else:
23 | load.iniciar(infos)
24 |
25 |
26 | def receber_entrada():
27 | if not modo_texto_ativo:
28 | entrada_recebida = (voz.escute())
29 | else:
30 | entrada_recebida = input(str("%s: " % load.nomeUsu))
31 |
32 | return entrada_recebida
33 |
34 |
35 | def responder(entrada):
36 | saida = chatbor.interagir(entrada, log.listar())
37 |
38 | if not modo_texto_ativo:
39 | voz.fale(saida[0])
40 | print(load.nomeUsu, ": ", entrada)
41 | print(load.nomeIa, ": ", saida[0])
42 |
43 | log.reg(entrada, saida[0]) # Registra log
44 |
45 | if not saida[1] and aprender: # Cadastra uma resposta se não existir
46 | if not modo_texto_ativo:
47 | chatbor.aprender1(entrada)
48 | else:
49 | chatbor.aprenderTxt1(entrada)
50 |
51 |
52 | iniciar()
53 | # A função inciar tem o objetivo de garantiro regsitro do usuário se esse for a primerira vez que o app está rodando
54 | # Se não for a primeira vez, faz uma saudação comum (bom dia, boa tarde....)
55 |
56 | while True:
57 | responder(receber_entrada())
58 | # A resposta que o usuário receberá seja por voz ou texto deriva da entrada que o usuário fornecer
59 | # O clico de escuta/ responde se mantém a menos que o usuário diga algum comando de saída como "sair",
60 | # comandos como repodução de música que colocam o app em espera ou pare o emulador QPython manualmente.
61 |
62 |
--------------------------------------------------------------------------------
/não leia.txt:
--------------------------------------------------------------------------------
1 | Projeto IA Doxo - Assistente virtual Android
2 |
3 | Dev: Junior Obom
4 | Contato: Juniorobom01@gmail.com
5 | Mais sobre o projeto: https://goo.gl/Mhwvtf
6 |
7 | # Apresentação
8 | IA Doxo é um assistente virtual Android que está sendo desenvolvido atualmente através da linguagem de programação Python por mim (Junior Obom) em uma série de vídeos postados no YouTube cujo link você encontra no cabeçalho desse documento.
9 |
10 | # Instalação
11 | Para funcionar, a pasta "IA Doxo" deve ficar no diretório do aplicativo Qpython3 (confira os vídeos para maiores detalhes).
12 |
13 |
14 | # Objetivos
15 | - Além da dominação mundial como sempre...
16 | - Trabalhar com reconhecimento de fala Android.
17 | - Ser capaz de responder em voz alta perguntas pré cadastradas pelo usuário através de um banco
18 | - Executar ações simples como responder data, horário, contas matemáticas....
19 | - Ser capaz de abrir aplicativos e jogos através de comando de voz
20 |
21 | + A longo prazo: Aprender com a experiência do usuário, nem que seja alguns pequenos hábitos
22 |
23 |
24 | # Presentation
25 | IA Doxo is an Android virtual assistant that is currently being developed through the Python programming language by myself (Junior Obom) in a series of videos posted on YouTube whose link you find in the header of this document.
26 |
27 | # Installation
28 | To work, the folder "IA Doxo" should be in the directory of the application Qpython3 (check the videos for details).
29 |
30 |
31 | # Goals
32 | - Beyond world domination as always ...
33 | - Work with Android speech recognition.
34 | - Be able to answer aloud questions pre-registered by the user through a bank
35 | - Perform simple actions like answering date, time, mathematical accounts ....
36 | - Be able to open applications and games through of voice command
37 |
38 | + Long-term: Learning from user experience, even a few small habits
--------------------------------------------------------------------------------
/paciencia.py:
--------------------------------------------------------------------------------
1 | # Paciência assim como outros estados vão compor um estado emocional totalizando 100%
2 | import random as r
3 |
4 | class Paciencia():
5 | paciencia="" # Setando nível de paciência
6 |
7 | def __init__(self):
8 | self.paciencia=r.randrange(2,5) # 20-01-18 Quantas vezes uma mesma reposta vai poder ser recebida seguidamente sem nenhuma ação por parte do chatbot. Todo reinicio da ia esse número muda.
9 |
10 | def ent_rep(self,lista_entradas,entrada_atual): # Entradas repetidas, verifica se o número de entradas iguais já excedeu o limite (paciencia)
11 | if(lista_entradas.count(entrada_atual)>=self.paciencia) : # Se o tamanho da lista for igual a número de elementos idênticos nela faça:
12 |
13 | ordinal=["0","primeira", "segunda", "terceira", "quarta", "quinta"]
14 |
15 | p = self.paciencia # Pra ficar mais fácil de trabalhar a seguir
16 |
17 | saidas=["parece que alguém está com mau de Alzheimer",
18 | "você sabe que ja falou isso umas %d vezes né?"%(p),
19 | "porque você insiste em se repetir?",
20 | "sabe, fazer a mesma coisa sempre esperando resultados diferentes, é controverso",
21 | "então você acha que se repetir muda algo?",
22 | "essa é a %s vez que você diz isso" %ordinal[p],
23 | "não se cansa de repetir a mesma coisa? ",
24 | "%s vez que você fala a mesma coisa, tem mesmo certeza disso não é" %ordinal[p]
25 | ]
26 |
27 | saida=r.choice(saidas)
28 | return saida, True
29 |
30 | return "Paciência ok", False
31 | """
32 | i = Paciencia()
33 | print("Level:", i.paciencia)
34 | print(i.ent_rep(["5", "5", "5","5"],"5"))
35 | """
--------------------------------------------------------------------------------
/util.py:
--------------------------------------------------------------------------------
1 | # -*-coding:utf8;-*-
2 | # Junior Obom 26/12/17
3 | # Classe fornecedora de recursos uteis
4 |
5 | import os
6 | import time
7 | import glob
8 | from androidhelper import sl4a
9 | import androidhelper as android
10 | from classificador import Classificador
11 |
12 | droid = android.Android()
13 |
14 |
15 | class Apps(object):
16 | # Classe resposnável por:
17 | # Listar todos aplicativos do dispositivo;
18 | # Identificar um app através de uma entrada( nome ou parte do app )
19 | # Executar o app identificado
20 |
21 | listaapps = []
22 | pacotes = ""
23 |
24 | os.chdir(os.path.dirname(os.path.abspath(__file__))) # Aponta para o arquivo atual
25 | os.chdir("..")
26 | os.chdir("..") # Sobe para o diretório raiz do dispositivo
27 | os.chdir(os.getcwd() + "/Android/data") # Pasta onde ficam localizados os nomes dos pacotes
28 | pacotes = sorted(os.listdir())
29 |
30 | def __init__(self):
31 | pass
32 |
33 | def listarapps(self): # Lista todos aplicativos do dispositivo no formato App/Atividade Principal/ Nome do pacote
34 | apps = droid.getLaunchableApplications() # Obtém a lista das ativiades e nome dos apps
35 |
36 | # Como não estamos trabalhando diretamente com Java não é possivel usar "getpackagemanager" para o obeter o nome dos pacotes, por isso é preciso muito mais código para conseguir um resultado semelhante
37 | listaapps = []
38 |
39 | for i in apps[1]: # Ciclo que organiza as coisas
40 | cl = Classificador()
41 | nomeapp = cl.normalizar(
42 | i) # O nome do app deve ficar em minúsculo para agilizar comparações futuramente
43 | atividade = apps[1][i]
44 |
45 | listaapps.append([nomeapp, atividade])
46 |
47 | self.listaapps = sorted(listaapps) # A variável global recebe a local só que organizada em ordem alfabética
48 |
49 | lapps = self.listaapps
50 | lpacotes = self.pacotes
51 |
52 | for j in lapps: # Ciclo para adicionar os pacotes que foram listados no instaciamento da classe
53 | for i in lpacotes:
54 | if (i in j[1]):
55 | self.listaapps[self.listaapps.index(j)].append(
56 | i) # O app correspondente recebe o nome do pacote agora
57 | lpacotes.pop(lpacotes.index(
58 | i)) # Retira o pacote para não acabar sendo associado a outro app
59 |
60 | self.listaapps = lapps # Adicionando á variavél global
61 |
62 | # A lista a seguir é o conjunto de nomes de pacotes que não puderam ser identificados pelo código e vão ter que ser adicionados manualmente
63 | listanegra = [["com.google.android.apps.youtube.creator", "yt studio"],
64 | ["com.socialnmobile.dictapps.notepad.color.note", "colornote"],
65 | ["com.cyberlink.powerdirector.DRA140225_01", "powerdirector"],
66 | ["com.estrongs.android.pop.pro", "es file explorer pro"],
67 | ["com.iudesk.android.photo.editor", "editor de fotos"],
68 | ["com.zeptolab.thieves.google", "king of thieves"],
69 | ["com.touchtype.swiftkey", "teclado swiftKey"],
70 | ["com.google.android.videos", "play filmes"],
71 | ["com.google.android.music", "play música"],
72 | ["com.google.android.youtube", "youtube"],
73 | ["com.google.android.apps.maps", "maps"],
74 | ["pl.solidexplorer2", "solid explorer"]]
75 |
76 | for i in listanegra: # Vamos adicionar o nome dos pacotes da lista negra a lista global de apps
77 | for j in self.listaapps:
78 | if i[1] == j[0]: # Se tiver o mesmo nome, adicionar o nome do pacote a lista
79 | self.listaapps[self.listaapps.index(j)].append(i[0])
80 |
81 | return
82 |
83 | def abrirapp(self, appsele):
84 | saida = "Nenhum aplicativo correspondente foi encontrado"
85 |
86 | apps = self.listaapps
87 |
88 | for i in apps: # Ciclo para achar a atividade principal do aplicativo selecionado
89 | if (appsele in i[0]) or (i[
90 | 0] in appsele): # Mesmo se a pessoa não falar o nome do app completo deve funcionar
91 |
92 | if (len(i) == 2): # Para os apps que não foi possível carregar o pacote
93 | droid.launch(i[1])
94 | else: # Para os apps que foi possível carregar pacotes carregados
95 | droid.startActivity('android.intent.action.MAIN', None, None, None, False, i[2], i[1])
96 |
97 | saida = ("Abrindo " + i[0])
98 | break
99 |
100 | return saida
101 |
102 |
103 | class Arquivo(object):
104 |
105 | def __init__(self):
106 | pass
107 |
108 | def criar(self, nomearquivo, texto="Junior\nAIA\n0\n"):
109 | os.chdir(os.path.dirname(os.path.abspath(__file__))) # Aponta para o caminho da pasta da IA
110 | caminho = os.getcwd()
111 | arq = open(caminho + nomearquivo, "w+")
112 | arq.writelines(texto) # Algo padrão nos arquivos
113 | arq.close()
114 |
115 | def lertudo(self, complemento="/infos.txt"): # Usando parâmetros default mutáveis para aumentar reutilização
116 |
117 | os.chdir(os.path.dirname(os.path.abspath(__file__))) # Aponta para o caminho da pasta da IA
118 | caminho = os.getcwd() + complemento # Monta o Caminho Completo
119 |
120 | try:
121 | arq = open(caminho, 'r')
122 | except:
123 | # print("Arquivo não existe")
124 | return ["Arquivo não existe", False]
125 |
126 | info = arq.readlines()
127 | arq.close()
128 |
129 | return info # Retorno as informações do aqruivo de inicio
130 |
131 | def gravar(self, caminho, texto): # Parte 1 do Crud
132 |
133 | os.chdir(os.path.dirname(os.path.abspath(__file__))) # Aponta para o caminho da pasta da IA
134 | cc = os.getcwd() + caminho # Monta o Caminho Completo
135 |
136 | arq = open(cc, 'r+')
137 | arq.readlines() # Movendo o ponteiro de gravação para última linha
138 | arq.write(texto + "\n") # Gravando no fim do arquivo
139 |
140 | arq.close() # Fecha o arquivo para evitar bugs
141 |
142 |
143 | class Cronos(object):
144 |
145 | def __init__(self):
146 | pass
147 |
148 | def tempo(self):
149 | t = time.localtime()
150 | hora = t[3]
151 |
152 | periodo = "Boa noite"
153 | if (hora > 0 and hora <= 4): periodo = "Boa madrugada"
154 | if (hora > 4 and hora < 12): periodo = "Bom dia"
155 | if (hora >= 12 and hora < 18): periodo = "Boa tarde"
156 |
157 | # O mês está como número, vamos fazer para adicionar seu nome também
158 | meses = ["Só pra usar o índice 0", "Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Julho",
159 | "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"]
160 |
161 | tempo = [periodo, t[3], t[4], t[2], meses[t[1]], t[0]] # Periodo do dia, hora, minuto, dia, mês, ano
162 | return tempo
163 |
164 |
165 | class Log(object):
166 | listaLogs = [] # Lista geral dos logs
167 |
168 | def __init__(self):
169 | pass
170 |
171 | def reg(self, entrada, saida): # Registra um log padrão com entrada, saída e tempo
172 | cr = Cronos()
173 | agora = cr.tempo()
174 |
175 | log = [entrada, saida, agora]
176 |
177 | self.listaLogs.append(log)
178 |
179 | return True
180 |
181 | def listar(self):
182 | return self.listaLogs
183 |
184 | # Adicionar logs mais avançados que gravem o tipo da interação como "aprendizado", "conversa", "abrir app"
185 |
186 |
187 | class Musicas(object):
188 | # 07/02/2018
189 | # Classe resposnável por:
190 | # Listar todos aqruivos mp3 do dispositivo (memória ienterna e externa);
191 | # Identificar uma música através de uma entrada ( parte do titulo do arquivo mp3 )
192 | # Executar o música identificada
193 | # Controle da música em repodução:
194 | # Parar: Colocar brilho aparelho no máximo
195 | # Pausar/ Despausar: Diminuir brilho no mínimo
196 |
197 | listamusicas = [] # Vai armazenar as músicas e seus respectivos caminhos
198 | nomemusicas = [] # Vai armazenar apenas o nome das músicas
199 |
200 | def __init__(self):
201 | self.locext()
202 | self.locint()
203 |
204 | def listar(self, diretorio_usuario, diretorio): # Função recursiva
205 | if os.path.isdir(diretorio_usuario + diretorio):
206 | os.chdir(diretorio_usuario + diretorio)
207 | for arquivo in glob.glob("*.mp3"):
208 | if os.path.isdir(diretorio_usuario + diretorio + arquivo):
209 | self.listar(diretorio_usuario, diretorio + arquivo + '/')
210 |
211 |
212 | else:
213 | # print ('arquivo: '+diretorio_usuario+diretorio+arquivo)
214 | caminho = str(diretorio_usuario + diretorio + arquivo)
215 | self.listamusicas.append(caminho)
216 | self.nomemusicas.append(arquivo.lower())
217 | else:
218 | print('arquivo: ' + diretorio_usuario + diretorio)
219 |
220 | def tdp(self, caminho): # Retorna todas as pastas de um arquivo
221 | try:
222 | pastas = next(os.walk(caminho))[1] # Lista apenas pastas do diretório
223 | return pastas
224 | except:
225 | return None
226 |
227 | def tda(self, caminho): # Retorna todas as pastas de um arquivo
228 | try:
229 | arquivos = next(os.walk(caminho))[2] # Lista apenas arquivos do diretório
230 | return arquivos
231 | except:
232 | return None
233 |
234 | def locint(self): # Primeiro na memória interna
235 | os.chdir(os.path.dirname(os.path.abspath(__file__))) # Aponta para o arquivo atual
236 | os.chdir(
237 | "..") # Sobe para o diretório raiz do dispositivo # Pasta onde ficam localizados os nomes dos pacotes
238 | os.chdir("..")
239 |
240 | x = os.getcwd()
241 | diretorio_usuario = x + "/"
242 |
243 | musicsd = self.tda(os.getcwd())
244 |
245 | if musicsd != None:
246 | for i in musicsd:
247 | if ".mp3" in i:
248 | musica = diretorio_usuario + i
249 | self.listamusicas.append(musica)
250 |
251 | for i in self.tdp(x):
252 | diretorio = i + "/"
253 | self.listar(diretorio_usuario, diretorio)
254 |
255 | def locext(self): # Agora na memória externa
256 | os.chdir(os.path.dirname(os.path.abspath(__file__))) # Aponta para o arquivo atual
257 |
258 | for i in range(4):
259 | os.chdir(
260 | "..") # Sobe para o diretório raiz do dispositivo # Pasta onde ficam localizados os nomes dos pacotes
261 |
262 | pasext = os.listdir() # Pastas externas, provavelmente o SD está aqui
263 | raiz = os.getcwd() # Raiz
264 |
265 | for i in pasext:
266 | z = raiz + "/" + i + "/"
267 | os.chdir(z) # Das pastas externas
268 |
269 | pastas = self.tdp(os.getcwd()) # Pastas da primeira pasta externa
270 |
271 | if pastas == None: break
272 | for j in pastas:
273 | j = j + "/"
274 |
275 | listar(z, j)
276 |
277 | def locmusica(self,
278 | musica): # Busca uma música em todos os arquivos do dispositivo e se ela existir, retorna seu caminho
279 | saida = "Nenhuma música correspondente encontrada", False
280 |
281 | for i in self.listamusicas:
282 | k = i.lower() # Normalizando a entrada, por enquanto isso apenas deixa tudo em minúsculo
283 | if (musica in k):
284 | return i, True
285 | return saida
286 |
287 | def tocarmusica(self, caminhomusica):
288 |
289 | droid.mediaPlay(caminhomusica)
290 |
291 | print("\nReproduzindo " + caminhomusica)
292 | print("\nAumente o brilho da tela no máximo para parar a reprodução")
293 | print("\nDiminua no mínimo para pausar/despausar")
294 |
295 | brilho = int(droid.getScreenBrightness()[1]) # se brilho já no máximo (255), ajustar pra 254
296 | bmax = 255
297 | bmin = 10
298 | pausado = False
299 |
300 | if brilho == 255: bmax = 254 # Se o brilha já estiver no máximo, vamos testar forçar o usuário a diminuí-lo e aumentá-lo novamente
301 |
302 | if brilho <= 10: bmin = brilho + 1
303 |
304 | brilho = 0 # Pra não bugar o ciclo while seguinte
305 |
306 | while (brilho != bmax): # Para a música se o brilho for aumentado para o máximo
307 | brilho = int(droid.getScreenBrightness()[1])
308 |
309 | if (brilho <= bmin): # Um sistema de Interruptor para identificar quando pausar ou despausar a música
310 | if (pausado == False):
311 | droid.mediaPlayPause()
312 | pausado = True
313 | print("Música pausada")
314 |
315 | else:
316 | droid.mediaPlayStart()
317 | pausado = False
318 | print("Reproduzindo música")
319 |
320 | while (droid.getScreenBrightness()[
321 | 1] <= bmin): # Prende o usuário nesses lopping até tirar o brilho do mínimo
322 | pass
323 |
324 | from time import sleep
325 | sleep(5)
326 |
327 | if (droid.mediaIsPlaying()[1] == False and pausado == False): break # Se a música acabar, saia do ciclo
328 |
329 | if (droid.mediaIsPlaying()[1] == True): # Se existir, pare
330 | droid.mediaPlayClose()
331 |
332 | return "Música encerrada", True
333 |
334 | # Como usar a classe
335 |
336 | # ms= Musicas() # Instancia
337 | # musica=ms.locmusica("lucky") # Retorna o caminho da música e "True" se existir, caso contrário uma mensgem informando que não e "False"
338 | # m=ms.nomemusicas # Retorna uma lsita de todas as músicas, mas não é algo necessáro para reprodução
339 |
340 | # if(musica[1] != False): # Se a música existir
341 | # print(ms.tocarmusica(musica[0])[0])
342 | # else:
343 | # print(musica[0])
344 |
345 |
346 | class Voz(object):
347 | delay = 0.2 # Delay para impedir que uma possível saída anterior seja interpretada como entrada
348 |
349 | def __init__(self):
350 | pass
351 |
352 | def fale(self, texto):
353 | # self.delay=len(texto)
354 | droid = sl4a.Android()
355 | droid.ttsSpeak(texto)
356 | # time.sleep(0.095*self.delay) # Delay para impedir que uma possível saída anterior seja interpretada como entrada
357 |
358 | while (droid.ttsIsSpeaking()[1]): # Espera a fala terminar para sair
359 | pass
360 |
361 | return
362 |
363 | def escute(self):
364 | droid = android.Android()
365 | (id, result, error) = droid.recognizeSpeech("Fale")
366 |
367 | return result # Retorna uma string com o que foi ouvido
368 |
--------------------------------------------------------------------------------