一尘不染

从Java中的文本文件中提取短语

java

我正在使用ADFA-
LD数据集进行基于主机的入侵检测项目,现在正在进行特征提取模块。我构建了由长度为4的系统调用短语组成的短语词典。现在,为了进行特征提取,我需要将这些短语与新的系统调用轨迹进行比较(以下是一些示例):

我需要的是,如何将这些短语与新痕迹进行比较。我在用Java做。

我的短语字典:

sys_socketcall-sys_poll-sys_clock_gettime-sys_poll

sys_clock_gettime-sys_poll-sys_poll-sys_socketcall

sys_poll-sys_socketcall-sys_poll-sys_clock_gettime

sys_poll-sys_clock_gettime-sys_clock_gettime-sys_clock_gettime

sys_clock_gettime-sys_clock_gettime-sys_socketcall-sys_clock_gettime

sys_socketcall-sys_clock_gettime-sys_poll-sys_poll

sys_poll-sys_poll

我使用“-”作为分隔符,将这些短语与新轨迹进行比较,因此我以“-”加入了唯一的系统调用。


阅读 213

收藏
2020-12-03

共1个答案

一尘不染

似乎您想要的单词被空格分开了。在这种情况下,只需逐行阅读文件,然后使用即可获得所需的字词String.split(" ")。这是我可能想到的:

public class FileSplitter {

    public static void main(String[] args) throws IOException {
        File file = new File("input_file.txt");
        LinkedList<String> words = new LinkedList<String>();
        int i = 0;

        Files.lines(file.toPath()).
        forEachOrdered(line -> words.
                addAll(Arrays.asList(line.split(" "))));

        for(String word:words){
            if(word.trim().length() > 0){
                System.out.print(word.trim() + " ");
                if(i++ >= 3){
                    System.out.println();
                    i = 0;
                }
            }
        }
    }
}

对于您的示例,它返回以下内容:

sys_clock_gettime sys_poll sys_poll sys_clock_gettime 
sys_poll sys_poll sys_poll sys_clock_gettime 
sys_poll sys_clock_gettime sys_poll sys_poll 
sys_poll sys_poll sys_poll sys_poll
sys_poll sys_poll sys_socketcall
2020-12-03