scatolo first commit
This commit is contained in:
commit
948c542d8b
18
humor.txt
Normal file
18
humor.txt
Normal file
|
@ -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!
|
299
scatolo.py
Executable file
299
scatolo.py
Executable file
|
@ -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)
|
17808
scatolo_v0.1_iotunoi.pb
Normal file
17808
scatolo_v0.1_iotunoi.pb
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user