【发布时间】:2016-02-05 23:01:33
【问题描述】:
我需要在 C 中实现一个算法来进行短语匹配/短语识别。具体来说,我有一个循环运行的函数,它输出以逐字筛选字符串。我将每个输出字放在缓冲区中。 我还有一个文件,其中包含一组这样的短语:
短语 1:早上好,[姓氏] [名字]先生,您的帐户中有 [金额] $。
短语 2:成员 [last name] [first name] 已从列表中选择了 [option]。
所以我的短语有一个已知的形式,由固定部分和动态部分组成(在“[”“]”之间)。关于动态部分,我只知道组成它的单词数。例如,在短语 2 中,第一个动态部分有 2 个单词,第二个动态部分有一个单词。
由于我的缓冲区充满了函数输出中的单词,我需要确定列表中的哪个短语与缓冲区匹配。
如果已经有这样的算法,我需要关于可以使用的算法的建议,如果没有,在 C 中执行此操作的最佳方法是什么?
谢谢。
【问题讨论】:
-
你试过什么?你能发布一些代码吗?问题的措辞有点尴尬,我不完全确定您要达到的目标
-
如果我理解正确,您拥有的唯一信息是缓冲区应包含与短语匹配的单词数。假设单词是由 SPACE 分隔的字符串,你可以计算出缓冲区中有多少单词,并找到对应的短语。还是我误解了这个问题?
-
我有一个带循环的函数。在每次迭代中,都会在缓冲区中添加一个新单词。单词用空格隔开。所以我知道每时每刻的缓冲区内容,也知道我正在寻找的列表中的短语。
-
你能贴一些代码吗?
-
我的想法:将列表中的所有短语放在一个矩阵中,在每个字段上存储一个单词。然后,当缓冲区接收到第一个单词时,我将遍历矩阵中的第一列以从缓冲区中搜索单词(仅存储匹配的行)。这样,我将确定哪些短语以这个词开头。然后,当缓冲区接收到第二个单词时,我将仅在上一步存储的行上遍历第二列。现在我将确定哪些短语以缓冲区中的前两个单词开头。该算法将继续进行,直到在我的矩阵中保持单行。
标签: c regex algorithm string-matching