如何计算java中的单词

我正在寻找可以解决我的以下问题的算法,提示或任何源代码。

我有一个文件夹,它包含许多文本文件。 我读了它们并将所有文本存储在STRING中。 现在我想计算,如果任何单词出现在其他文件中或没有。 (我知道不清楚让我举个例子)

例如我有两个文件:Doc A =>“brown fox jump”Doc B =>“dog not jump”Doc C =>“狐狸跳狗”

让我们说我的程序读取第一个文档,现在第一个单词是“棕色”,现在我的程序将检查这个单词是否也出现在任何其他文档中? 所以答案是0.现在它将再次检查第二个单词“fox”,它会给出输出,它出现在(Doc C)等等……现在它将读取Doc B并且它将检查如果狗出现在其他文件中? 答案是(Doc C)等……

任何建议或伪代码?

提示:它也称为逆文档频率(Idf)。 我知道什么是idf。

像GregS说的那样,使用HashMap。 我没有发布任何代码,因为我认为这是一个功课,我想给你机会自己创建它,但大纲是:

  1. 打开新文档
  2. 对于每个单词,如果已经存在,请查看您的hashmap。 如果不是,请使用此单词在HashMap中创建一个新键,并在该位置添加新文档(文件名)。 如果是,只需添加文档的文件名。

例如,如果你有:DocA:布朗狐狸跳DocB:Fox跳狗

您将打开DocA并遍历其内容。 ‘brown’不在您的hashmap中,因此您将添加一个键为’brown’且值为’DocA’的新元素。 与“狐狸”和“跳跃”相同。 然后你会打开DocB。 ‘fox’已经在你的hashmap中,所以你要添加它的值DocB,(值将是’DocA DocB’)。 也许使用ArrayList(在Java中)会有所帮助。

提示:HashMap将字符串映射到文件列表。

考虑到“我对所有文档都有这组单词”“我可以以某种方式存储每个单词出现在哪些 文档中” ,这可能会有所帮助。 鉴于您的数据的这种表示,很容易确定给定的单词是否出现在多个文档中。 关于如何做到这一点,其他人提供了这里的提示。

只是另一个想法不同然后所有有价值的答案,我承认哈希看起来更好,我只是想从另一个角度看待它。

我会对每个文档中的所有单词进行排序,并将每个文档相互比较。

例如docA> brown,fox,jump; docB-> doc,jump,not docC-> dog,fox,jump

比较它们是这样的

 直到有一个单词文件
   得到文件的第一个元素
   比较最下降的第一个元素,如果该元素存在多次保留它
   抛出最下降的那个(在我的情况下)

所以在第一次比较中

docA – > fox,jump docB – > doc,jump,not docC – > dog,fox,jump

在第二次比较中

docA – > fox,jump docB – > jump,not docC – > dog,fox

在第三次比较中

docA – > fox,jump docB – > jump,not docC – > fox,jump

在第四场比赛中保留狐狸,在第五场比赛中保留跳投。

HashMap将字符串映射到整数。 整数是不可变的,因此有一些“增量”的喧嚣,但不是太多。 你可以覆盖put()方法。

此代码将所有不同的单词作为键返回,并计为句子中找到的每个单词的值。 只需从文件或命令提示符创建一个String对象作为输入,并在下面的方法中传递它。

public Map getWordsWithCount(String sentances) { Map wordsWithCount = new HashMap(); String[] words = sentances.split(" "); for (String word : words) { if(wordsWithCount.containsKey(word)) { wordsWithCount.put(word, wordsWithCount.get(word)+1); } else { wordsWithCount.put(word, 1); } } return wordsWithCount; }