备注:我知道在SO上有很多类似的问题,但没有一个特定于C语言,因此我问这个问题。
这是我面临的问题:我会收到一个大文本(例如,150,000个单词),之后会有一系列短语(每个短语有1到10个单词)。对于这些短语中的每一个,我需要找到紧跟在文本中的短语并返回它的单词。
我到目前为止唯一的解决方法:创建一个包含以下内容的结构:
然后我将解析为每个单词创建一个结构的文本,并将所有结构存储在哈希表中。当每个短语出现时,我会在哈希表上搜索该短语的最后一个单词,检查前3个单词是否匹配,然后返回下一个单词。我相信回到3个单词足以唯一地识别短语,但我可以增加这个数字。
你认为这会有用吗?你知道更好的方法吗?
答案 0 :(得分:3)
更简单的方法:浏览文本,存储所有 n -grams( n 字的子序列)1< = n < = 10在哈希表或trie中。然后检索很简单,只需在哈希表或trie中查找 n -gram。
在哈希表版本中,您只需将 n -grams存储为字符串的连接,其间具有规范化空间。
这种方法的问题在于,使用哈希表,您最多需要45 * N 个条目,其中 N 是文本中的单词数。但是,查找应该非常快,并且150,000个单词是足够小的数据集,可以使其工作。
答案 1 :(得分:1)
后缀树是您需要的。您可以尝试使用维基百科对该主题进行初步介绍。
您可以考虑两种版本的后缀树: