如何使用Movie Review文件打印其他文件中单词的情绪平均值?

时间:2016-10-22 20:01:48

标签: java

我正在开发一个有许多不同部分和方法的项目。对于这个特定部分,我需要向用户询问包含一组单词的文件的名称,每行一个。 (见附件)然后我需要通过将它与评分单词情感的movieReview文件进行比较来计算单词的平均分数/情绪。 (见附件)

[编辑]:我没有得到我的代码来获取wordList文件的第一行,在movieReview文件中搜索该单词,并找到该单词的平均分数。搜索完成后,转到下一个单词。然而,它是在第一个“机械”之后的其余单词上打印NaN

示例:wordList文件中的第一个单词是“mechanical”。在movieReview文件中找到6次机械,总分为4.“机械”一词的平均情绪为.666666666。

如何制作我的代码以便循环继续并找到每个单词的平均值并打印出来?对不起,如果这听起来很混乱,请告诉我是否需要澄清。此外,我是一个非常初学者编码器,所以请尽量不要使用困难的概念。 (另外,据说不需要使用数组或缓冲区)

电影评论档案: http://nifty.stanford.edu/2016/manley-urness-movie-review-sentiment/movieReviews.txt

Word列表文件(txt)的内容: 机械 汽车 没有灵魂 样式 家庭 精彩 历史的 也不 强大 闹剧 复杂 发人深省 利益 投 机智 静音 情绪 叙述 清爽 说教 可怕 坚决 可怕 对话 颠三倒四 花 话 移动 没有 放纵的 平淡 值 仅仅 总是 狗 故事 几乎不 聚焦 公式化 偏心 诡诈的 不可预知的 眼泪 写

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class methodThree {
public static void main (String [] args) throws FileNotFoundException {

Scanner in = new Scanner(System.in);
System.out.println("Enter the name of the file with words you want to score: ");
String inputFileName = in.next();
File inputFile = new File(inputFileName);

while(!inputFile.exists())
{
  System.out.println("Please enter a valid file name:");
  inputFile = new File(in.next());
}

Scanner wordFile = new Scanner (inputFile);

File inputMovie = new File("movieReviews.txt");
Scanner movieReview = new Scanner (inputMovie);


String reviewText;
int reviewScore;

while (wordFile.hasNextLine())
{
int count = 0;
double total = 0;
String word = wordFile.nextLine();

while (movieReview.hasNext()) {
  reviewScore = movieReview.nextInt();
  reviewText = movieReview.nextLine();

  if (reviewText.contains(word)) {
    count++;
    total = total + reviewScore;
  }
}

double average = (total / count);
System.out.println (word + " " + average);
}
}
}

1 个答案:

答案 0 :(得分:0)

那么你基本上想要做的是为wordfile中的每一行重复这段代码?

int count = 0;
double total = 0;
String word = wordFile.nextLine();

while(movieReview.hasNext()){
    reviewScore = movieReview.nextInt();
    reviewText = movieReview.nextLine();

    if (reviewText.contains(word)) {
        count++;
        total = total + reviewScore;
    }
}
double average = (total / count);
System.out.println(average);

如果是这种情况你可以用另一个while循环包围它。循环必须为wordFile中的每一行运行,因此它与movieReview.hasNext()循环或多或少是相同的循环。

while(wordFile.hasNext()){
    int count = 0;
    ...
}

只要wordFile有另一个得分词,循环就会运行。