我需要在 C 中实现一个算法来进行短语匹配/短语识别。具体来说,我有一个循环运行的函数,它输出以逐字串筛选。我将每个输出字放在缓冲区中。 我还有一个文件,其中包含一组这样的短语:
短语 1:[姓氏] [名字] 先生早上好,您的帐户中有 [金额] 美元。
短语 2:成员 [last name] [first name] 从列表中选择了[option]。
所以我的短语集有一个已知的形式,由固定部分和动态部分组成(在“[”“]”之间)。关于动态部分,我只知道组成它的单词数。例如,在短语 2 中,第一个动态部分有 2 个词,第二个动态部分有一个词。
由于我的缓冲区充满了函数输出的单词,我需要确定列表中的哪个短语与缓冲区匹配。
如果已经有这样的算法,我需要一个关于可以使用的算法的建议,如果没有,在 C 中执行此操作的最佳方法是什么?
谢谢。
最佳答案
我会从像这样的锯齿状字符指针数组开始
char *phrase1[] = { "Good", "morning", "Mr.", "", "", "you", "have", "", "$", "in", "your", "account.", NULL };
char *phrase2[] = { "Member", "", "", "has", "chosen", "", "from", "the", "list.", NULL };
char **phrases[] = { phrase1, phrase2, NULL };
在每个短语中,有
- 必须完全匹配的词,例如
“早上好”
- 标记动态项位置的空字符串
""
NULL
标记短语结束的指针
当使用数组时,phrases[p][i]
是短语p
中的第i个词,
phrases[p][i][0]
是短语 p
中第 i 个单词的第一个字符。
因此,检查动态项目的代码是
if ( phrases[p][i][0] == '\0' )
// this is a dynamic item
检查短语的结尾
if ( phrases[p][i] == NULL )
// this is the end of the phrase
否则,要比较这个词
if ( strcmp( phrases[p][i], word ) == 0 )
// the word matches
关于c - 逐词短语匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33538997/