1
0
mirror of https://github.com/MarkParker5/STARK.git synced 2025-07-02 22:36:54 +02:00

finish incapsulation in Command

complete Command.find()
add SmallTalk.ctime
This commit is contained in:
dQz6tMwk8rJqvDR
2020-06-20 23:34:38 +03:00
parent 87cb99e959
commit 217195d119
4 changed files with 161 additions and 48 deletions

View File

@ -14,38 +14,54 @@
# }
#
from abc import ABC, abstractmethod # for abstract class and methods
from abc import ABC, abstractmethod # for abstract class and methods
class Command(ABC):
list = [] # list of all commands
def __init__(this, name, keywords): # initialisation of new command
this.name = name
this.keywords = keywords
Command.list.append(this)
_list = [] # list of all commands
def __init__(this, name, keywords): # initialisation of new command
this._name = name
this._keywords = keywords
Command.append(this)
def _get_kw(this, string):
for weight, array in this.keywords.items():
def __str__(this):
str = f'{this.__class__.__name__}.{this.getName()}:\n'
for key, value in this._keywords.items():
str += f'\t{key}:\t{value}\n'
return str
# control keywords
def _getKeyword(this, string): # return position of keyword
for weight, array in this._keywords.items():
index = 0
for word in array:
if string == word:
return (weight, index)
index += 1
return None
return None # if not found
def removeKeyword(this, string):
position = this._getKeyword(string)
if(position): del this._keywords[ position[0] ][ position[1] ]
def addKeyword(this, weight, string):
if this._getKeyword(string): return
if( this._keywords.get(weight) ): this._keywords[weight].append(string)
else: this._keywords[weight] = [string]
def changeKeyword(this, weight, string):
this.removeKeyword(string)
this.addKeyword(weight, string)
def remove_kw(this, string):
position = this._get_kw(string)
if(position):
del this.keywords[ position[0] ][ position[1] ]
def add_kw(this, weight, string):
if( this.keywords[weight] ): this.keywords[weight].append(string)
else: this.keywords[weight] = [string]
# setters
def setStart(this, function): # define start (required)
this.start = function
def setConfirm(this, function): # define confirm (optional)
this.confirm = function
# getters
def getName(this):
return this._name
def getKeywords(this):
return this._keywords
# static
@staticmethod
def find(string):
print('Find: '+string)
# abstract
@abstractmethod
def start(this, string): # main method
@ -53,3 +69,31 @@ class Command(ABC):
@abstractmethod
def confirm(this): # optional method
pass
# static
@staticmethod
def getList():
return Command._list
@staticmethod
def append(obj):
Command._list.append(obj)
@staticmethod
def find(string):
chances = {}
list = Command.getList()
for i, obj in enumerate( list ):
chances[i] = 0
for weight, words in obj.getKeywords().items():
for word in words:
if word in string:
chances[i] += weight
print(chances)
if( sum( chances.values() ) ):
top = max( chances.values() ) / sum( chances.values() ) * 100
else:
return None
for i, chance in chances.items():
if chance == max( chances.values() ):
return list[i]

View File

@ -1,6 +1,6 @@
# Create class SmallTalk
# Is child of Command
# Module for speaking with voice assistent
# Command is parent for SmallTalk
# See class Command
@ -8,18 +8,8 @@
from Command import Command # import parent class
class SmallTalk(Command):
def __init__(this, name, kw = {}): # initialisation of new command
super().__init__(name, kw) # call Command constructor
def start(this, string): # main method
print('Im using smalltalk now :)')
print('Im using SmallTalk now :)')
def confirm(this): # optional method
return true
# setters
def setStart(this, function): # define start (required)
this.start = function
def setConfirm(this, function): # define confirm (optional)
this.confirm = function
return True

View File

@ -18,14 +18,95 @@
from .SmallTalk import *
import datetime, time
import math
################################################################################
def method(string):
print('Hello')
kw = {
1: ['Lorem', 'ipsum', 'dolor'],
2: ['Lorem2', 'ipsum2', 'dolor2'],
def method():
now = datetime.datetime.now()
if now.hour%20 == 1:
str_hour = ' час'
elif 5 > now.hour%20 > 1:
str_hour = ' часа'
else:
str_hour = ' часов'
if now.minute%10 == 1 and 20<now.minute or now.minute == 1:
str_minute = ' минута '
elif 0 < now.minute%10 < 5 and math.floor(now.minute/10) != 1:
str_minute = ' минуты '
else:
str_minute = ' минут '
#
def get_str(j):
if j==0:
str_num = 'десять'
elif j==1:
str_num = 'один'
elif j==2:
str_num = 'два'
elif j==3:
str_num = 'три'
elif j==4:
str_num = 'четыре'
elif j==5:
str_num = 'пять'
elif j==6:
str_num = 'шесть'
elif j==7:
str_num = 'семь'
elif j==8:
str_num = 'восемь'
else:
str_num = 'девять'
return str_num
def get_str_num(num, bool):
result = ''
for i in [100, 10, 1]:
j = num//i%10
str_num = get_str(j)
if i == 1 and bool:
if j==1:
str_num = 'одна'
elif j==2:
str_num = 'две'
if str_num=='десять':
continue
elif i==10 and j == 1:
j = int(num%10)
str_num = get_str(j)
if j==0:
str_num = ''
elif j==2:
str_num = 'две'
elif j==4:
str_num = 'четыр'
elif j==5:
str_num = 'пят'
str_num += 'надцать'
if j==0:
str_num = 'десять'
result += str_num
break
elif i==10:
if j==4:
str_num = 'сорок'
elif j<5:
str_num += 'дцать'
elif j==9:
str_num = 'девяноста'
else:
str_num += 'десят'
result += ' '+str_num
return result
return f'Сейчас{get_str_num(now.hour, 0)}{str_hour},{get_str_num(now.minute, 1)}{str_minute}'
keywords = {
5: ['который час', 'сколько времени', 'время', 'часов'],
2: ['текущее', 'сейчас', 'час'],
0.5: ['сколько']
}
hello = SmallTalk('First', kw)
hello.setStart(method)
ctime = SmallTalk('Current Time', keywords)
ctime.setStart(method)
################################################################################

10
test.py
View File

@ -1,11 +1,9 @@
# File for test modules
# Program work only here
# :)
from Command import Command
import SmallTalk
from SmallTalk import *
string = 'Который час?'
hello.start('Lorem')
print(hello.keywords)
hello.remove_kw('Lorem2')
print(hello.keywords)
print(Command.find(string).start())