Browse Source

scatolo first commit

master
Pippo 3 years ago
commit
948c542d8b
6 changed files with 18375 additions and 0 deletions
  1. +0
    -0
      README.md
  2. +18
    -0
      humor.txt
  3. +246
    -0
      macao.txt
  4. +4
    -0
      pico.sh
  5. +299
    -0
      scatolo.py
  6. +17808
    -0
      scatolo_v0.1_iotunoi.pb

+ 0
- 0
README.md View File


+ 18
- 0
humor.txt View 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!

+ 246
- 0
macao.txt
File diff suppressed because it is too large
View File


+ 4
- 0
pico.sh View File

@@ -0,0 +1,4 @@
#!/bin/bash

pico2wave -l it-IT -w tmp.wav "$@"


+ 299
- 0
scatolo.py View 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
- 0
scatolo_v0.1_iotunoi.pb
File diff suppressed because it is too large
View File


Loading…
Cancel
Save