在给定的文本文件中查找多个关键字的索引

时间:2019-03-08 08:04:56

标签: java c# .net full-text-search

我想在给定的文本文件中查找一批关键字的索引/偏移量。 现在,我在stackoverflow上遇到了很多问题,但是回答this最为适合我。

这里唯一的问题是,以上问题仅提供了一个关键字的解决方案,而我要查找的关键字超过25个,而且我认为必须有比编写switch...case或{{1 }}。

如何在此处优化任务?除了链接的问题之外,任何其他更好的方法都可以使用。

假设我的文本文件包含以下内容:

  

斯蒂芬·哈伦(Stephen Haren),12月9,4055551235

     

劳拉·克劳辛,1月23,4054447788

     

威廉·康纳,12月13日,123456789

     

Kara Marie,10月23日,1593574862

     

奥黛丽·卡里特(Audrey Carrit),1月16日,1684527548

     

塞巴斯蒂安·贝克(Sebastian Baker),10月23日,9184569876

我要查找的关键字是:

十二月,一月,三月,四月,五月

现在,输出应为:

  

12月:16

     

1月:第2行if...else的总体索引

     

12月:第3行January的总体索引

     

....

当前代码:

January

注意:此处也标记class Program { static void Main(string[] args) { var keyword = "December"; var keyword2 = "January"; int totalLength = 0; using (var sr = new StreamReader("file.txt")) { while (!sr.EndOfStream) { var line = sr.ReadLine(); if (String.IsNullOrEmpty(line)) continue; if (line.IndexOf(keyword, StringComparison.CurrentCultureIgnoreCase) >= 0) { Console.WriteLine("December: " + (totalLength + line.IndexOf(keyword, StringComparison.CurrentCultureIgnoreCase))); } if (line.IndexOf(keyword2, StringComparison.CurrentCultureIgnoreCase) >= 0) { Console.WriteLine("January: " + (totalLength + line.IndexOf(keyword, StringComparison.CurrentCultureIgnoreCase))); } ................. ........................................................ totalLength += line.Length; } } } } ,因为我对方法感兴趣,而不是对特定于语言的解决方案感兴趣。

1 个答案:

答案 0 :(得分:0)

我绝对建议您检查Trie数据结构。

一个很好的Tries实现将逐个字符搜索输入的文本,并在到达可识别单词的末尾时返回。 i.t.o非常高效运行时间(大约O(n + m)),并且在内存消耗方面也不错。 (仅供参考:在这种情况下,n是输入文本的长度,m是您要查找的单词的长度。)

我找到了有关该主题的以下教程:

https://www.geeksforgeeks.org/trie-insert-and-search/

这是我通过StackOverflow找到的一个很好的实现:

http://www.glennslayden.com/code/c-sharp/trie