我正在尝试确定文件中发生的正常和负词的数量,以计算文件是正面还是负面的。
我目前正在遇到问题,试图解析文件中包含的正和否定词数量的文件。目前,我目前正在使用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
只是不断地移到下一行,但我不确定如何如何让它做我想要的。任何帮助将不胜感激。
预先感谢您。
这是行不通的。您需要每次重新打开字典文件。另一件事是它将非常慢。如果字典不太大,则应将它们加载到内存中,然后仅在要分析的文件上进行读取。
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个文件...首先打开您的正词文件。将数据取出并将其作为键存储在地图中。现在,对于否定单词文件做同样的操作...现在开始按行读取文件,并检查读取字符串是否包含正/负单词。如果是,请增加计数(映射的值。开始。)
考虑在应用程序开始时用正词填充集合(例如主题设置)。您可以在循环中使用扫描仪来执行此操作:
while(sc2.hasNext()) {
set.add(sc2.next());
}
然后,当您通过另一个文件循环时,您只需检查集合即可查看它是否包含:
while(sc1.hasNext()) {
if (set.contains(sc1.next()) {
positive++;
}
}