scatolo first commit

master
Pippo 2017-07-14 13:09:45 +02:00
コミット 948c542d8b
6個のファイルの変更18375行の追加0行の削除

0
README.md 100644
ファイルの表示

18
humor.txt 100644
ファイルの表示

@ -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
macao.txt 100644

長すぎる行があるためファイル差分は表示されません

4
pico.sh 100755
ファイルの表示

@ -0,0 +1,4 @@
#!/bin/bash
pico2wave -l it-IT -w tmp.wav "$@"

299
scatolo.py 100755
ファイルの表示

@ -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)

ファイル差分が大きすぎるため省略します 差分を読み込み