キチェ語コースはまだ挨拶に留まっているけど単語数は増えてきた。動詞はまだ、殆どないけど。
コースの進行と共にKotz’ij(Kotz’i’j)も少しずつ賢くならないと!
単語リストについては後ほど書こうと思うけどGoogle SheetsからLaTex変換する方法があったので、今後はGoogle Sheetsで管理しようと思う。空いた時間に単語を入力するのはブラウザからの方がファイル管理の意味でも楽。バックアップとしては.txtファイルに変換したものをGitで管理する訳だし。
今回のプログラムにはパターン認識を新たに追加。取り敢えず三つの単語に反応する様にした。
パターン認識用の.txtファイルを新たに作成(こちら)。これはdictionariesフォルダ内に。新たにDictionary.rbを作成。
Dictionary.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
class Dictionary def initialize @random = [] open('dictionaries/list01.txt') do |f| f.each do |line| line.chomp! next if line.empty? @random.push(line) end end @pattern = [] open('dictionaries/patterns01.txt') do |f| f.each do |line| pattern, phrases = line.chomp.split("\t") #split by tab next if pattern.nil? or phrases.nil? @pattern.push({'pattern'=>pattern, 'phrases'=>phrases}) end end end attr_reader :random, :pattern end |
それからKotzij.rbとResponder.rbを編集
Kotzij.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
require './Responder' require './Dictionary' class Kotzij def initialize @dictionary = Dictionary.new @responderWhat = WhatResponder.new('Kotz\'ij', @dictionary) @responderRandom = RandomResponder.new('Kotz\'ij', @dictionary) @responderPatterns = PatternResponder.new('Kotz\'ij', @dictionary) @responder = @responderRandom end def dialogue(input) case rand(5) when 0 @responder = @responderWhat when 1..2 @responder = @responderRandom else @responder = @responderPatterns end return @responder.response(input) end def responderName return @responder.name end attr_reader :name end def randomSelect(ary) return ary[rand(ary.size)] end |
Responder.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
class Responder def initialize(name, dictionary) @name = name @dictionary = dictionary end def response(input) return '' end attr_reader :name end class WhatResponder < Responder def response(input) "Jas #{input}?" end end class RandomResponder < Responder def response(input) return randomSelect(@dictionary.random) end end class PatternResponder < Responder def response(input) @dictionary.pattern.each do |patternItems| if m = input.match(patternItems['pattern']) resp = randomSelect(patternItems['phrases'].split('|')) return resp.gsub(/%match%/, m.to_s) end end return randomSelect(@dictionary.random) end end |
Tzijonik.rbは今回も日付とバージョン番号の変更のみ。