我正在构建一个程序,该程序读取停用词的文本文件,然后读取从Twitter收集的推文的文本文件。我正在尝试从推文集合中删除停用词,以便我只剩下"有趣"的词汇,然后依次将它们打印到控制台。
但是,没有任何东西打印到控制台,所以很明显它不起作用......它在导入test.txt文件之前工作(当我使用在程序中创建的字符串时,将其拆分,然后将其存储在数组中(。
任何有关读取测试.txt文件并拉出停用词,然后将 listOfWords 列表打印到控制台的任何帮助。
任何帮助将不胜感激
import java.util.*;
import java.io.*;
public class RemoveStopWords {
public static void main(String[] args) {
try {
Scanner stopWordsFile = new Scanner(new File("stopwords_twitter.txt"));
Scanner textFile = new Scanner(new File("Test.txt"));
// Create a set for the stop words (a set as it doesn't allow duplicates)
Set<String> stopWords = new HashSet<String>();
// For each word in the file
while (stopWordsFile.hasNext()) {
stopWords.add(stopWordsFile.next().trim().toLowerCase());
}
// Splits strings and stores each word into a list
ArrayList<String> words = new ArrayList<String>();
while (stopWordsFile.hasNext()) {
words.add(textFile.next().trim().toLowerCase());
}
// Create an empty list (a list because it allows duplicates)
ArrayList<String> listOfWords = new ArrayList<String>();
// Iterate over the array
for(String word : words) {
// Converts current string index to lowercase
String toCompare = word.toLowerCase();
// If the word isn't a stop word, add to listOfWords list
if (!stopWords.contains(toCompare)) {
listOfWords.add(word);
}
}
stopWordsFile.close();
textFile.close();
for (String str : listOfWords) {
System.out.print(str + " ");
}
} catch(FileNotFoundException e){
e.printStackTrace();
}
}
}
你有两个while (stopWordsFile.hasNext())
,第二个总是返回false
:
// For each word in the file
while (stopWordsFile.hasNext()) {
stopWords.add(stopWordsFile.next().trim().toLowerCase());
}
// Splits strings and stores each word into a list
ArrayList<String> words = new ArrayList<String>();
while (stopWordsFile.hasNext()) {
words.add(textFile.next().trim().toLowerCase());
}
你应该使用
while (textFile.hasNext())
相反
while (stopWordsFile.hasNext())
在第二个。
问题是您正在两次阅读文件中的单词:
while (stopWordsFile.hasNext()) { // this will never execute as stopWordsFile has no nextElement left
words.add(textFile.next().trim().toLowerCase());
}
因此,将您的第二个条件更改为:
while (textFile.hasNext()) {
words.add(textFile.next().trim().toLowerCase());
}
通过逐行读取文件并在每次迭代(每行(中测试文件复制到另一个文件中,如果您有包含"停用词"的行,如果是这种情况,请将其从行中删除并复制文件中的行,否则将按原样复制该行