【问题标题】:Find index of multiple keywords in given text file在给定的文本文件中查找多个关键字的索引
【发布时间】:2019-07-30 05:40:36
【问题描述】:

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

这里唯一的问题是,上述问题只为单个关键字提供了解决方案,而我有超过 25 个关键字要查找,我认为必须有一个比为每个关键字写 switch...case 或 if...else 更好的解决方案关键词。

如何在这里优化我的任务?也欢迎任何比链接问题更好的方法。

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

斯蒂芬·哈伦,十二月,9,4055551235

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

威廉·康纳,十二月,13,123456789

卡拉玛丽,十月,23,1593574862

奥黛丽卡瑞特,一月,16,1684527548

塞巴斯蒂安·贝克,十月,23,9184569876

我想找到的关键字是:

十二月、一月、三月、四月、五月

现在,输出应该是:

十二月:16

1 月:第 2 行 January 的总体索引

12 月:第 3 行中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;
                }

            }
        }
    }

注意:在这里也标记Java,因为我对方法而不是特定于语言的解决方案感兴趣。

【问题讨论】:

  • 请在您的问题中添加您的输入和预期输出。另外,到目前为止,您尝试了什么?发布您的代码。
  • 添加它。请给我一点时间。
  • 还会添加代码
  • 一种方法是将.txt文件的数据转换为数据表,然后使用搜索参数对表进行查询。

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


【解决方案1】:

我绝对建议您查看 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    相关资源
    最近更新 更多