Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java程序-单词统计_Java_Count_Statistics_Word_Keyword - Fatal编程技术网

Java程序-单词统计

Java程序-单词统计,java,count,statistics,word,keyword,Java,Count,Statistics,Word,Keyword,我创建了一个Java程序,它根据关键字文本文件从各种社交媒体API返回搜索结果,并将返回的结果写入另一个文本文件 我现在正在尝试另一个单独的类,它将扫描搜索结果文本文件,并返回有关在搜索结果中找到“关键字”的次数的统计信息。我基本上是在尝试对keywords.txt文件运行搜索 我一直在尝试让下面的代码正常工作,但我只能让它返回所有单词,而不仅仅是那些来自keywords.txt文件的单词 我试图让输入流阅读器工作,但没有用。任何帮助都将不胜感激 包搜索; 导入java.util.*;//提供

我创建了一个Java程序,它根据关键字文本文件从各种社交媒体API返回搜索结果,并将返回的结果写入另一个文本文件

我现在正在尝试另一个单独的类,它将扫描搜索结果文本文件,并返回有关在搜索结果中找到“关键字”的次数的统计信息。我基本上是在尝试对keywords.txt文件运行搜索

我一直在尝试让下面的代码正常工作,但我只能让它返回所有单词,而不仅仅是那些来自keywords.txt文件的单词

我试图让输入流阅读器工作,但没有用。任何帮助都将不胜感激


包搜索;
导入java.util.*;//提供树映射、迭代器、扫描程序
导入java.io.*;//提供FileReader、FileNotFoundException
公共类搜索结果
{
公共静态void main(字符串[]args)
{ 
TreeMap frequencyData=新的TreeMap();
readWordFile(频率数据);
打印所有计数(频率数据);
}
公共静态int getCount(字符串字、树映射频率数据)
{
if(frequencyData.containsKey(word))
{//该单词以前出现过,因此请从映射中获取其计数
返回frequencyData.get(word);//自动取消装箱
}
其他的
{//没有出现这个词
返回0;
}
}
公共静态void printAllCounts(树映射频率数据)
{
System.out.println(“-------------------------------------------------------------”;
System.out.println(“单词”);
for(字符串字:frequencyData.keySet())
{
System.out.printf(“%15d%s\n”,frequencyData.get(word),word);
}
System.out.println(“-------------------------------------------------------------”;
} 
公共静态void readWordFile(TreeMap frequencyData)
{
扫描字文件;
字符串字;//从文件中读取的字
整数计数;//该单词出现的次数
尝试
{
wordFile=新的扫描仪(新的文件阅读器(“SearchResults.txt”);
}
catch(filenotfounde异常)
{
系统错误println(e);
返回;
}
while(wordFile.hasNext())
{
//阅读下一个单词,如果需要,去掉行尾标记:
word=wordFile.next();
//获取此单词的当前计数,添加一个,然后存储新计数:
count=getCount(字、频率数据)+1;
频率数据。输入(字、计数);
}
} 
}

在那里,我清理了您的代码,并添加了对keywords.txt中所有关键字的过滤

public static void main(String[] args) throws Exception {
  printAllCounts(
    readWordFile("SearchResults.txt", loadKeywords("keywords.txt")));
}

private static Map<String, Integer> readWordFile(
  String fname, Set<String> keywords) throws FileNotFoundException
{
  final Map<String, Integer> frequencyData = new TreeMap<String, Integer>();
  for (Scanner wordFile = new Scanner(new FileReader(fname)); 
    wordFile.hasNext();) 
  {
    final String word = wordFile.next();
    if (keywords.contains(word)) 
      frequencyData.put(word, getCount(word, frequencyData) + 1);
  }
  return frequencyData;
}

private static void printAllCounts(Map<String, Integer> frequencyData) {
  System.out.println("-----------------------------------------------");
  System.out.println(" Occurrences Word");
  for(Map.Entry<String, Integer> e : frequencyData.entrySet())
    System.out.printf("%15d %s\n", e.getValue(), e.getKey());
  System.out.println("-----------------------------------------------");
}

private static int getCount(String word, Map<String, Integer> frequencyData) {
    return frequencyData.containsKey(word)? frequencyData.get(word) : 0;
}

private static Set<String> loadKeywords(String fname) 
throws FileNotFoundException 
{
  final Set<String> result = new HashSet<String>();
  for (Scanner s = new Scanner(new FileReader(fname)); s.hasNext();) 
    result.add(s.next());
  return result;
}
publicstaticvoidmain(字符串[]args)引发异常{
打印计数(
readWordFile(“SearchResults.txt”,loadKeywords(“keywords.txt”);
}
私有静态映射readWordFile(
字符串fname,设置关键字)引发FileNotFoundException
{
最终映射频率数据=新树映射();
对于(Scanner wordFile=new Scanner(new FileReader(fname));
wordFile.hasNext();)
{
最后一个字符串word=wordFile.next();
if(关键字.contains(word))
frequencyData.put(word,getCount(word,frequencyData)+1);
}
返回频率数据;
}
私有静态void printAllCounts(映射频率数据){
System.out.println(“-------------------------------------------------------------”;
System.out.println(“单词”);
对于(Map.Entry e:frequencyData.entrySet())
System.out.printf(“%15d%s\n”,e.getValue(),e.getKey());
System.out.println(“-------------------------------------------------------------”;
}
私有静态int getCount(字符串字、映射频率数据){
返回frequencyData.containsKey(word)?frequencyData.get(word):0;
}
私有静态集合loadKeywords(字符串fname)
抛出FileNotFoundException
{
最终设置结果=新的HashSet();
for(Scanner s=new Scanner(new FileReader(fname));s.hasNext();)
结果。添加(s.next());
返回结果;
}

如果我理解正确,您是否希望添加另一条检查If计数的If语句!=0,然后才将其添加到您的frequencyData映射?您到底尝试了什么?代码中没有处理keywords.txt的行。当你说你试图让它工作而没有一句话作为证据时,听起来很可疑。谢谢Marko,我的道歉。我没有包括我试图用一个输入StreamReader来处理keyword.txt文件所做的事情,因为它太乱了,根本不起作用。非常感谢您提供的代码,非常感谢,它的工作原理与我所尝试的完全相同。很高兴能提供帮助。请回答(作为礼节问题)。
public static void main(String[] args) throws Exception {
  printAllCounts(
    readWordFile("SearchResults.txt", loadKeywords("keywords.txt")));
}

private static Map<String, Integer> readWordFile(
  String fname, Set<String> keywords) throws FileNotFoundException
{
  final Map<String, Integer> frequencyData = new TreeMap<String, Integer>();
  for (Scanner wordFile = new Scanner(new FileReader(fname)); 
    wordFile.hasNext();) 
  {
    final String word = wordFile.next();
    if (keywords.contains(word)) 
      frequencyData.put(word, getCount(word, frequencyData) + 1);
  }
  return frequencyData;
}

private static void printAllCounts(Map<String, Integer> frequencyData) {
  System.out.println("-----------------------------------------------");
  System.out.println(" Occurrences Word");
  for(Map.Entry<String, Integer> e : frequencyData.entrySet())
    System.out.printf("%15d %s\n", e.getValue(), e.getKey());
  System.out.println("-----------------------------------------------");
}

private static int getCount(String word, Map<String, Integer> frequencyData) {
    return frequencyData.containsKey(word)? frequencyData.get(word) : 0;
}

private static Set<String> loadKeywords(String fname) 
throws FileNotFoundException 
{
  final Set<String> result = new HashSet<String>();
  for (Scanner s = new Scanner(new FileReader(fname)); s.hasNext();) 
    result.add(s.next());
  return result;
}