使用字典(Java)计算文件中的正面和负面单词

时间:2014-01-21 13:35:17

标签: java parsing dictionary compare

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

我目前在尝试解析文件中包含文件中包含的正面和负面字数时遇到问题。目前,我正在使用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只是不断地移动到下一行当我希望原始文件保持在同一行,直到它完成对字典的解析,但我不是真的很确定如何让它做我想做的事。任何帮助将不胜感激。

提前谢谢。

3 个答案:

答案 0 :(得分: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;
}

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

答案 1 :(得分:0)

糟糕的方法..不要同时打开2个文件...首先打开你的正文文件..取出数据并将其作为密钥存储在地图中。现在,对负字文件执行相同操作...现在逐行开始读取文件并检查读取字符串是否包含正/负字。如果是,则增加计数(map的值。初始化值为0开始。)

答案 2 :(得分:0)

考虑使用应用程序开头的正面词语填充Set(例如HashSet)。 您可以循环使用扫描仪来执行此操作:

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

然后,当你循环浏览另一个文件时,你可以检查一下它是否包含这个词:

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