当前位置: 首页 > 知识库问答 >
问题:

在大型文本文件中查找文本数据的快速方法是什么?

蒋奕
2023-03-14

我有一个包含不同单词和信息的词汇表。它的大小约为100MB。然而,搜索这个文件需要很长时间。有什么方法可以提高我查找数据的速度吗?例如,我正在考虑编写一个程序,将文本文件拆分为26个不同的文本文件(按单词的第一个字母),然后,程序只需要检查给定单词的第一个字母,就可以搜索一个小得多的文件。这会提高程序的执行时间吗?有什么有效的结构化数据可以存储文件吗?例如json。另外,数据库呢?我使用静态编程语言/Java。

编辑:到目前为止,我只是暴力搜索了整个文件,直到找到匹配项。但是,正如我所说,该文件是

共有3个答案

江德海
2023-03-14

实现这一点有多种方法:

  1. 在关系数据库(mysql、Postgres等)中加载数据,其中一列表示word,另一列包含有关word的信息。在word列上添加索引。这将满足您的数据集未来将超过分配内存的情况
  2. 将内存中的数据加载到哈希表中,键作为单词,值作为关于单词的信息
  3. 如果您想编写自己的逻辑,可以将数据加载到列表中,按单词排序并执行二进制搜索
金英华
2023-03-14

这取决于可用的内存。如果整个词汇表可以在不降低性能的情况下放入内存,那么HashMap(如果每个单词都有关联值)或HashSet(如果没有)针对快速查找访问进行了特别优化。如果不能将所有内容保存在内存中,您可以使用带有要查找单词索引的数据库。Apache Derby是一个轻量级数据库,可以很好地与Java接口,但HSQLDB、H2或SQLite也是不错的选择。

云宝
2023-03-14

也许可以将映射(key=word,value=word信息)保存在JSON文件中。然后,您可以在程序中加载JSON,提取HashMap,并找到您想要的单词(因为哈希查找非常快)。

 类似资料:
  • 问题内容: 我必须在text [csv]文件中写入大量数据。我使用BufferedWriter写入数据,并且花费了大约40秒的时间来写入174 mb的数据。这是Java可以提供的最快速度吗? 注意:这40秒还包括从结果集中迭代和获取记录的时间。:) 174 mb用于结果集中的400000行。 问题答案: 你可以尝试删除BufferedWriter并直接使用FileWriter。在现代系统上,无论如

  • 测试数据 # linecache_data.py import os import tempfile lorem = '''Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus eget elit. In posuere mi non risus. Mauris id quam posuere lectus soll

  • 我需要从全球网格中提取特定节点集的数据,这些节点由纬度/经度坐标给出(大约5000-10000)。这些数据是水力参数的时间序列,例如波高。 全球数据集是巨大的,所以它被分成许多NetCDF文件。每个NetCDF文件大约5GB,包含整个全球网格的数据,但只针对一个变量(例如波高)和一年(例如2020年)。假设我想在某个位置提取6个变量的完整时间序列(42年),我需要提取数据形式为6x42=252个N

  • 问题内容: 假设您有一个较大的ASCII文本文件,每行上都有一个随机的非负整数,每个整数的范围从0到1,000,000,000。文件中有100,000,000行。读取文件并计算所有整数之和的最快方法是什么? 约束:我们有10MB的RAM可以使用。该文件的大小为1GB,因此我们不想读入整个内容然后进行处理。 这是我尝试过的各种解决方案。我发现结果相当令人惊讶。 有什么我想念的更快的东西吗? 请注意:

  • 本文向大家介绍加载文本文件并查找文件中的字符数-JavaScript,包括了加载文本文件并查找文件中的字符数-JavaScript的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个data.txt文件,该文件与NodeJS文件位于同一目录中。假设该文件的内容是- 我们需要编写一个JavaScript函数,将此外部文本文件加载到我们的js文件中并返回此文件中的字符数。 示例 让我们为该函数编写

  • 问题内容: 我有两个文件,和。 有大约14000条线,大约有20亿条线。 每行有一个字段,而有3个字段,通过,以分隔。 我想从中找到匹配项的所有行(或者,如果我们不想花费额外的时间来拆分的值,则可以找到行中的任何行)。 file1.txt(大约14000行, 未排序 ): file2.txt(大约20亿行, 未排序 ): 预期输出: 这是我尝试过的,似乎要花几个小时才能运行: 我想知道是否有更好,