Java-计算两个文档中的单词数
3-现在我必须看看当前文件中是否有来自上述术语的单词,如果是,我将计数 现在这是我的问题,我在第3步上结巴了: 我知道如何使用TreeMap TreeMap.containskey等计算单词数,但每个文件都是全局计数而不是本地计数:Java-计算两个文档中的单词数,java,data-structures,Java,Data Structures,3-现在我必须看看当前文件中是否有来自上述术语的单词,如果是,我将计数 现在这是我的问题,我在第3步上结巴了: 我知道如何使用TreeMap TreeMap.containskey等计算单词数,但每个文件都是全局计数而不是本地计数: 任何伪代码?一种可能是每个文件有一个映射,例如再次存储在映射中。一种可能是每个文件有一个映射,例如再次存储在映射中。我不清楚,但我假设你的两份文件是指文件A,其中包含你不感兴趣的所有可能术语,以及文件B,其中包含你感兴趣的部分或全部术语,前提是它们也出现在文件A中
任何伪代码?一种可能是每个文件有一个映射,例如再次存储在映射中。一种可能是每个文件有一个映射,例如再次存储在映射中。我不清楚,但我假设你的两份文件是指文件A,其中包含你不感兴趣的所有可能术语,以及文件B,其中包含你感兴趣的部分或全部术语,前提是它们也出现在文件A中 我不确定这是否是你想要的,但从你提问的措辞来看,这是我最好的猜测 如果希望字符串是单词,整数是出现次数,那么最终结果可以是一个映射树映射 因此,您首先要阅读文档A并绘制地图。putword,0;每一个字。每个重复的单词将替换地图中的现有条目。您可以先测试是否存在,但我认为这不会对性能造成太大影响 现在,您已经完成了步骤1和步骤2 现在,您需要通读您的文档B,每个单词: 检查它是否存在于地图中 如果存在,则增加该值 ie:如果map.containsKeyword map.putword、map.getword+1 现在您已经完成了步骤3,并且有一个只包含文档a中包含的单词的映射,以及它们在文档B中的出现次数 如果我误解了你的要求,我相信你可以调整它以适应 编辑 如果只想计算一个文档中的单词数,则伪代码为:
for (word)
if (map.containsKey(word))
map.put(word, map.get(word) + 1)
else
map.put(word, 1)
也就是说,你打到的每一个字都会增加一个。如果这个词在你用一个词在地图上初始化之前没有被击中
在这个过程结束时,您有一个地图,其中包含文档中的每个单词及其出现次数。我不清楚,但我假设您的两个文档指的是文档a,其中包含您不感兴趣的所有可能术语出现次数,以及文件B,其中包含您对发生次数感兴趣的部分或全部术语,前提是它们也出现在文件A中 我不确定这是否是你想要的,但从你提问的措辞来看,这是我最好的猜测 如果希望字符串是单词,整数是出现次数,那么最终结果可以是一个映射树映射 因此,您首先要阅读文档A并绘制地图。putword,0;每一个字。每个重复的单词将替换地图中的现有条目。您可以先测试是否存在,但我认为这不会对性能造成太大影响 现在,您已经完成了步骤1和步骤2 现在,您需要通读您的文档B,每个单词: 检查它是否存在于地图中 如果存在,则增加该值 ie:如果map.containsKeyword map.putword、map.getword+1 现在您已经完成了步骤3,并且有一个只包含文档a中包含的单词的映射,以及它们在文档B中的出现次数 如果我误解了你的要求,我相信你可以调整它以适应 编辑 如果只想计算一个文档中的单词数,则伪代码为:
for (word)
if (map.containsKey(word))
map.put(word, map.get(word) + 1)
else
map.put(word, 1)
也就是说,你打到的每一个字都会增加一个。如果这个词在你用一个词在地图上初始化之前没有被击中
在这个过程的最后,你有一张地图,包含文档中的每个单词及其出现次数。他在这个主题中问了一些同样的问题: 假设每行有一个单词,并且文件的最后一行包含-1以中断循环
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
public class StackOverflow {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Map<String, Integer> countedWords = new HashMap<String, Integer>();
int numberOfWords = 0;
String word = "";
while (true) {
word = scanner.nextLine();
if (word.equalsIgnoreCase("-1")) {
break;
}
if (countedWords.containsKey(word)) {
numberOfWords = countedWords.get(word);
countedWords.put(word, ++numberOfWords);
} else {
countedWords.put(word, 1);
}
}
Iterator it = countedWords.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
System.out.println(pairs.getKey() + " = " + pairs.getValue());
}
}
}
在这个话题上,他问了同样的问题: 假设每行有一个单词,并且文件的最后一行包含-1以中断循环
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
public class StackOverflow {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Map<String, Integer> countedWords = new HashMap<String, Integer>();
int numberOfWords = 0;
String word = "";
while (true) {
word = scanner.nextLine();
if (word.equalsIgnoreCase("-1")) {
break;
}
if (countedWords.containsKey(word)) {
numberOfWords = countedWords.get(word);
countedWords.put(word, ++numberOfWords);
} else {
countedWords.put(word, 1);
}
}
Iterator it = countedWords.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
System.out.println(pairs.getKey() + " = " + pairs.getValue());
}
}
}
谢谢你差点回答了我的问题:。我有50多份文件,我理解你的前两个步骤——它们非常简单明了。我听不懂你的第三步,你能再解释一下吗?如何计算每个文件的字数?我需要做两个循环吗?第一个将运行所有术语,第二个将检查每个文件中的特定单词是否计数?对不起,我很困惑:谢谢,你几乎回答了我的问题:。我有50多份文件,我理解你的前两个步骤——它们非常简单明了。我听不懂你的第三步,你能再解释一下吗?如何计算每个文件的字数?我需要做两个循环吗?第一个将运行所有术语,第二个将检查每个文件中的特定单词是否计数?对不起,我弄糊涂了:谢谢,可以吗
d请你更精确一点?@user552961:我想的是一个地图的线条谢谢,你能更精确一点吗?@user552961:我想的是一个地图的线条你终止循环的方法有点不标准,结尾是一个有效的输入,只需检查nextLine是否返回null。哇,我真不敢相信我以前没见过这个…你的地图全错了…应该是…你试过这个吗?containsKey将抛出一个错误。现在好点了吗?它的工作原理是一样的。如果我使用map.getkey,它将返回值。如果我使用map.getvalue,它将返回键..我尝试使map.getword+1,但不起作用,甚至无法转换。你知道为什么吗?也许我没有正确地转换。你终止循环的方法有点不标准,结束是一个有效的输入,而只是检查nextLine是否返回null。哇,我不敢相信我以前没有看到这个…你的地图都错了…应该是…你试过这个吗?containsKey将抛出一个错误。现在好点了吗?它的工作原理是一样的。如果我使用map.getkey,它将返回值。如果我使用map.getvalue,它将返回键..我尝试使map.getword+1,但不起作用,甚至无法转换。你知道为什么吗?也许我投得不对。。