forked from robot-syndicate/scatolo_run
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