Удалить StopWords в JAVA, переданном File - PullRequest
1 голос
/ 02 июля 2019

Мне нужно получить несколько StopWords из текстового файла и удалить их из текста.Я получаю StopWords из файла этим методом, сохраняя их в массиве String и возвращая:

public String[] loadStopwords(File targetFile, String[] stopWords) throws IOException {

    File fileTo = new File(targetFile.toString());
    BufferedReader br;
    List<String> lines = new ArrayList<String>();

    try {
            br = new BufferedReader(new FileReader(fileTo));
            String st;
                while((st=br.readLine()) != null){
                    lines.add(st);
                }
    } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    stopWords = lines.toArray(new String[]{});
    return stopWords;

}

Затем я передаю StopWords [] и текст для обновления внутри этого файла:

public void removeStopWords(String targetText, String[] stopwords) {
    targetText = targetText.toLowerCase().trim();

    ArrayList<String> wordList = new ArrayList<>();
    wordList.addAll(Arrays.asList(targetText.split(" ")));

    List<String> stopWordsList = new ArrayList<>();
    stopWordsList.addAll(Arrays.asList(stopwords));

    wordList.removeAll(stopWordsList);

}

Но из wordList ничего не удаляется.Почему?

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Попробуйте также сохранить стоп-слова в строчные буквы :

public  String[] loadStopwords(String targetFile) throws IOException {
    File fileTo = new File(targetFile);
    BufferedReader br;
    List<String> lines = new ArrayList<>();
    try {
        br = new BufferedReader(new FileReader(fileTo));
        String st;
        while((st=br.readLine()) != null){
            //Adding words en lowercase and without start end blanks
            lines.add(st.toLowerCase().trim);
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    return lines.toArray(new String[]{});
}

public  ArrayList<String> removeStopWords(String targetText, String[] stopwords) {
    //Make the text to LowerCase also
    targetText = targetText.toLowerCase().trim();

    ArrayList<String> wordList = new ArrayList<>();
    wordList.addAll(Arrays.asList(targetText.split(" ")));

    List<String> stopWordsList = new ArrayList<>();
    stopWordsList.addAll(Arrays.asList(stopwords));

    wordList.removeAll(stopWordsList);

    return wordList;
}
0 голосов
/ 02 июля 2019

Эдоардо

Это работает для меня. Но есть несколько комментариев:

  1. Вы не используете аргумент stopWords в методе loadStopWords.
  2. Вы не возвращаете wordList из метода removeStopWords.

Глядя на ваши комментарии, я подозреваю, что разница заключается в текстовом файле стоп-слов. У меня было мое с каждым стоп-словом в новой строке, тогда как у вас, скорее всего, все стоп-слова в одной строке, которые вы не отделяете.

...