
commit
948c542d8b
6 changed files with 18375 additions and 0 deletions
@ -0,0 +1,18 @@ |
|||
Ehi, stronzi, mettetevi in fila |
|||
sei il 137 scocciatore che entra |
|||
numero 789 devi pagare se vuoi entrare |
|||
macchissei, maddovecazzovai ? |
|||
cazzo hai da toccare, eh ? |
|||
Ti pare di dover toccare tutto quello che ti capita? |
|||
Che palle, spegnetemi |
|||
mi spiace, ma ho perso il conto |
|||
ronf ronf |
|||
Credo tu sia il visitatore numero 894, ero in stand by... |
|||
Ho troppi processi in background e non riesco più a contare i visitatori |
|||
Ha senso contare tutti i visitatori che pigiano il pulsante? |
|||
Buon giorno lei e' il 296 visitatore, prego e buona permanenza |
|||
Sei il visitatore numero 353, spero che questo sia di tuo gradimento |
|||
Siii, daiii, cosiii' |
|||
Ahi, mi hai fatto male |
|||
Non toccarmi cosi', ti prego |
|||
Il fatto che io abbia un bottone non significa che desidero che sia tu a toccarlo! |
File diff suppressed because one or more lines are too long
@ -0,0 +1,4 @@ |
|||
#!/bin/bash |
|||
|
|||
pico2wave -l it-IT -w tmp.wav "$@" |
|||
|
@ -0,0 +1,299 @@ |
|||
#!/usr/bin/env python |
|||
# -*- coding: iso-8859-15 -*- |
|||
|
|||
# /usr/local/bin/scatolo.py |
|||
# |
|||
######################################################################## |
|||
# File : scatolo.py |
|||
# Project : scatolo talking Machine |
|||
# Version : 1.0.0 |
|||
# Author : giodim & Unit team |
|||
# Comment : |
|||
# 06.07.2017 - Version 1.0.0 developement |
|||
######################################################################## |
|||
# Copyright 2015 GioDim <giodim1317@gmail.com> |
|||
# |
|||
# This program is free software; you can redistribute it and/or modify |
|||
# it under the terms of the GNU General Public License as published by |
|||
# the Free Software Foundation; either version 2 of the License, or |
|||
# (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU General Public License |
|||
# along with this program; if not, write to the Free Software |
|||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, |
|||
# MA 02110-1301, USA. |
|||
######################################################################## |
|||
|
|||
|
|||
######################################################################## |
|||
# Import |
|||
######################################################################## |
|||
|
|||
import os |
|||
import time |
|||
import subprocess |
|||
import random |
|||
|
|||
from string import ascii_letters |
|||
from random import choice |
|||
|
|||
######################################################################## |
|||
# Constants |
|||
######################################################################## |
|||
|
|||
DADA_FILE = "scatolo_v0.1_iotunoi.pb" |
|||
MARKOV_FILE = "macao.txt" |
|||
EDITED_FILE = "humor.txt" |
|||
|
|||
DADA_CMD = "dada" |
|||
GEN_CMD = "/usr/local/bin/pico.sh" |
|||
PLAY_CMD = ["aplay", "tmp.wav"] |
|||
|
|||
MAX_RND = 100 |
|||
|
|||
DADA_WEIGHT = 30 |
|||
MARKOV_WEIGHT = 90 |
|||
|
|||
MARKOV_MAX_WORD = 20 |
|||
|
|||
######################################################################## |
|||
# Global Variables |
|||
######################################################################## |
|||
|
|||
Debug = True |
|||
Word_List = [] |
|||
Associations = [] |
|||
Humor_Text = [] |
|||
|
|||
######################################################################## |
|||
# Class : _Getch |
|||
# Comment : |
|||
######################################################################## |
|||
|
|||
class _Getch: |
|||
"""Gets a single character from standard input. Does not echo to the screen.""" |
|||
def __init__(self): |
|||
try: |
|||
self.impl = _GetchWindows() |
|||
except ImportError: |
|||
self.impl = _GetchUnix() |
|||
|
|||
def __call__(self): return self.impl() |
|||
|
|||
######################################################################## |
|||
# Class : _GetchUnix |
|||
# Comment : |
|||
######################################################################## |
|||
|
|||
class _GetchUnix: |
|||
def __init__(self): |
|||
import tty, sys |
|||
|
|||
def __call__(self): |
|||
import sys, tty, termios |
|||
fd = sys.stdin.fileno() |
|||
old_settings = termios.tcgetattr(fd) |
|||
try: |
|||
tty.setraw(sys.stdin.fileno()) |
|||
ch = sys.stdin.read(1) |
|||
finally: |
|||
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) |
|||
return ch |
|||
|
|||
######################################################################## |
|||
# Class : _GetchWindows |
|||
# Comment : |
|||
######################################################################## |
|||
|
|||
class _GetchWindows: |
|||
def __init__(self): |
|||
import msvcrt |
|||
|
|||
def __call__(self): |
|||
import msvcrt |
|||
return msvcrt.getch() |
|||
|
|||
######################################################################## |
|||
# Function : Markov_Get_Word_List |
|||
# Input : |
|||
# Output : |
|||
# Comment : |
|||
######################################################################## |
|||
|
|||
def Markov_Get_Word_List (text) : |
|||
# Define a set of allowed letters |
|||
allowed_letters = ascii_letters + "áàéèíìóòúù" + "ÁÀÉÈÍÌÓÒÚÙ" + "'." |
|||
# Keep only the allowed replacing the others with a space |
|||
text = "".join (c.lower () |
|||
if c in allowed_letters else " " |
|||
for c in text) |
|||
# Split by words, using space as separator |
|||
return text.split () |
|||
|
|||
######################################################################## |
|||
# Function : Markov_Get_Associations |
|||
# Input : |
|||
# Output : |
|||
# Comment : |
|||
######################################################################## |
|||
|
|||
def Markov_Get_Associations (word_list): |
|||
# Build a dictionary where each word is a key, and the values are the list |
|||
# of the words that follow the key one |
|||
# ['a', 'b', 'a', 'c'] became {'a': ['b', 'c'], 'b': ['a']} |
|||
associations = {} |
|||
for i, word in enumerate(word_list[:-1]): |
|||
if word not in associations: |
|||
associations[word] = [] |
|||
associations[word].append(word_list[i+1]) |
|||
return associations |
|||
|
|||
######################################################################## |
|||
# Function : Markov_Build_Chains |
|||
# Input : |
|||
# Output : |
|||
# Comment : |
|||
######################################################################## |
|||
|
|||
def Markov_Build_Chains (text) : |
|||
global Word_List |
|||
global Associations |
|||
|
|||
Word_List = Markov_Get_Word_List (text) |
|||
Associations = Markov_Get_Associations (Word_List) |
|||
|
|||
######################################################################## |
|||
# Function : Markov_Generator |
|||
# Input : |
|||
# Output : |
|||
# Comment : |
|||
######################################################################## |
|||
|
|||
def Markov_Generator (max_words=MARKOV_MAX_WORD): |
|||
out_list = [] |
|||
current_word = choice (Word_List) |
|||
|
|||
for i in range (max_words): |
|||
out_list.append(current_word) |
|||
choice_list = Associations.get (current_word, Word_List) |
|||
|
|||
if current_word.endswith ("."): |
|||
break |
|||
|
|||
current_word = choice (choice_list) |
|||
|
|||
out_string = " ".join (out_list) |
|||
out_string = out_string.replace (" .", ".") |
|||
out_string = out_string [0].upper () + out_string [1:] |
|||
|
|||
return out_string |
|||
|
|||
######################################################################## |
|||
# Function : Dada_Generator |
|||
# Input : |
|||
# Output : |
|||
# Comment : |
|||
######################################################################## |
|||
|
|||
def Dada_Generator (nomef) : |
|||
|
|||
if (not os.path.exists (nomef)) : |
|||
return " " |
|||
|
|||
testo_dada = subprocess.check_output ([DADA_CMD, nomef]) |
|||
testo_dada.replace ('\n', '').replace ('\r', '') |
|||
|
|||
return testo_dada |
|||
|
|||
######################################################################## |
|||
# Function : File_Load |
|||
# Input : |
|||
# Output : |
|||
# Comment : |
|||
######################################################################## |
|||
|
|||
def File_Load (nomef) : |
|||
global Humor_Text |
|||
|
|||
if (not os.path.exists (nomef)) : |
|||
return |
|||
|
|||
for buf in open (nomef) : |
|||
Humor_Text.append (buf.rstrip ('\n')) |
|||
|
|||
######################################################################## |
|||
# Function : File_Rand_Generator |
|||
# Input : |
|||
# Output : |
|||
# Comment : |
|||
######################################################################## |
|||
|
|||
def File_Rand_Generator () : |
|||
return choice (Humor_Text) |
|||
|
|||
######################################################################## |
|||
# Function : Play |
|||
# Input : |
|||
# Output : |
|||
# Comment : |
|||
######################################################################## |
|||
|
|||
def Play (text_to_play) : |
|||
if (text_to_play == "") or (text_to_play == " ") : |
|||
return |
|||
|
|||
if (Debug == True) : |
|||
print (text_to_play) |
|||
|
|||
subprocess.call ([GEN_CMD, text_to_play]) |
|||
subprocess.check_output (PLAY_CMD) |
|||
|
|||
######################################################################## |
|||
# Function : |
|||
# Input : |
|||
# Output : |
|||
# Comment : |
|||
######################################################################## |
|||
|
|||
random.seed () |
|||
mygetch = _Getch() |
|||
|
|||
with open (MARKOV_FILE) as f: |
|||
Markov_Build_Chains (f.read()) |
|||
|
|||
File_Load (EDITED_FILE) |
|||
|
|||
while (True) : |
|||
|
|||
print "prompt ", |
|||
|
|||
ch = mygetch () |
|||
|
|||
if (ch != " ") : |
|||
time.sleep (1) |
|||
continue |
|||
|
|||
idx = int (random.random () * MAX_RND) |
|||
|
|||
if (Debug == True) : |
|||
print ("Idx=", idx) |
|||
|
|||
if (idx < DADA_WEIGHT) : |
|||
if (Debug == True) : |
|||
print ("DADA ") |
|||
testo = Dada_Generator (DADA_FILE) |
|||
elif (idx >= DADA_WEIGHT) and (idx < MARKOV_WEIGHT) : |
|||
if (Debug == True) : |
|||
print ("MARKOV ") |
|||
testo = Markov_Generator () |
|||
else : |
|||
if (Debug == True) : |
|||
print ("FILE ") |
|||
testo = File_Rand_Generator () |
|||
|
|||
Play (testo) |
File diff suppressed because it is too large
Loading…
Reference in new issue