├── .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 | 11 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 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 | --------------------------------------------------------------------------------