From 0e8ddbd749d94c6f91b2b329e760ddfb87568db4 Mon Sep 17 00:00:00 2001 From: Figroc Chen Date: Sat, 24 Feb 2018 16:40:21 +0800 Subject: [PATCH] ext dic&stopwords can be dir (#437) allow dir for ext_dict and ext_stopwords in IKAnalyzer.cfg.xml By: Peng Chen --- .../org/wltea/analyzer/dic/Dictionary.java | 40 ++++++++++++++++--- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/wltea/analyzer/dic/Dictionary.java b/src/main/java/org/wltea/analyzer/dic/Dictionary.java index daa5b62..a43087c 100644 --- a/src/main/java/org/wltea/analyzer/dic/Dictionary.java +++ b/src/main/java/org/wltea/analyzer/dic/Dictionary.java @@ -32,7 +32,11 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.nio.file.attribute.BasicFileAttributes; +import java.nio.file.Files; +import java.nio.file.FileVisitResult; import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; import java.util.*; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -173,6 +177,30 @@ public class Dictionary { return singleton; } + private List walkFileTree(List files, Path path) { + if (Files.isRegularFile(path)) { + files.add(path.toString()); + } else if (Files.isDirectory(path)) try { + Files.walkFileTree(path, new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { + files.add(file.toString()); + return FileVisitResult.CONTINUE; + } + @Override + public FileVisitResult visitFileFailed(Path file, IOException e) { + logger.error("[Ext Loading] listing files", e); + return FileVisitResult.CONTINUE; + } + }); + } catch (IOException e) { + logger.error("[Ext Loading] listing files", e); + } else { + logger.warn("[Ext Loading] file not found: " + path); + } + return files; + } + public List getExtDictionarys() { List extDictFiles = new ArrayList(2); String extDictCfg = getProperty(EXT_DICT); @@ -181,8 +209,8 @@ public class Dictionary { String[] filePaths = extDictCfg.split(";"); for (String filePath : filePaths) { if (filePath != null && !"".equals(filePath.trim())) { - Path file = PathUtils.get(filePath.trim()); - extDictFiles.add(file.toString()); + Path file = PathUtils.get(getDictRoot(), filePath.trim()); + walkFileTree(extDictFiles, file); } } @@ -214,8 +242,8 @@ public class Dictionary { String[] filePaths = extStopWordDictCfg.split(";"); for (String filePath : filePaths) { if (filePath != null && !"".equals(filePath.trim())) { - Path file = PathUtils.get(filePath.trim()); - extStopWordDictFiles.add(file.toString()); + Path file = PathUtils.get(getDictRoot(), filePath.trim()); + walkFileTree(extStopWordDictFiles, file); } } @@ -391,7 +419,7 @@ public class Dictionary { for (String extDictName : extDictFiles) { // 读取扩展词典文件 logger.info("[Dict Loading] " + extDictName); - Path file = PathUtils.get(getDictRoot(), extDictName); + Path file = PathUtils.get(extDictName); try { is = new FileInputStream(file.toFile()); } catch (FileNotFoundException e) { @@ -545,7 +573,7 @@ public class Dictionary { logger.info("[Dict Loading] " + extStopWordDictName); // 读取扩展词典文件 - file = PathUtils.get(getDictRoot(), extStopWordDictName); + file = PathUtils.get(extStopWordDictName); try { is = new FileInputStream(file.toFile()); } catch (FileNotFoundException e) { -- GitLab