gpt4 book ai didi

java - 在文件中搜索性能良好

转载 作者:行者123 更新时间:2023-12-01 18:35:56 26 4
gpt4 key购买 nike

我正在尝试在 200,000 个文本文件中实现搜索,这些文本文件的大小可能从 50kb 到 5 mb 不等,总共为 1.7GB。我计划开发一个搜索引擎(只是一个示例)。流程为:

1) Extract words from each file and store them in a separate file(40,000,000 words)
2) Search each word in each file ( 40,000,000(words) X 200,000(Files) = 8 X 10^12 searches)
3) Generate boolean Index(650Mb).

因此,这里涉及的大部分操作都是在文档或文件中搜索。其中第二步需要很多时间。(4+小时)

这是我编写的用于在 JAVA 中搜索单词的程序。

count = 0;
BufferedReader reader = new BufferedReader(new FileReader('fileName.txt'));
while ((text = reader.readLine()) != null) {
if( text.indexOf(searchString) != -1 )
{
if( text.equals(searchString))
{
System.out.print('Word Found in line number '+count);
break;
}
}
count++;
}

PYTHON 中的程序:

count = 0
file = open(filePath)
with file as f :
for line in f:
count += 1
if(line.index(searchWord))
print("Word found in line number"+count)

输出很完美,但需要很多时间。语言对我来说不是考虑的标准。我正在寻找更好的表现。有什么办法可以让我摆脱它吗?由于大部分都是搜索过程,有没有什么完美的方法,因为它是搜索大块小块。

(我的电脑配置:8GB RAM,i7 第四代)

最佳答案

您可以将文件拆分为多个 block ,然后使用不同的线程并行处理这些 block 。 (类似于MapReduce)

示例:将文件分割为每个 100MB 的 block (假设有 17 个 block )

现在您可以将这些 block 传递给各个线程,然后搜索文本。

public class SearchText
{

public void processFile()
{
List<Chunks> totalChunks = splitFile();
// you have to implement splitFile() function to split file in chunks

for(Chunks chunk : totakChunks)
{
// Create a new Thread and process the chunks
new Thread(new ChunkProcessor(chunk)).start();
}
}
}

public class ChunkProcessor implements Runnable
{

private Chunk mychunk ;
public ChunkProcessor(Chunk chunk)
{
myChunk = chunk;
}


public void run()
{
// search for text in this chunk
}
}

关于java - 在文件中搜索性能良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22024464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com