【问题标题】:Counting Postive and Negative words in a file using dictionaries (Java)使用字典(Java)计算文件中的肯定词和否定词
【发布时间】:2014-01-21 13:35:16
【问题描述】:

我正在尝试确定文件中正面和负面单词的出现次数,以计算该文件是正面还是负面。

我目前在尝试解析文件以了解文件中包含的肯定词和否定词的数量时遇到问题。目前,我正在使用BufferedReader 来读取我试图从中确定正负词的主文件以及包含正负词词典的两个文件。但是我遇到的问题是将每个单词与正负文件中的相应单词编号进行比较。

这是我当前的代码:

import java.io.*;
import java.util.Scanner;


public class ParseTest {

    public static void main(String args[]) throws IOException
    {
    File file1 = new File("fileforparsing");
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file1)));
    File file2 = new File("positivewordsdictionary");
    BufferedReader br1 = new BufferedReader(new InputStreamReader(new FileInputStream(file2)));

    int positive = 0;
           Scanner sc1 = new Scanner(br);
           Scanner sc2 = new Scanner(br1);
            while (sc1.hasNext() && sc2.hasNext()) {
                String str1 = sc1.next();
                String str2 = sc2.next();
                if (str1.equals(str2))
                    positive = positive +1;
            }
            while (sc2.hasNext())
                System.out.println(positive);
            sc1.close();
            sc2.close();
    }

}

我知道有什么问题,scanner 只是不断移动到下一行,而我希望原始文件保持在同一行,直到它完成对字典的解析,但我不太确定如何让它做我想做的事。任何帮助将不胜感激。

提前谢谢你。

【问题讨论】:

    标签: java parsing dictionary compare


    【解决方案1】:

    这行不通。您每次都需要重新打开字典文件。另一件事是它会非常缓慢。如果字典不是太大,您应该将它们加载到内存中,然后对您要分析的文件执行只读操作。

    public static void main(String args[]) throws IOException {
        Set<String> positive = loadDictionary("positivewordsdictionary");
        Set<String> negative = loadDictionary("negativewordsdictionary");
    
        File file = new File("fileforparsing");
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
    
        Scanner sc = new Scanner(br);
        String word;
        long positiveCount = 0;
        long negativeCount = 0;
        while (sc.hasNext()) {
            word = sc.next();
            if (positive.contains(word)) {
                System.out.println("Found positive "+positiveCount+":"+word);
                positiveCount++;
            }
            if (negative.contains(word)) {
                System.out.println("Found negative "+positiveCount+":"+word);
                negativeCount++;
            }
        }
        br.close();
    }
    
    
    public static Set<String> loadDictionary(String fileName) throws IOException {
        Set<String> words = new HashSet<String>();
        File file = new File(fileName);
        BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
        Scanner sc = new Scanner(br);
        while (sc.hasNext()) {
            words.add(sc.next());
        }
        br.close();
        return words;
    }
    

    更新:我已经尝试运行代码并且它正在工作。

    【讨论】:

    • 这正是我正在寻找的,非常感谢!
    【解决方案2】:

    不好的方法.. 不要同时打开 2 个文件...首先打开您的正面单词文件.. 取出数据并将其作为键存储在 Map 中。现在,对否定词文件做同样的事情......现在开始逐行读取文件并检查读取的字符串是否包含正/负词..如果是,增加计数(map.initialize values to 0 at the开始。)

    【讨论】:

      【解决方案3】:

      考虑在应用程序开始时用肯定词填充一个集合(例如 HashSet)。 您可以循环使用您的扫描仪来执行此操作:

      while(sc2.hasNext()) {
          set.add(sc2.next());
      }
      

      然后,当您循环浏览另一个文件时,您只需检查集合以查看它是否包含单词:

      while(sc1.hasNext()) {
          if (set.contains(sc1.next()) {
              positive++;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-26
        • 2014-09-10
        • 1970-01-01
        • 2020-04-21
        • 1970-01-01
        相关资源
        最近更新 更多