{"id":22065072,"url":"https://github.com/wilddylan/smartbutt","last_synced_at":"2026-04-07T08:31:58.814Z","repository":{"id":84799601,"uuid":"97363682","full_name":"wilddylan/SmartButt","owner":"wilddylan","description":"Awesome chat bot","archived":false,"fork":false,"pushed_at":"2017-07-16T12:15:20.000Z","size":29,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-05-29T15:15:21.980Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wilddylan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-07-16T06:06:04.000Z","updated_at":"2018-04-18T01:44:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"6551aa35-adcf-4dca-93fc-96efb6f1bbdc","html_url":"https://github.com/wilddylan/SmartButt","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/wilddylan/SmartButt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wilddylan%2FSmartButt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wilddylan%2FSmartButt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wilddylan%2FSmartButt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wilddylan%2FSmartButt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wilddylan","download_url":"https://codeload.github.com/wilddylan/SmartButt/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wilddylan%2FSmartButt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31506562,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-30T19:14:53.839Z","updated_at":"2026-04-07T08:31:58.801Z","avatar_url":"https://github.com/wilddylan.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SmartButt\nAwesome chat bot\n\n项目环境：JDK1.8，Maven3.39，IDEA  \n项目仓库：[Github地址](https://github.com/WildDylan/SmartButt.git)\n目前数据库表结构：\n![表结构](http://upload-images.jianshu.io/upload_images/144590-2509f1d2ae9bcd9d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n\n`t_corpus_base`：基础预料表，存储所有的会话，目前为创建普通索引，完整匹配（`select * from t_corpus_base  where content = '你好' limit 1`）。在后续文章中会修改为`%`匹配，到时候再做全文检索。\n\n|base|类型|注释|索引|\n|:-------------|:-------------|:-----|:-----|\n|id|int|id|PRIMIRY|\n|content|varchar(300)|内容|varchar(150)|\n\n`t_corpus_tree`：对应表，`qid`为会话开始ID，`aid`为该句话对应的回答或者下一个用户可能的问题，后续会做一些表结构的调整。暂时够基础功能使用。\n\n| tree |类型|注释|索引|\n|:-------------|:-------------|:-----|:-----|\n|id|int|id|PRIMIRY|\n|qid|int|会话开始ID|int|\n|aid|int|会话下一个ID|int|\n\n`t_corpus_butt`：在`tree`中没有查到的内容，暂时放到这里，用于接下来的学习。表结构后续会发生大的变化，当前仅做存储未查询到的会话。\n\n| butt |类型|注释|索引|\n|:-------------|:-------------|:-----|:-----|\n|id|int|id|PRIMIRY|\n|qid|int|会话开始ID|int|\n\n\u003e 表设计请遵循单一功能原则\n\nmaven 依赖库与模块划分（够支持当前所需，后续有需求再增加）：\n```xml\n    \u003cmodules\u003e\n        \u003cmodule\u003emodel\u003c/module\u003e\n        \u003cmodule\u003edao\u003c/module\u003e\n        \u003cmodule\u003eservice\u003c/module\u003e\n        \u003cmodule\u003ecommon\u003c/module\u003e\n        \u003cmodule\u003eweb\u003c/module\u003e\n    \u003c/modules\u003e\n\n    \u003cproperties\u003e\n        \u003cspring.version\u003e4.3.5.RELEASE\u003c/spring.version\u003e\n        \u003cmybatis.version\u003e3.4.1\u003c/mybatis.version\u003e\n        \u003cmybatis-spring.version\u003e1.3.1\u003c/mybatis-spring.version\u003e\n        \u003cmysql.version\u003e6.0.6\u003c/mysql.version\u003e\n    \u003c/properties\u003e\n\n    \u003cdependencies\u003e\n        \u003c!-- Spring包 --\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.springframework\u003c/groupId\u003e\n            \u003cartifactId\u003espring-core\u003c/artifactId\u003e\n            \u003cversion\u003e${spring.version}\u003c/version\u003e\n            \u003cexclusions\u003e\n                \u003cexclusion\u003e\n                    \u003cgroupId\u003ecommons-logging\u003c/groupId\u003e\n                    \u003cartifactId\u003ecommons-logging\u003c/artifactId\u003e\n                \u003c/exclusion\u003e\n            \u003c/exclusions\u003e\n        \u003c/dependency\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.springframework\u003c/groupId\u003e\n            \u003cartifactId\u003espring-web\u003c/artifactId\u003e\n            \u003cversion\u003e${spring.version}\u003c/version\u003e\n        \u003c/dependency\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.springframework\u003c/groupId\u003e\n            \u003cartifactId\u003espring-webmvc\u003c/artifactId\u003e\n            \u003cversion\u003e${spring.version}\u003c/version\u003e\n        \u003c/dependency\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.springframework\u003c/groupId\u003e\n            \u003cartifactId\u003espring-context-support\u003c/artifactId\u003e\n            \u003cversion\u003e${spring.version}\u003c/version\u003e\n        \u003c/dependency\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.springframework\u003c/groupId\u003e\n            \u003cartifactId\u003espring-tx\u003c/artifactId\u003e\n            \u003cversion\u003e${spring.version}\u003c/version\u003e\n        \u003c/dependency\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.springframework\u003c/groupId\u003e\n            \u003cartifactId\u003espring-aspects\u003c/artifactId\u003e\n            \u003cversion\u003e${spring.version}\u003c/version\u003e\n        \u003c/dependency\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.springframework\u003c/groupId\u003e\n            \u003cartifactId\u003espring-jdbc\u003c/artifactId\u003e\n            \u003cversion\u003e${spring.version}\u003c/version\u003e\n        \u003c/dependency\u003e\n\n        \u003c!-- redis cache related.....start --\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.springframework.data\u003c/groupId\u003e\n            \u003cartifactId\u003espring-data-redis\u003c/artifactId\u003e\n            \u003cversion\u003e1.6.0.RELEASE\u003c/version\u003e\n        \u003c/dependency\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eredis.clients\u003c/groupId\u003e\n            \u003cartifactId\u003ejedis\u003c/artifactId\u003e\n            \u003cversion\u003e2.7.3\u003c/version\u003e\n        \u003c/dependency\u003e\n        \u003c!-- redis cache related.....end --\u003e\n\n        \u003c!-- mybatis驱动包 --\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.mybatis\u003c/groupId\u003e\n            \u003cartifactId\u003emybatis\u003c/artifactId\u003e\n            \u003cversion\u003e${mybatis.version}\u003c/version\u003e\n        \u003c/dependency\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.mybatis\u003c/groupId\u003e\n            \u003cartifactId\u003emybatis-spring\u003c/artifactId\u003e\n            \u003cversion\u003e${mybatis-spring.version}\u003c/version\u003e\n        \u003c/dependency\u003e\n\n        \u003c!-- mysql驱动包 --\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003emysql\u003c/groupId\u003e\n            \u003cartifactId\u003emysql-connector-java\u003c/artifactId\u003e\n            \u003cversion\u003e${mysql.version}\u003c/version\u003e\n        \u003c/dependency\u003e\n\n        \u003c!-- dbcp数据源 --\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003ecom.alibaba\u003c/groupId\u003e\n            \u003cartifactId\u003edruid\u003c/artifactId\u003e\n            \u003cversion\u003e1.0.29\u003c/version\u003e\n        \u003c/dependency\u003e\n\n        \u003c!-- junit测试包 --\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003ejunit\u003c/groupId\u003e\n            \u003cartifactId\u003ejunit\u003c/artifactId\u003e\n            \u003cversion\u003e4.11\u003c/version\u003e\n            \u003cscope\u003etest\u003c/scope\u003e\n        \u003c/dependency\u003e\n\n        \u003c!-- json数据 --\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.codehaus.jackson\u003c/groupId\u003e\n            \u003cartifactId\u003ejackson-mapper-asl\u003c/artifactId\u003e\n            \u003cversion\u003e1.9.13\u003c/version\u003e\n        \u003c/dependency\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.codehaus.jackson\u003c/groupId\u003e\n            \u003cartifactId\u003ejackson-core-asl\u003c/artifactId\u003e\n            \u003cversion\u003e1.9.13\u003c/version\u003e\n        \u003c/dependency\u003e\n\n        \u003c!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003ecom.alibaba\u003c/groupId\u003e\n            \u003cartifactId\u003efastjson\u003c/artifactId\u003e\n            \u003cversion\u003e1.2.34\u003c/version\u003e\n        \u003c/dependency\u003e\n\n        \u003c!-- log4j日志包 --\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eorg.slf4j\u003c/groupId\u003e\n            \u003cartifactId\u003ejcl-over-slf4j\u003c/artifactId\u003e\n            \u003cversion\u003e1.7.20\u003c/version\u003e\n        \u003c/dependency\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003ech.qos.logback\u003c/groupId\u003e\n            \u003cartifactId\u003elogback-classic\u003c/artifactId\u003e\n            \u003cversion\u003e1.1.7\u003c/version\u003e\n        \u003c/dependency\u003e\n\n        \u003c!-- jstl 标签库 --\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003ejstl\u003c/groupId\u003e\n            \u003cartifactId\u003ejstl\u003c/artifactId\u003e\n            \u003cversion\u003e1.2\u003c/version\u003e\n        \u003c/dependency\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003etaglibs\u003c/groupId\u003e\n            \u003cartifactId\u003estandard\u003c/artifactId\u003e\n            \u003cversion\u003e1.1.2\u003c/version\u003e\n        \u003c/dependency\u003e\n\n        \u003c!--分词--\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eedu.stanford.nlp\u003c/groupId\u003e\n            \u003cartifactId\u003estanford-corenlp\u003c/artifactId\u003e\n            \u003cversion\u003e3.8.0\u003c/version\u003e\n        \u003c/dependency\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eedu.stanford.nlp\u003c/groupId\u003e\n            \u003cartifactId\u003estanford-corenlp\u003c/artifactId\u003e\n            \u003cversion\u003e3.8.0\u003c/version\u003e\n            \u003cclassifier\u003emodels\u003c/classifier\u003e\n        \u003c/dependency\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003eedu.stanford.nlp\u003c/groupId\u003e\n            \u003cartifactId\u003estanford-corenlp\u003c/artifactId\u003e\n            \u003cversion\u003e3.8.0\u003c/version\u003e\n            \u003cclassifier\u003emodels-chinese\u003c/classifier\u003e\n        \u003c/dependency\u003e\n    \u003c/dependencies\u003e\n\n    \u003cbuild\u003e\n        \u003cfinalName\u003esmart\u003c/finalName\u003e\n        \u003cplugins\u003e\n            \u003cplugin\u003e\n                \u003cgroupId\u003eorg.apache.maven.plugins\u003c/groupId\u003e\n                \u003cartifactId\u003emaven-compiler-plugin\u003c/artifactId\u003e\n                \u003cversion\u003e3.3\u003c/version\u003e\n                \u003cconfiguration\u003e\n                    \u003csource\u003e1.8\u003c/source\u003e\n                    \u003ctarget\u003e1.8\u003c/target\u003e\n                \u003c/configuration\u003e\n            \u003c/plugin\u003e\n            \u003cplugin\u003e\n                \u003cgroupId\u003eorg.eclipse.jetty\u003c/groupId\u003e\n                \u003cartifactId\u003ejetty-maven-plugin\u003c/artifactId\u003e\n                \u003cversion\u003e9.2.1.v20140609\u003c/version\u003e\n                \u003cconfiguration\u003e\n                    \u003chttpConnector\u003e\n                        \u003cport\u003e9441\u003c/port\u003e\n                    \u003c/httpConnector\u003e\n                    \u003cscanIntervalSeconds\u003e2\u003c/scanIntervalSeconds\u003e\n                \u003c/configuration\u003e\n            \u003c/plugin\u003e\n        \u003c/plugins\u003e\n    \u003c/build\u003e\n```\n\njdbc.properties（注意URL后边的参数）: \n```\njdbc.driver=com.mysql.jdbc.Driver\njdbc.url=jdbc:mysql://localhost:3306/smart-butt?useUnicode=true\u0026characterEncoding=UTF-8\u0026zeroDateTimeBehavior=convertToNull\u0026allowMultiQueries=true\u0026useSSL=false\njdbc.username=\njdbc.password=\n```\n#### Maven 基于idea的多模块项目搭建\n\n有太多的文章都是授之鱼而非渔。准备 IDEA，MAVEN 和 JDK的环境\n1. [JDK](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)下载安装与配置，[MAVEN](https://maven.apache.org/download.cgi)下载安装与配置，[IDEA](https://www.jetbrains.com/idea/download/#section=mac)下载与[破解](http://idea.qinxi1992.cn)\n2. 打开IDEA，新建maven项目\n![img_1.png](http://upload-images.jianshu.io/upload_images/144590-d7176ff7ee3c3113.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n![img_2.png](http://upload-images.jianshu.io/upload_images/144590-f65c1d602638af8d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n![img_3.png](http://upload-images.jianshu.io/upload_images/144590-b71d75bb079e55a2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n![img_4.png](http://upload-images.jianshu.io/upload_images/144590-348c8b48afb3aa7f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n\n下面开始新建模块：\n\n![img_5.png](http://upload-images.jianshu.io/upload_images/144590-ba34f48a7f2283df.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n![img_6.png](http://upload-images.jianshu.io/upload_images/144590-7f5b4a0473e1d58f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n![img_7.png](http://upload-images.jianshu.io/upload_images/144590-309566f76692a750.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n![img_8.png](http://upload-images.jianshu.io/upload_images/144590-0e9aee4389bf62a0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n这里做第一个示例，接下来同样的步骤创建完 service, model, dao（注意不要创建web）。此时的项目结构是：\n![img_9.png](http://upload-images.jianshu.io/upload_images/144590-26572dae1f89a2cb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\nweb 有些特殊，是这样创建的：\n![img_10.png](http://upload-images.jianshu.io/upload_images/144590-1fc5d97de3b9ffae.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n一直Next到底就好了。\n\n---\n\n接下来我们开始配置模块的依赖关系：\n```\nweb：common, service, model\nservice: common, model, dao\ndao: model\n```\nMac 下使用 `command + ;` 打开项目架构先进行dao 的依赖配置\n\n![img_11.png](http://upload-images.jianshu.io/upload_images/144590-5b66da4de3e074bb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n![img_12.png](http://upload-images.jianshu.io/upload_images/144590-cc0a18a5bf0a169d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n\n接下来自己按照上边所说的依赖关系挨个进行设置，应用，确定即可。\n\n但是这并不是结束了，因为我们是maven的多模块项目，所以还应当按照我们配置的依赖在每个模块的pom中配置依赖的模块（我这里使用web模块为示例）：\n![img_15.png](http://upload-images.jianshu.io/upload_images/144590-142109fe0c047fa1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n其余的模块大家自己配置。\n\n---\n\n接下来引入我们所需要的库，为了方便，我们引入到最外层的Pom文件中：\n\n![img_13.png](http://upload-images.jianshu.io/upload_images/144590-2508ede6c52d4fc9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n\n将文章开头的需要的库包括插件粘贴进去即可，maven将会自动导入，这个地方如果之前没有下载过可能会很慢。为了方便我们管理，我们打开右侧的maven选项，如果没有，点击左下角按钮打开：\n\n![img_14.png](http://upload-images.jianshu.io/upload_images/144590-7e79feeda1213c3c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n\n这里因为我们是多模块项目，所以在修改了依赖中的内容之后，一定要在最外层进行`clean`与`install`（或者 compile），保证全部的模块都重新的编译。\n\n![img_16.png](http://upload-images.jianshu.io/upload_images/144590-d26e68f2d8a2d1cf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n\n接下来，我们去web模块中配置spring，servlet，jdbc，log等内容\n\n![img_17.png](http://upload-images.jianshu.io/upload_images/144590-93dd410f33c8bdc7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n我们发现没有java文件夹，所以直接右键创建一个，然后在项目结构中将其指定为源码类型的文件夹。\n![img_18.png](http://upload-images.jianshu.io/upload_images/144590-61707d076cc50953.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n\n接下来就是里边的spring等配置了，这些大家直接去仓库看吧，基本都相同。至此，我们大致的将语料库的架子搭建了起来。\n\n把传统的一问一答的思路转变为无问答。聊天即为会话，我们认为所有的上下文都是有可能关联的，所以用概率学来处理问题。下面来看一个简单的处理流程：\n![img_1.png](http://upload-images.jianshu.io/upload_images/144590-5550daf5fa2b9b18.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n\n基础库会存储所有的用户发来的内容（也会包含一部分最初我们基础的对话内容）\nTree 库中的意思是 会话ID 对应 下一条可能的数据，相同的数据可是可以的。通过随机去处理其实简单的多。\n\n当有新的用户与机器聊天的时候，首先去 基础语料库中匹配，表中的内容大致是这样的：\n![img_2.png](http://upload-images.jianshu.io/upload_images/144590-186e586038113693.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n\n每一行都是一行内容，在Tree表中，存储的则是对应关系：\n\n![img_3.png](http://upload-images.jianshu.io/upload_images/144590-ccdb857e528a8c77.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n\nqid：会话\naid：回复的内容\n\n这些id全部是base中每一条内容的id。举例：机器人现在库中是空的，还没有学会 `你好` 该怎么回答，那么过程就是：\n\n表全部为空，示例1\n\n用户1：你好 \n1. 数据库中没有匹配到任何内容\n2. 添加到 base 会话表中\n3. 添加到 butt 未知表中\n4. 由于表当前全为空，所以随机回复也是刚插入的 `你好` 这条数据\n\n---\n\n表全部为空，示例2\n\n用户2：你怎么这么傻\n1. 数据库中没有匹配到任何内容\n2. 添加到 base 会话表中\n3. 添加到 butt 未知表中\n4. 由于表当前全为空，所以随机回复也是刚插入的 `你怎么这么傻` 这条数据\n\n--- \n\n假设，用户在 示例1 之后，问了问题，`你多大年纪了`：\n（机器在不知情的状况下，认为，在 说`你好`之后会说`你多大年纪了`）\n1. base 数据库中没有匹配到这个问题，插入 base 会话表中\n2. 添加到 tree中，你好 对应 你多大年纪了\n2. 添加到butt 未知表中\n3. 由于未知表中存在了 `你好`，`你多大年纪了`，随机回复一条，但是`你多大年纪了`要除去。\n\n---\n\n假设，用户2 在示例2 之后，回答了问题，`我不傻，是你傻`：\n（机器在不知情的状况下，认为，在 说`你怎么这么傻`之后会说`我不傻，是你傻`）\n\n1. base 库中，没有匹配到这个问题，入库\n2. 添加到tree中\n3. 添加到butt未知表中\n4. 由于未知表中依旧不知道2个问题，你好，你多大年纪了，所以随机回复一个除`我不傻，是你傻`话之外的问题让用户回答。\n\n---\n\n在n轮之后，可能机器人学会了很多中你好的回答，或者是你好之后用户问了什么问题：\n\n![img_4.png](http://upload-images.jianshu.io/upload_images/144590-aea7c484dfbba897.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\n\n我们看到，用户对于你好这个问题的回答几乎是很相近的。所以下次，如果有人来问你好，机器人就会去库中查出来，然后数量内随机，那么越多被回答的内容被随机到返回的几率也就越大。当然，其他几率比较小的问题也可能被随机到，但是这都是别人跟机器人聊天问的东西，我们把这些问题抛给其他人也不是不对。\n\n---\n\n机器人一个简单的学习途径就搭建起来了，但这仅仅是学会了这些话，机器并不懂这些话到底是什么含义，或者有没有更好的途径，那么就要借助语义识别与分词了。\n\n---\n\n我们这里的分词使用的是斯坦福大学的[分词系统](https://stanfordnlp.github.io/CoreNLP/api.html)，分词之后，我们可以做很多的事情，比如说两句话的意思是否一致，能大致的判断出这个人是想要什么东西，做什么事情，而不是像最初那样笨笨的学习，如果在学习的过程中有个人捣乱，哪所有人也遭殃了。\n\n假如说机器人不管说什么，他都回复：小明很笨，过不了多久，大部分用户跟机器人聊天，只要没有确切的答案，都会说小明很笨了.... 哈哈\n\n所以，这里要做一些操作，我们再次把表分开。tree表中存放的都是我们预置的一些预料，base的功能还是存放所有的通过机器的会话，butt中依旧存放未知的语句。这时候多一样表：机器学习到的内容，t_corpus_hit，这张表我们单独存放学习到的数据，以免对原有固定或者基础答案的内容造成冲击。\n\n这张表在入库的时候一定要把控的很严格，稍有不慎就会传播色情内容，所以基础的过滤与鉴定是要有的，这张表中我们作为命中表，如果对于一个问题的回答多个人命中之后，那么该回答作为可用回答，插入到tree中。命中的过程也就是2句话意义是否相近的过程。\n\n加入用户说：我想吃黄焖鸡，另一个用户也说，黄焖鸡我很想吃，那么在同一个scope分词后，同样存在吃，黄焖鸡，大致的可以认为他们相近，当然这里就涉及到一些干扰的去除等等。这里后续我们会加入元祖的概念。\n\n就像我们出生到现在，我们也在学习，什么话之后应该说什么话。未来我们把上下文加入之后，会得到一个更好的结果。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilddylan%2Fsmartbutt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwilddylan%2Fsmartbutt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilddylan%2Fsmartbutt/lists"}