什么是最好的(实践)方式来存储关于文本中文字的出现和位置的数据以便快速访问?

问题描述:

我即将开始编写一个程序,该程序将分析文本并以某种形式将所有独特词汇存储在文本中,稍后可以调用。当被调用时,它将在原始文本中给出该单词的所有出现位置,并返回周围的单词。什么是最好的(实践)方式来存储关于文本中文字的出现和位置的数据以便快速访问?

我认为最好的办法是使用散列表,因为它将唯一字作为关键字,然后将int []作为映射值。但我不知道这是否被认为是最佳做法。我的解决方案将有一个数组来存储原始文本(可能非常大),以及一个hashmap,每个唯一的单词有一个键值对,可能几乎与包含文本的数组一样大。你会如何解决它?

另一种可能性是26-ary树(考虑到你的字母表有26个字符)。
建立你的树存储你遇到的单词,每个节点将代表一个单词;那么在每个节点中可以存储指向字符串中单词出现的指针数组(或表示索引的int数组)。
就内存和复杂性而言,它相当于哈希映射的实现(速度相同,稍微更紧凑),但对于我来说似乎比哈希映射更直观。
所以我会说它主要取决于你和你最喜欢的结构。

+1

也被称为'Trie' –

+0

Definitly,是:) –

哈希映射是为这种类型的任务。 您应该将字符串映射到结构(而不​​是int数组)。 该结构可能会记录位置以及上一个和下一个单词 - “周围”的含义并不完全清楚。

您可能需要决定您的过程是否区分大小写。 “你”和“你”是同一个词吗?根据您的语言,您可以提供不区分大小写的比较器和散列函数,或者需要“小写”所有条目。

+1

它将不区分大小写,所以我可能会在开始时将所有内容都设为小写,或者如您所说使用不区分大小写的比较器... – ChristofferAB