【问题标题】:JAVA: Best data structure for document comparison?JAVA:文档比较的最佳数据结构?
【发布时间】:2015-01-30 00:27:30
【问题描述】:

我正在编写一个程序,它可以根据多个文档的共同词来比较多个文档。我能够标记所有单词并将它们全部存储在 ArrayList 中,因为它允许重复。但是,我不确定这是最好的方法。我需要在 ArrayList 中找到前 50 个最常用的单词,但我不太确定该怎么做。这个操作有更好的数据结构吗?

【问题讨论】:

    标签: java dictionary arraylist set


    【解决方案1】:

    如果您只想比较出现次数,可以使用HashMapTreeMap 或任何other implementation 等映射。

    键是单词(字符串),值是出现次数(整数)。您将浏览您的文档,并在地图中查找每个单词。如果存在,则获取其当前的出现次数,并将其加一。如果没有,请插入出现次数为零的单词。这是一个代码sn-p:

        HashMap<String, Integer> occurenceMap = new HashMap<>();
    
        for (String word : document) {
            Integer wordOccurences = occurenceMap.get(word);
            if (wordOccurences == null) {
                wordOccurences = Integer.valueOf(1);
            } else {
                wordOccurences += 1;
            }
            occurenceMap.put(word, wordOccurences);
        }
    

    【讨论】:

    • 是的,我稍后会这样做,但首先我需要知道发生了什么。现在,我可以访问文档中的所有单词,并且它们保存在 ArrayList 中——因为它们具有重复项。你能解释一下我是怎么做到的吗?
    • @user1765804 如果您坚持使用数组列表(如果真的不需要存储重复项,存储整个文档似乎很浪费),那么只需遍历数组列表并使用映射来计算出现次数我解释的每个单词。
    • 我愿意做其他事情,但我想我只是没有完全理解你的第一条评论的意思。我需要重复,因为这就是我知道哪些词更频繁的方式。我正在遍历文档并一路添加每个单词。在这一步我应该怎么做?
    • 好的,谢谢,这很有帮助。我最终做了与此非常相似的事情!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 2010-09-13
    • 2018-11-16
    • 1970-01-01
    • 2014-10-02
    • 2012-08-27
    相关资源
    最近更新 更多