c - 逐词短语匹配

标签 c regex algorithm string-matching

我需要在 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/

相关文章:

c - c中printf中的多个赋值语句

regex - 在 grails 配置中实现不区分大小写的正则表达式 (?i)

c++ - 算法能否安全地解决输入到输出的 self 分配问题?

javascript - 我怎样才能改进这个 JavaScript DOM 操作数据结构/算法?

c - OCaml 作为 C 库, Hello World 示例

c - 重新初始化函数中的结构数组

regex - 提取文件名

algorithm - 最大数量的超越者的二进制搜索解决方案

c - Eclipse CDT平台独立项目

java - 使用 java 和 Tika 的正则表达式将字符串拆分为数组