我有一个术语词典dictonery/AB.txt
和一个大文本文件dictonery/annotate.txt
。
我想知道AB.txt
文件中annotate.txt
中的哪些字典术语。
到目前为止,这是我的代码:
String fileString = new String(Files.readAllBytes(Paths.get("dictonery/AB.txt")), StandardCharsets.UTF_8);
Map<String, String> map = new HashMap<String, String>();
String entireFileText = new Scanner(new File("dictonery/annotate.txt")).useDelimiter("\\A").next();
map.put(fileString, "m");
for (String key : map.keySet()) {
if(fileString.contains(key)) {
System.out.print(key);
}
}
此刻整个字典都归还了。如何将其作为annotator.txt
文件中的特定术语?
答案 0 :(得分:1)
有一些事情可能会有所帮助:
Map
中的值,我会使用Set
(具体为HashSet
)。Scanner.next()
一次读取单个单词而不是整个文件fileString.contains(key)
的检查非常低效,并且对于部分匹配也会返回true
(如果您的词典中包含单词“do”,它也会匹配“dog”)。它还会多次打印匹配的单词。就个人而言,我会创建两个集合,以相同的方式读取这两个文件,然后calculate their intersection。如果你想要排序的输出(可能不是一个要求,但通常很好),你可以使Set
迭代TreeSet
。
答案 1 :(得分:0)
你真的不需要地图。
fileString
使用如下循环读入您的AB.txt文件:
File file = new File("data.txt");
try {
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
// do something like fileString.contains(line) here
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
fileString
是否包含line
(其中应包含刚从文件中读取的令牌)。这假设您每行都有一个令牌。