如何使用C在大文本中查找短语?

时间:2011-11-01 20:54:22

标签: c string algorithm text

备注:我知道在SO上有很多类似的问题,但没有一个特定于C语言,因此我问这个问题。

这是我面临的问题:我会收到一个大文本(例如,150,000个单词),之后会有一系列短语(每个短语有1到10个单词)。对于这些短语中的每一个,我需要找到紧跟在文本中的短语并返回它的单词。

我到目前为止唯一的解决方法:创建一个包含以下内容的结构:

  • 当前字词
  • 该词之前的3个字
  • 后面的单词

然后我将解析为每个单词创建一个结构的文本,并将所有结构存储在哈希表中。当每个短语出现时,我会在哈希表上搜索该短语的最后一个单词,检查前3个单词是否匹配,然后返回下一个单词。我相信回到3个单词足以唯一地识别短语,但我可以增加这个数字。

你认为这会有用吗?你知道更好的方法吗?

2 个答案:

答案 0 :(得分:3)

更简单的方法:浏览文本,存储所有 n -grams( n 字的子序列)1< = n < = 10在哈希表或trie中。然后检索很简单,只需在哈希表或trie中查找 n -gram。

在哈希表版本中,您只需将 n -grams存储为字符串的连接,其间具有规范化空间。

这种方法的问题在于,使用哈希表,您最多需要45 * N 个条目,其中 N 是文本中的单词数。但是,查找应该非常快,并且150,000个单词是足够小的数据集,可以使其工作。

答案 1 :(得分:1)

后缀树是您需要的。您可以尝试使用维基百科对该主题进行初步介绍。

您可以考虑两种版本的后缀树:

  • 基于字符的
  • 基于令牌的