gpt4 book ai didi

java - 如何将倒排索引存储到二进制文件中?

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

我有一个术语 HashMap,其中包含单词出现的页面、单词在页面中的频率及其位置的数据。

例如:单词 - [页码、页面中的词频、页面中的位置]

cat [1, 3, 1, 2, 5 ], [2, 2, 2, 5 ]
dog [2, 2, 1, 7 ]

如何将此信息存储在易于读回的二进制文件中?

我做了以下尝试:

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(baos);

for(String word: invertedIndex.keySet()) {
out.writeUTF(word); // Write the word
for(Entry entry: invertedIndex.get(word)) { // Info for a page
out.writeInt(entry.pageNum); // Write its page number
out.writeInt(entry.wordFrequency); // Write its freq in that page

for(int position: entry.positions) {
out.writeInt(position); // Write the positions
}
}
}

byte[] bytes = baos.toByteArray();

FileOutputStream fos = new FileOutputStream(PATH);
fos.write(bytes);
fos.close();

不确定这是否正确...提前致谢。

编辑:谢谢,事实证明我的问题更多是如何解码这个相当严格的编码。

最佳答案

Is there a way to preserve this data structure?

是的。有很多方法。

提示:您尝试的解决方案是一个好的开始。

然而,完整的解决方案需要相应的方法来读回数据。而当你尝试编写与你的写入代码相对应的读取方法时,你会发现存在系统性问题。例如,没有简单的方法可以确定一个 int 值列表的结束位置和下一个值的开始位置。

有一些方法可以解决这个问题。 想一想。如何一个接一个地编写两个列表,以便知道一个列表从哪里结束,下一个列表从哪里开始?

注意:您没有必要使用ByteArrayOutputStream。您可以直接写入包装在 BufferedOutputStream 中的 FileOutputStream

关于java - 如何将倒排索引存储到二进制文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46518326/

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