|
|
@@ -6,7 +6,10 @@ import org.apache.commons.io.FileUtils;
|
|
|
import org.springframework.boot.system.ApplicationHome;
|
|
|
import org.springframework.core.io.ClassPathResource;
|
|
|
|
|
|
+import java.io.BufferedReader;
|
|
|
import java.io.File;
|
|
|
+import java.io.FileNotFoundException;
|
|
|
+import java.io.FileReader;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
import java.nio.file.Path;
|
|
|
import java.nio.file.Paths;
|
|
|
@@ -32,16 +35,40 @@ public class DrugComponentAnalyzer {
|
|
|
// 复用分词器实例(注意:Jieba非线程安全,多线程需每个线程new实例)
|
|
|
private static final JiebaSegmenter SEGMENTER = new JiebaSegmenter();
|
|
|
|
|
|
+ // 词典文件绝对路径(核心:直接指向服务器本地文件)
|
|
|
+ private static final String DRUG_FILE_PATH = "C:\\Tools\\jar\\drug.txt";
|
|
|
+ // 词典数据集合
|
|
|
+ private static final Set<String> DRUG_DICT = new HashSet<>();
|
|
|
+
|
|
|
+ // 整合后的静态代码块:一次性完成「加载WordDictionary」+「读取DRUG_DICT」
|
|
|
static {
|
|
|
- try{
|
|
|
- ClassPathResource resource = new ClassPathResource("drug.txt");
|
|
|
- Path path = resource.getFile().toPath();
|
|
|
+ try {
|
|
|
+ // 1. 校验文件是否存在
|
|
|
+ File drugFile = new File(DRUG_FILE_PATH);
|
|
|
+ if (!drugFile.exists()) {
|
|
|
+ throw new FileNotFoundException("词典文件不存在:" + DRUG_FILE_PATH);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 核心逻辑:给 WordDictionary 加载词典文件(依赖 Path)
|
|
|
+ Path path = drugFile.toPath();
|
|
|
WordDictionary.getInstance().loadUserDict(path);
|
|
|
- }catch (Exception e){
|
|
|
- throw new RuntimeException("加载词典失败", e);
|
|
|
+
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ // 统一抛出异常,包含完整错误信息
|
|
|
+ throw new RuntimeException("加载词典失败(路径:" + DRUG_FILE_PATH + ")", e);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 对外提供文件路径的方法(兼容原有依赖path的逻辑)
|
|
|
+ public static String getDrugFilePath() {
|
|
|
+ return DRUG_FILE_PATH;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 可选:对外提供词典集合(如果业务需要)
|
|
|
+ public static Set<String> getDrugDict() {
|
|
|
+ return DRUG_DICT;
|
|
|
+ }
|
|
|
/**
|
|
|
* 拆分药品成分(过滤停用词,仅保留有效成分)
|
|
|
*/
|