Повышение производительности строкового поиска с использованием pattern.compile в больших файлахJAVA

Программисты JAVA общаются здесь
Anonymous
Повышение производительности строкового поиска с использованием pattern.compile в больших файлах

Сообщение Anonymous »

У меня огромные текстовые файлы, размер которых может варьироваться от 500 до 500 МБ. У меня есть список ключевых слов, которые необходимо найти в файловом содержании. Нет. ключевых слов может составлять до 400 000.
прямо сейчас я использую приведенный ниже код, чтобы найти ключевые слова в содержимом файла < /p>

Код: Выделить всё

public static void main(String[] args) {
StringBuilder fileContent = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new FileReader("C:\\Users\\harshita.sethi\\Desktop\\merge\\MNT.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
fileContent.append(line).append("\n");
}
}

String content = fileContent.toString();
Set[*]> keywords = getDbQuery(); // size can be up to 4*10^5

for (List key : keywords) {
if (checkOccurence(content, key.get(0))) {
//Do Somethng
}
}
}

private static boolean checkOccurence(String content, String keyword) {
Boolean flag = false;
try {

Pattern p = Pattern.compile("\\b" + keyword + "\\b", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(content);
flag = m.find();

} catch (PatternSyntaxException ex) {
System.out.println("cannot report occrence of " + keyword);
}
return flag;
}
< /code>

Проблема заключается в огромном размере файла. Для сканирования файла требуется много времени. Я прошел все виды тестирования и пришел к выводу, что Pattern.compile делает прогресс кода медленным.
Я читал в Интернете, поскольку Pattern.compile собирает повторную экспозицию каждый раз, когда функция называется много времени. Ограничено использовать версию Java 6. < /p>

 edit -< /strong> < /p>

Я попробовал все ключевые слова перед циклами, как предложено несколько человек. Я вижу, что в времени выполнения кода нет большой разницы. Потребовалось всего несколько секунд, чтобы завершить полный пробег, где он занимал 8-10 минут раньше. Но путем удаления граничного режима 
я не получаю желаемый вывод. < /p>

Вопрос -< /strong> есть ли способ точно настроить производительность, используя границы. Почему производительность резко изменилась? < /p>

Моя цель (например) - получить < /p>


Подробнее здесь: https://stackoverflow.com/questions/433 ... arge-files

Вернуться в «JAVA»