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

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

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 …….

我需要的是,如何将这些短语与新痕迹进行比较。 我在做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

我使用’ – ‘作为分隔符来比较这些短语和新的痕迹,所以我用’ – ‘加入了独特的系统调用。

看起来你想要的单词被空格分割。 在这种情况下,只需逐行读取您的文件,然后使用String.split(" ")获取您的文字。 这是我可能想到的一个:

 public class FileSplitter { public static void main(String[] args) throws IOException { File file = new File("input_file.txt"); LinkedList words = new LinkedList(); 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