gpt4 book ai didi

java - 用于在文本 Java 中搜索单词的最有效数据结构

转载 作者:行者123 更新时间:2023-11-30 08:21:59 24 4
gpt4 key购买 nike

我有一个程序可以读取文档并在每一页中搜索给定的搜索词。然后返回该词出现在哪些页面。

即“辉煌”一词出现在以下页面:1,4,6,8

目前我将文件拆分为页面并将其存储到 ArrayList 中。ArrayList 的每个元素包含文档的一页

然后我拆分页面上的每个单词并将其存储到 hashMap 中,KEY 是该单词出现在文本中的位置(我需要知道它以实现其他功能),值是该单词。然后,我使用搜索 HashMap;

if (map.containsValue(searchString) == true)
return true;
else
return false;

我为每个 PAGE 都这样做。

一切正常,但我想知道是否有更有效的数据结构我可以使用它存储给定页面上的所有单词以及它在页面上出现的位置?(因为搜索 map 中的值没有给出 key 是 0(n))。

我需要能够搜索这个结构并找到一个词。请记住,我还需要该位置供以后使用。

我用来用文本中单词的位置填充 map 的代码是;

    // text is the page of text from a document as a string
int key = 1; // position of the word in the text
for (String element : text.split(" "))
{
map.put(key, element);
key++;
}

最佳答案

为什么不只使用一个 HashMap<String,ArrayList<Position>>将单词映射到事件?正文中的每个词都是 map 中的一个键,页码和位置将构成条目列表。

由于列表值,插入有点棘手:

ArrayList<Position> positions = words.get(word);
if (positions == null) {
positions = new ArrayList<Position>();
words.put(word, positions);
}
positions.add(position);

或者,您可以使用 Guava Multimap:http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html (特别是如果您已经将 Guava 用于其他目的——我可能会避免为此引入库依赖项)

编辑:将整数更改为位置(并将集合更改为列表),忽略了需要确切位置。位置应该类似于

class Position {
int page;
int index;
}

关于java - 用于在文本 Java 中搜索单词的最有效数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24723993/

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