powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как удалить совпадающие слова?
15 сообщений из 15, страница 1 из 1
Как удалить совпадающие слова?
    #39447522
Su-27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Существует следующая проблема. Есть 2 текстовых файла. В первом файле находится большой по объему текст, а во втором файле перечислены предлоги, союзы, союзные слова и местоимения, которые могут встречаться (а могут и не встречаться) в тексте первого файла. Нужно удалить все совпадающие слова из текста (т.е. все предлоги, союзы, союзные слова и местоимения). Я пытался реализовать это следующим образом:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    
String text = "";
                Scanner novelFile = new Scanner(new File("C:\\big_text.txt")); 
                while(novelFile.hasNext()){
    		text += novelFile.nextLine() + "\r\n";
                }
    String words = "";
     Scanner deleteWords = new Scanner(new File("C:\\words.txt")); 
    Set<String> wordSet = new HashSet<>();
                while (deleteWords.hasNext()) {
                wordSet.add(deleteWords.next().toLowerCase());
                }
    String word = null;
                     String result;
                     if(text.equals(wordSet)){
                      result=text.replaceAll(word, "");
                   }
...
Рейтинг: 0 / 0
Как удалить совпадающие слова?
    #39447560
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Непонятно что на выходе то должно быть?
Ваш код крайне неэффективный, я бы делал как-то так -
1) вычитываем файл текста
2) разбиваем его на строки
3) каждую строку разбиваем на слова по пробелу
4) проверяем каждое слово, содержится ли в stop words или нет, если содержится - фильтруем
5) объелиняем все слова обратно в текст
...
Рейтинг: 0 / 0
Как удалить совпадающие слова?
    #39447616
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никвычитываем файл текстакуда? :)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Reader inputFile
Set stopWords

Writer outputFile
while (line = inputFile.read) {
  String newLine = getLineWordsWithoutStopWords(line, stopWords)
  outputFile.write(newLine)
}

String getLineWordsWithoutStopWords(srcLine, stopWords) {
  String[] srcLineWords = srcLine.split("\\s")
  
  srcLineWords.each word {
    if (stopWords.contains(word)) continue

    result += word + " "
  } 
}
...
Рейтинг: 0 / 0
Как удалить совпадающие слова?
    #39447619
Su-27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник, спасибо за ваш ответ! Но мне не совсем понятны некоторые моменты.

забыл никНепонятно что на выходе то должно быть?
На выходе должен быть текст без предлогов, союзов, союзных слов и местоимений.

забыл ник 4) проверяем каждое слово, содержится ли в stop words или нет, если содержится - фильтруем
Каким образом их фильтровать?

забыл ник 5) объелиняем все слова обратно в текст
Как это реализовать?
...
Рейтинг: 0 / 0
Как удалить совпадающие слова?
    #39447637
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Su-27,

grasoff.net привел довольно понятный псевдокод, разбирайтесь.
Судя по всему вы в java новичок, поэтому вот пару советов

1) вычитывать файл вам надо через BuferredReader, смотреть здесь - https://www.mkyong.com/java/java-read-a-text-file-line-by-line/ (2 раздел). Если хочется разобраться как это лучше и эффективнее сделать на java 8 то смотреть здесь - https://www.mkyong.com/java8/java-8-stream-read-a-file-line-by-line/ но это более продвинутый левел

2) Чтобы фильтрануть слово вам надо будет реализовать нечто вроде

if stopWords.contains(word) skip else add
В общем смотрите метод contains у Set

3) Объединять слова можно либо через конкатенацию(лучше так не делать в цикле) либо через объект StringBuilder, нагуглите сами о нем
...
Рейтинг: 0 / 0
Как удалить совпадающие слова?
    #39448020
Su-27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник, спасибо за ваш ответ!

забыл ник 1) вычитывать файл вам надо через BuferredReader, смотреть здесь - https://www.mkyong.com/java/java-read-a-text-file-line-by-line/ (2 раздел).
Сделал считывание файла через BuferredReader, как вы и советовали, но возникла следующая проблема: считывается только первое слово в тексте(его заголовок), а как сделать чтобы считывался весь текст?
...
Рейтинг: 0 / 0
Как удалить совпадающие слова?
    #39448038
Vurn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
import java.io.*;
import java.nio.CharBuffer;
import java.util.regex.Pattern;

public class Main implements Runnable{
    @Override
    public void run() {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("dic.txt"), "UTF-8"));
            StringBuilder sb = new StringBuilder();
            String s;
            while ((s = br.readLine()) != null) {
                sb.append(s).append('|');
            }
            if (sb.length() == 0) {
                return;
            }
            sb.setLength(sb.length() - 1);
            Pattern p = Pattern.compile(sb.toString());

            br.close();
            br =null;
            File f = new File("txt.txt");
            char[] arr= new char[(int)f.length()];
            InputStreamReader isr = new InputStreamReader(new FileInputStream(f),"UTF-8");
            int read = isr.read(arr, 0, arr.length);
            CharBuffer cd = CharBuffer.wrap(arr, 0, read);
            String target = p.matcher(cd).replaceAll("");
            System.out.println(target);

        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    public static void main(String[] args) throws IOException {
        new Main().run();
    }
}



не проверял, но должно работать с "полпинка". словарь - "dic.txt", текст для правки - "txt.txt", кодировка UTF-8
...
Рейтинг: 0 / 0
Как удалить совпадающие слова?
    #39448041
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vurnне проверял, но должно работать с "полпинка". словарь - "dic.txt", текст для правки - "txt.txt", кодировка UTF-8
Жуть какая.
...
Рейтинг: 0 / 0
Как удалить совпадающие слова?
    #39448112
Su-27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vurn
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
import java.io.*;
import java.nio.CharBuffer;
import java.util.regex.Pattern;

public class Main implements Runnable{
    @Override
    public void run() {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("dic.txt"), "UTF-8"));
            StringBuilder sb = new StringBuilder();
            String s;
            while ((s = br.readLine()) != null) {
                sb.append(s).append('|');
            }
            if (sb.length() == 0) {
                return;
            }
            sb.setLength(sb.length() - 1);
            Pattern p = Pattern.compile(sb.toString());

            br.close();
            br =null;
            File f = new File("txt.txt");
            char[] arr= new char[(int)f.length()];
            InputStreamReader isr = new InputStreamReader(new FileInputStream(f),"UTF-8");
            int read = isr.read(arr, 0, arr.length);
            CharBuffer cd = CharBuffer.wrap(arr, 0, read);
            String target = p.matcher(cd).replaceAll("");
            System.out.println(target);

        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    public static void main(String[] args) throws IOException {
        new Main().run();
    }
}



не проверял, но должно работать с "полпинка". словарь - "dic.txt", текст для правки - "txt.txt", кодировка UTF-8

Vurn, спасибо за ваш ответ! Я проверил, но код работает не так как нужно. Ваша программа удаляет некоторую часть слов.
Вот первое предложение из текста: "In the corner of a first-class smoking carriage, Mr. Justice Wargrave, lately retired from the bench, puffed at a cigar and ran an interested eye through the political news in the Times."
А вот что выводит программа: "In corner a -cls smokg carriage, Mr. Jtice Wargrave, lely retired bench, puffed a cigar d r terested eye polical s Tis."
...
Рейтинг: 0 / 0
Как удалить совпадающие слова?
    #39448131
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Su-27
Код: java
1.
if(text.equals(wordSet))



Это как вообще?
...
Рейтинг: 0 / 0
Как удалить совпадающие слова?
    #39448148
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЭто как вообще?Тип аргумента object . Все ок. Всегда будет false (:
...
Рейтинг: 0 / 0
Как удалить совпадающие слова?
    #39448155
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UsmanТип аргумента object . Все ок. Всегда будет false (:
Спасибо, кэп. Просто не понятно чего этим студент хотел добиться.
...
Рейтинг: 0 / 0
Как удалить совпадающие слова?
    #39448159
Vurn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Su-27Vurn, спасибо за ваш ответ! Я проверил, но код работает не так как нужно. Ваша программа удаляет некоторую часть слов.
Вот первое предложение из текста: "In the corner of a first-class smoking carriage, Mr. Justice Wargrave, lately retired from the bench, puffed at a cigar and ran an interested eye through the political news in the Times."
А вот что выводит программа: "In corner a -cls smokg carriage, Mr. Jtice Wargrave, lely retired bench, puffed a cigar d r terested eye polical s Tis."

Ошибся в паттерне. Вот правильный паттерн:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
import java.io.*;
import java.nio.CharBuffer;
import java.util.regex.Pattern;

public class Main implements Runnable{
    @Override
    public void run() {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("dic.txt"), "UTF-8"));
            StringBuilder sb = new StringBuilder();
            String s;
            while ((s = br.readLine()) != null) {
                sb.append(s).append("\\b\\s?").append('|');
            }
            if (sb.length() == 0) {
                return;
            }
            sb.setLength(sb.length() - 1);
            Pattern p = Pattern.compile(sb.toString(),Pattern.CASE_INSENSITIVE|Pattern.UNICODE_CASE);

            br.close();
            br =null;
            File f = new File("txt.txt");
            char[] arr= new char[(int)f.length()];
            InputStreamReader isr = new InputStreamReader(new FileInputStream(f),"UTF-8");
            int read = isr.read(arr, 0, arr.length);
            CharBuffer cd = CharBuffer.wrap(arr, 0, read);
            String target = p.matcher(cd).replaceAll("");
            System.out.println(target);

        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    public static void main(String[] args) throws IOException {
        new Main().run();
    }
}
...
Рейтинг: 0 / 0
Как удалить совпадающие слова?
    #39448242
Vurn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хехе! Вот еще более правильный паттерн:
Код: java
1.
2.
3.
            while ((s = br.readLine()) != null) {
                sb.append("\\b").append(s).append("\\b\\s?|");
            }
...
Рейтинг: 0 / 0
Как удалить совпадающие слова?
    #39448252
Su-27
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vurn, все работает. Спасибо вам большое!
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как удалить совпадающие слова?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]