Talkto -- 使用 JavaScript 建立的交談機器人

程式作品

C 語言

Java

C#

JavaScript

常用函數

文字處理

遊戲程式

衛星定位

系統程式

資料結構

網路程式

自然語言

人工智慧

機率統計

資訊安全

等待完成

訊息

相關網站

參考文獻

最新修改

簡體版

English

專案下載:talkto.zip

執行方法

請連到下列網址,然後開始與這個機器人交談。

http://dl.dropbox.com/u/13828995/talkto/talkto.htm#!ccc.txt

程式範例

<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
  <SCRIPT language="JavaScript" SRC="jquery.js"></SCRIPT>
</head>
<body>
  <div>
   請輸入問題:
   <input id="say" name="say" type="text" value="我想去峇里島" size="80" onkeydown="keyin(event)"/>
   <input type="submit" value="送出" onclick="say()"/>
  </div>
  <BR/>
  <textarea id="rules" style="display:none;">
  </textarea>
  <div id="dialogBox" style="width:95%; height:80%; overflow:auto; border:ridge 1px #888888; ">
  </div>
  <script type="text/javascript">
    $(document).ready(function() {
      var r=new RegExp("\\#!([\\w/:\\.]+)", "gi");
      if (location.href.match(r)) {
        var ruleFile = RegExp.$1;
        $('#rules').load(ruleFile, onRuleLoaded);
      }
    });
 
    function QA(Q, A) {
      this.Q = Q;
      this.A = A;
      this.toString = function() {
        return "Q:"+Q+" A:"+A+"\n";
      }
    }
 
    var qaList = new Array();
 
    function onRuleLoaded() {
        var ruleText = document.getElementById("rules").value;
        var rules = ruleText.replace(/\r/gi, "").replace(/\n/gi, "#").split("Q:");
        for (i in rules) {
          if (rules[i].match(/^([^#]*)#([^$]*)$/gi)) {
            var q = RegExp.$1;
            var a = RegExp.$2;
            q = q.replace(/\s/gi, "");
            a = a.replace(/##/gi, "").replace(/#/gi, "|");
            var qa = new QA(q,a);
            qaList.push(qa);
          }
        } 
    }
 
    function say() {
      append(document.getElementById("say").value);
      answer();
    }
 
    function random(n) {
      return Math.floor(Math.random()*n);
    }
 
    function keyin(event) {
      var keyCode = event.which;
      if (keyCode == 13) {
        append(document.getElementById("say").value);
        answer();
      }
    }
 
    function append(line) {
      var dialogBox = document.getElementById("dialogBox");
      dialogBox.innerHTML += line+"<BR/>";
      dialogBox.scrollTop = dialogBox.scrollHeight;
    }
 
    function answer() {
      append(">> "+getAnswer());
      append("");
    }
 
    function getAnswer() {
      var say = document.getElementById("say").value;
      for (qai in qaList) {
        var qa = qaList[qai];
        var qList = qa.Q.split("|");
        var aList = qa.A.split("|");
        for (qi in qList) {
          var r = new RegExp("(.*)"+qList[qi]+"([^?.;]*)", "gi");
          if (say.match(r)) {
            var tail = RegExp.$2;
            return aList[random(aList.length)].replace(/\*/, tail);
          }
        }
      }
      return "然後呢?";
    }    
  </script>
</body>
</html>

規則檔案:ccc.txt

Q:謝謝
不客氣!

Q:對不起 | 抱歉 | 不好意思
別說抱歉 !
別客氣,儘管說 !

Q:可否 | 可不可以
你確定想*?

Q:我想
你為何想*?

Q:我要
你為何要*?

Q:你是
你認為我是*?

Q:認為 | 以為
為何說*?

Q:感覺
常有這種感覺嗎?

Q:為何不
你希望我*!

Q:是否
為何想知道是否*?

Q:不能
為何不能*?
你試過了嗎?
或許你現在能*了呢?

Q:我是
你好,久仰久仰!

Q:甚麼 | 什麼 | 何時 | 誰 | 哪裡 | 如何 | 為何 | 因何
為何這樣問?
為何你對這問題有興趣?
你認為答案是甚麼呢?
你認為如何呢?
你常問這類問題嗎?
這真的是你想知道的嗎?
為何不問問別人?
你曾有過類似的問題嗎?
你問這問題的原因是甚麼呢?

Q:原因
這是真正的原因嗎?
還有其他原因嗎?

Q:理由
這說明了甚麼呢?
還有其他理由嗎?

Q:你好 | 嗨 | 您好
你好,有甚麼問題嗎?

Q:或許
你好像不太確定?

Q:不曉得 | 不知道
為何不知道?
在想想看,有沒有甚麼可能性?

Q:不想 | 不希望
有沒有甚麼辦法呢?
為何不想*呢?
那你希望怎樣呢?

Q:想 | 希望
為何想*呢?
真的想*?
那就去做阿?
為何不呢?

Q:不
為何不*?

Q:請
我該如何*呢?
你想要我*嗎?

Q:你
你真的是在說我嗎?
別說我了,談談你吧!
為何這麼關心我*?
不要再說我了,談談你吧!
你自己*

Q:總是 | 常常
能不能具體說明呢?
何時?

Q:像
有多像?
哪裡像?

Q:對
你確定嗎?
我了解!

Q:朋友
多告訴我一些有關他的事吧!
你認識他多久了呢?

Q:電腦
你說的電腦是指我嗎?

Q:難過
別想它了
別難過
別想那麼多了
事情總是會解決的

Q:高興
不錯ㄚ
太棒了
這樣很好ㄚ

Q:是阿|是的
甚麼事呢?
我可以幫助你嗎?
我希望我能幫得上忙!

Q:比對失敗
我了解
我能理解
還有問題嗎 ?
請繼續說下去
可以說的更詳細一點嗎?
這樣喔! 我知道!
然後呢? 發生甚麼事?
再來呢? 可以多說一些嗎
接下來呢? 
可以多告訴我ㄧ些嗎?
多談談有關你的事,好嗎?
祝福你
想多聊ㄧ聊嗎
可否多告訴我ㄧ些呢?

執行結果

talktoRun.png

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License