0

我正在尝试开发人工机器人我发现 AIML 可以用于实现这样的目标我发现这些关于 AIML 解析的要点是由 Program-O 完成的

1.) 输入中的所有字母都转换为大写 2.) 所有标点符号都被删除并替换为空格 3.) 额外的空白字符(包括制表符)被删除

从那里,程序 O 在数据库中执行搜索,查找与输入匹配的所有潜在匹配项,包括通配符。然后对返回的结果进行相关性“评分”,并选择“最佳匹配”。然后程序 O 从选择的结果中处理 AIML,并将完成的产品返回给用户。

我只是想知道如何定义分数并找到最接近用户输入的相关答案

任何帮助或想法将不胜感激

4

1 回答 1

2

@user3589042(相当麻烦的名字,你不觉得吗?)

我是程序 O 的首席开发人员 Dave Morton。很抱歉,在您提出问题时我错过了这个。今天才引起我的注意。

Program O 对从数据库中提取的潜在匹配进行评分的方式是:

  1. 是表的回应aiml_userdefined吗?是=300/否=0
  2. 是这个机器人的类别,还是它的父级(如果有的话)?这=250/父=0
  3. 模式是否有一个或多个下划线 (_) 通配符?是=100/否=0
  4. 当前类别有<topic>标签吗?是(见下文)/否=0

    一个。是否<topic>包含一个或多个下划线 (_) 通配符?是=80/否=0

    湾。是否<topic>直接匹配当前主题?是=50/否=0

    C。是否<topic>包含星号 (*) 通配符?是=10/否=0

  5. 当前类别是否包含<that>标签?是(见下文)/否=0

    一个。是否<that>包含一个或多个下划线 (_) 通配符?是=45/否=0

    湾。是否<that>直接匹配当前主题?是=15/否=0

    C。是否<that>包含星号 (*) 通配符?是=2/否=0

  6. 是否与<pattern>用户输入直接匹配?是=10/否=0

  7. 是否<pattern>包含一个或多个星号 (*) 通配符?是=1/否=0

  8. 是否与<pattern>配置中的默认 AIML 模式匹配?是=5/否=0

然后,该脚本将上面列出的所有通过的测试相加,并为类别中的每个单词添加一个点,该点<pattern>也与用户输入中的一个单词相匹配。得分最高的 AIML 类别被认为是“最佳匹配”。如果出现平局,脚本将根据配置设置选择“第一个”得分最高的类别、“最后一个”或随机的一个。然后将此选定的类别返回给其他函数以解析 XML。

我希望这回答了你的问题。

于 2017-06-27T01:51:47.840 回答