在Python中识别目标模式中的点

时间:2017-10-21 13:53:55

标签: python aiml

在我的一个项目中,我试图识别给定句子中的文件名。例如,“你能不能打开abc.txt”,所以我需要获取关键字“open”以了解预期的操作类型,我还需要识别文件名,原因很明显。一个简单的AIML标签是:

<aiml>
<category>
    <pattern>* OPEN *</pattern>
    <template>open <star index="2"/></template>
<category>
</aiml>

这里,在模板标签中,我只是提供有关要执行的操作和文件名的信息。另一方面,我的python代码负责执行所需的操作。 现在的问题是'。'字符。使用该字符将句子分为两部分(在上面提到的例子的情况下,2个句子将是“你能否请打开abc”和“txt”),它们分别映射到任何定义的aiml标签。但是,就我而言,我不想要'。'作为分隔符的字符。基本上,我想识别可能包含或不包含扩展名的文件名。有人可以帮我解决这个问题吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

默认情况下,AIML允许多句输入。这意味着句号,感叹号和问号被视为句子之间的分隔符。例如,如果你问:

早上好。我的名字是乔治。你今天过得怎么样?

这被解释为3个独立的输入。通常这是一件好事,因为它意味着AIML翻译可以重新使用现有的模式,早上好,我的名字是*,你是如何*。

但是在你的情况下,在扩展之前的全停止不会导致不必要的分裂。根据您的AIML解释器,在将输入发送到解释器之前,在预处理阶段完成句子拆分。一些AIML解释器有一个配置文件,允许您定义句子分割字符,因此您可以简单地从分隔符列表中删除句号。

更好的方法可能是预处理文件名并用DOT替换句号,然后您可以在模式中检测到这一点* OPEN *

作为最终评论,* OPEN *是一个非常广泛的模式,如果有人说什么时候是今天开的商店,或者任何其他输入中包含单词OPEN的文本,它也会被调用。