繁体   English   中英

使用java计算文本文件中重复单词的数量

[英]count # of repeated words in a text file using java

如何从路径中打开java中的文本文件,并使用标记器计算文件中重复的单词数。

例如:想要使用路径名打开文件,并且要读取和计算文件中重复的单词

badpanda是半右的:有很多关于如何从文件中读取单词的信息。 不要接受他使用ArrayLists的建议 - 你只需要一个Map实现(HashMap或TreeMap)。 每个键都是文件中的一个单词,每个值都是该单词的当前计数。

由于这是家庭作业,这里有一些提示:

  1. Scanner类可用作标记器
  2. Multiset (或Bag )可用于计算单词

关于可以采取的方法的一些细节。

扫描器作为令牌生成器

Scanner类使用诸如InputStreamFile类的源,并且可以使用许多可用的next方法之一一次读取一条数据。

如果我们想将Scanner用作标记器,我们可以告诉它应该分割文本以制作标记的方式。

有一个Scanner.useDelimiter(String)Scanner.useDelimiter(Pattern)方法,可以通过使用正则表达式告诉Scanner以某种方式拆分令牌。

正确配置Scanner ,可以通过调用next方法获取令牌,直到我们用完文本文件中的文本为止。 (此循环的终止条件可以由Scanner.hasNext确定。)

使用Multiset (或Bag )计算单词

称为多集 (或 )的数据结构可用于跟踪可能已发生的单词(或标记)。

多重集是一个集合 ,但每个元素可以有多个元素。 在我所看到的实现中,通过调用某些方法可以使集合中的元素具有多重性。

例如,使用Google的Guava库中提供的Multiset实现, Multiset.count(Object)方法将返回给定对象的多重性。

那么,这意味着什么?

我们可以使用Multiset来跟踪由Scanner读取的文本文件中出现的令牌计数。

通过将标记从Scanner放入Multiset ,我们可以得出在文本文件中遇到每个标记的次数的计数。

从那里,我们可以遍历令牌,并找到计数超过2的令牌,这些令牌是在文本文件中重复的令牌。

另一种方法?

从问题的另一种解释来看,这是另一种选择:

...并计算文件中重复的单词数量......

如果我们仅需要严格的“重复单词计数”,那么就有另一种方法。

Set可以用于跟踪文件中已经遇到的令牌。

在每个新令牌上,在我们尝试add令牌addSet ,我们可以使用Set.contains(Object)方法检查令牌是否已经存在。

如果单词已经存在,那么我们可以增加一个计数器来跟踪重复的标记。

如果这不是问题的意图,那么应该指出,使用精确的措辞来传达意图很重要,因为阅读该问题的人可以用许多不同的方式来解释该问题! ;)

了解如何通过谷歌搜索路径中的文件流(下面是我找到的第一个链接;如果它不好,还有更多......)。

http://www.homeandlearn.co.uk/java/read_a_textfile_in_java.html

然后,创建一个arraylists的arraylist。 为每个新单词添加一个条目(即将0索引设置为单词的新arraylist)到初始arraylist,并为每个重复单词添加一个条目到相应的arraylist。 完成整个文本文档后,根据需要遍历arraylist。

忘记令牌生成器

只需使用String.split方法。 它将字符串拆分为String数组,并且无需使用tokenizer类。

使用扫描仪读取文件中的各行。

使用哈希表来计算单个单词,这假设单词上的额外标点符号无关紧要。

扫描程序完成文件读取后,显示值大于1的每个键/值对。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM