使用字典计算文件中的肯定词和否定词(Java)

使用字典计算文件中的肯定词和否定词(Java),java,parsing,dictionary,compare,Java,Parsing,Dictionary,Compare,我试图确定一个文件中出现的正反两个词的数量,以计算该文件的音调是正调还是负调 我目前在试图解析文件中包含的肯定词和否定词的数量时遇到问题。目前,我正在使用一个BufferedReader来读取主文件,我试图从中确定肯定词和否定词,以及包含肯定词和否定词词典的两个文件。然而,我遇到的问题是将每个单词与正负文件中相应的单词编号进行比较 这是我目前的代码: import java.io.*; import java.util.Scanner; public class ParseTest {

我试图确定一个文件中出现的正反两个词的数量,以计算该文件的音调是正调还是负调

我目前在试图解析文件中包含的肯定词和否定词的数量时遇到问题。目前,我正在使用一个
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();
    }

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


提前谢谢。

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

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

while(sc2.hasNext()) {
    set.add(sc2.next());
}
然后,当您在另一个文件中循环时,您只需检查集合以查看它是否包含单词:

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

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

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;
}
publicstaticvoidmain(字符串args[])引发IOException{
Set positive=loadDictionary(“positivewordsdictionary”);
Set negative=loadDictionary(“negativewordsdictionary”);
File File=新文件(“fileforparsing”);
BufferedReader br=新的BufferedReader(新的InputStreamReader(新文件InputStream(文件)));
扫描仪sc=新扫描仪(br);
字符串字;
长正计数=0;
长负计数=0;
while(sc.hasNext()){
word=sc.next();
if(正.包含(字)){
System.out.println(“发现阳性”+阳性计数+”:“+字);
正计数++;
}
if(否定。包含(单词)){
System.out.println(“发现负数”+正数+”:“+字);
否定计数++;
}
}
br.close();
}
公共静态集loadDictionary(字符串文件名)引发IOException{
Set words=新HashSet();
文件=新文件(文件名);
BufferedReader br=新的BufferedReader(新的InputStreamReader(新文件InputStream(文件)));
扫描仪sc=新扫描仪(br);
while(sc.hasNext()){
添加(sc.next());
}
br.close();
返回单词;
}

更新:我已经试着运行代码,它正在运行。

这正是我想要的,非常感谢!