Kaynağa Gözat

1- 修改接口。

bijl 6 yıl önce
ebeveyn
işleme
7f9f946dd4

+ 4 - 4
algorithm/src/main/java/org/algorithm/core/cnn/AlgorithmCNNExecutor.java

@@ -1,8 +1,8 @@
 package org.algorithm.core.cnn;
 
-import org.algorithm.core.cnn.model.Triad;
+import org.algorithm.core.cnn.entity.Lemma;
+import org.algorithm.core.cnn.entity.Triad;
 
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -16,8 +16,8 @@ public abstract class AlgorithmCNNExecutor {
     /**
      *
      * @param content 输入句子
-     * @param json_content 句子content中的实体信息
+     * @param lemmas 实体列表
      * @return
      */
-    public abstract List<Triad> execute(String content, String json_content);
+    public abstract List<Triad> execute(String content, List<Lemma> lemmas);
 }

+ 12 - 24
algorithm/src/main/java/org/algorithm/core/cnn/dataset/RelationExtractionDataSet.java

@@ -1,13 +1,12 @@
 package org.algorithm.core.cnn.dataset;
 
 import java.io.BufferedReader;
-import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.IOException;
 import java.util.*;
 
-import org.algorithm.core.cnn.model.LemmaInfo;
-import org.algorithm.util.TextFileReader;
+import org.algorithm.core.cnn.entity.Lemma;
+import org.algorithm.core.cnn.entity.LemmaInfo;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 
@@ -23,16 +22,8 @@ public class RelationExtractionDataSet {
     public int maxLength = 200;
 
 
-    /**
-     * 切分句子
-     *
-     * @param document 原有文档
-     * @return 句子数组
-     */
-    public String[] splitSentence(String document) {
-        String[] sentences = null;
-        sentences = document.split("。|;|\n|\n\r");
-        return sentences;
+    public RelationExtractionDataSet(String dir) {
+        this.loadDictionary(dir);
     }
 
     /**
@@ -40,7 +31,7 @@ public class RelationExtractionDataSet {
      *
      * @param dir
      */
-    public void loadDictionary(String dir) {
+    private void loadDictionary(String dir) {
         BufferedReader br = null;
         try {
             br = new BufferedReader(new FileReader(dir));// 读取原始json文件
@@ -113,21 +104,18 @@ public class RelationExtractionDataSet {
     }
 
     /**
-     * @param sentence     输入句子
-     * @param entity1 实体1信息
-     * @param entity2 实体2信息
+     * @param sentence 输入句子
+     * @param entity1  实体1信息
+     * @param entity2  实体2信息
      * @return
      */
-    public int[][] getExample(String sentence, LemmaInfo entity1, LemmaInfo entity2) {
+    public int[][] getExample(String sentence, Lemma entity1, Lemma entity2) {
         int[][] example = new int[3][this.maxLength];
-        int startPos = entity1.getOffset().intValue();
-        int endPos = entity1.getOffset().intValue() + entity1.getLength().intValue() - 1;
 
         example[0] = this.sentence2ids(sentence);
-        example[1] = this.getRelativePositions(sentence, startPos + "," + endPos);
-        startPos = entity2.getOffset().intValue();
-        endPos = entity2.getOffset().intValue() + entity2.getLength().intValue() - 1;
-        example[2] = this.getRelativePositions(sentence, startPos + "," + endPos);
+        example[1] = this.getRelativePositions(sentence, entity1.getPosition());
+
+        example[2] = this.getRelativePositions(sentence, entity2.getPosition());
 
         return example;
     }

+ 2 - 2
algorithm/src/main/java/org/algorithm/core/cnn/model/Lemma.java

@@ -1,10 +1,10 @@
-package org.algorithm.core.cnn.model;
+package org.algorithm.core.cnn.entity;
 
 import java.util.ArrayList;
 import java.util.List;
 
 /**
- * @ClassName org.algorithm.core.cnn.model.Lemma
+ * @ClassName org.algorithm.core.cnn.entity.Lemma
  * @Description 词元信息
  * @Author fyeman
  * @Date 2019/1/17/017 19:15

+ 3 - 1
algorithm/src/main/java/org/algorithm/core/cnn/model/LemmaInfo.java

@@ -1,4 +1,6 @@
-package org.algorithm.core.cnn.model;
+package org.algorithm.core.cnn.entity;
+
+import org.algorithm.core.cnn.entity.Lemma;
 
 /**
  * @Author: bijl

+ 3 - 1
algorithm/src/main/java/org/algorithm/core/cnn/model/Triad.java

@@ -1,4 +1,6 @@
-package org.algorithm.core.cnn.model;
+package org.algorithm.core.cnn.entity;
+
+import org.algorithm.core.cnn.entity.Lemma;
 
 /**
  * @ClassName org.algorithm.core.cnn.Triad

+ 14 - 13
algorithm/src/main/java/org/algorithm/core/cnn/model/RelationExtractionModel.java

@@ -6,11 +6,13 @@ import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
 import org.algorithm.core.cnn.AlgorithmCNNExecutor;
 import org.algorithm.core.cnn.dataset.RelationExtractionDataSet;
+import org.algorithm.core.cnn.entity.Lemma;
+import org.algorithm.core.cnn.entity.LemmaInfo;
+import org.algorithm.core.cnn.entity.Triad;
 import org.tensorflow.SavedModelBundle;
 import org.tensorflow.Session;
 import org.tensorflow.Tensor;
 
-import java.nio.FloatBuffer;
 import java.nio.IntBuffer;
 import java.util.ArrayList;
 import java.util.List;
@@ -53,15 +55,14 @@ public class RelationExtractionModel extends AlgorithmCNNExecutor {
     }
 
     @Override
-    public List<Triad> execute(String content, String json_content) {
-        List<LemmaInfo[]> combinations = new ArrayList<>();
-        List<LemmaInfo> lemmaInfos = this.stringToObjects(json_content);  // json数组字符串装对象list
+    public List<Triad> execute(String content, List<Lemma> lemmas) {
+        List<Lemma[]> combinations = new ArrayList<>();
         // 组合
-        for(int i=0; i < lemmaInfos.size() - 1; i++){  // 两两组合成实体对
-            for (int j = i + 1; j< lemmaInfos.size(); j++){
-                LemmaInfo[] pair = new LemmaInfo[2];
-                pair[0] = lemmaInfos.get(i);
-                pair[1] = lemmaInfos.get(j);
+        for(int i=0; i < lemmas.size() - 1; i++){  // 两两组合成实体对
+            for (int j = i + 1; j< lemmas.size(); j++){
+                Lemma[] pair = new Lemma[2];
+                pair[0] = lemmas.get(i);
+                pair[1] = lemmas.get(j);
                 combinations.add(pair);
             }
         }
@@ -69,16 +70,16 @@ public class RelationExtractionModel extends AlgorithmCNNExecutor {
         List<Triad> triads = new ArrayList<>();
 
         // 遍历组合
-        for (LemmaInfo[] lemmaInfoPair: combinations) {
-            int[][] example = dataSet.getExample(content, lemmaInfoPair[0], lemmaInfoPair[1]);
+        for (Lemma[] LemmaPair: combinations) {
+            int[][] example = dataSet.getExample(content, LemmaPair[0], LemmaPair[1]);
             // 调用模型
             float[][] relation = this.run(example, 1);
             Triad triad = new Triad();
 
             // TODO:修改triad
             // 生成Triad(三元组)
-            triad.setL_1(lemmaInfoPair[0].toLemma());
-            triad.setL_2(lemmaInfoPair[1].toLemma());
+            triad.setL_1(LemmaPair[0]);
+            triad.setL_2(LemmaPair[1]);
             triad.setRelation(relation[0][0] > relation[0][1] ? "无":"有");
             triads.add(triad);
         }

+ 0 - 21
algorithm/src/main/java/org/algorithm/core/cnn/model/ShaoYiFuRelationExtractionModel.java

@@ -1,21 +0,0 @@
-package org.algorithm.core.cnn.model;
-
-import org.algorithm.core.cnn.dataset.RelationExtractionDataSet;
-
-/**
- * @Author: bijl
- * @Date: 2019/1/22 14:49
- * @Decription:
- */
-public class ShaoYiFuRelationExtractionModel extends RelationExtractionModel {
-    /**
-     * @param exportDir 模型保存地址
-     * @param dataSet
-     */
-    public ShaoYiFuRelationExtractionModel() {
-        String exportDir = null;
-        RelationExtractionDataSet dataSet = null;
-        this.init(exportDir);
-        this.dataSet = dataSet;
-    }
-}

+ 31 - 0
algorithm/src/main/java/org/algorithm/core/cnn/model/impl/RelationExtractionModelImpl.java

@@ -0,0 +1,31 @@
+package org.algorithm.core.cnn.model.impl;
+
+import org.algorithm.core.cnn.dataset.RelationExtractionDataSet;
+import org.algorithm.core.cnn.model.RelationExtractionModel;
+import org.algorithm.core.neural.dataset.NNDataSet;
+import org.algorithm.core.neural.dataset.NNDataSetImpl;
+import org.diagbot.pub.utils.PropertiesUtil;
+
+/**
+ * @Author: bijl
+ * @Date: 2019/1/22 14:49
+ * @Decription:
+ */
+public class RelationExtractionModelImpl extends RelationExtractionModel {
+    /**
+     */
+    public RelationExtractionModelImpl() {
+
+        PropertiesUtil prop = new PropertiesUtil("/algorithm.properties");
+
+        String modelPath = prop.getProperty("basicPath");  // 模型基本路径
+        String modelVersion = prop.getProperty("relationExtraction");
+        modelPath = modelPath.replace("model_version_replacement", modelVersion);  // 生成模型路径
+
+        String exportDir = null;
+        RelationExtractionDataSet dataSet = new RelationExtractionDataSet(modelPath + System.getProperty("line.separator")
+                + "char2id.json");
+        this.init(exportDir);
+        this.dataSet = dataSet;
+    }
+}

Dosya farkı çok büyük olduğundan ihmal edildi
+ 6 - 5
algorithm/src/main/java/org/algorithm/test/RelationExtractionModelTest.java


+ 0 - 4
algorithm/src/main/java/org/algorithm/test/Test.java

@@ -1,8 +1,4 @@
 package org.algorithm.test;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.*;
-import com.alibaba.fastjson.TypeReference;
-import org.algorithm.core.cnn.model.LemmaInfo;
 
 
 public class Test {

+ 3 - 0
algorithm/src/main/resources/algorithm.properties

@@ -15,3 +15,6 @@ diagnosisToSymptom.version=diagnosis_to_symptom_1
 diagnosisToLis.version=diagnosis_to_lis_1
 diagnosisToPacs.version=diagnosis_to_pacs_1
 diagnosisToVital.version=diagnosis_to_vital_1
+
+############################ relation extraction ######################################
+relationExtraction=relation_extraction

+ 1 - 1
nlp-web/src/main/java/org/diagbot/nlp/controller/RelationExtractionController.java

@@ -1,7 +1,7 @@
 package org.diagbot.nlp.controller;
 
 import org.algorithm.core.cnn.AlgorithmCNNExecutor;
-import org.algorithm.core.cnn.model.Triad;
+import org.algorithm.core.cnn.entity.Triad;
 import org.apache.commons.lang3.StringUtils;
 import org.diagbot.nlp.feature.FeatureAnalyze;
 import org.diagbot.nlp.feature.FeatureType;

+ 0 - 5
nlp/src/main/java/org/diagbot/nlp/relation/RelationAnalyze.java

@@ -1,15 +1,10 @@
 package org.diagbot.nlp.relation;
 
-import com.alibaba.fastjson.JSON;
-import org.algorithm.core.cnn.AlgorithmCNNExecutor;
-import org.algorithm.core.cnn.model.Triad;
 import org.diagbot.nlp.feature.FeatureType;
 import org.diagbot.nlp.participle.ParticipleUtil;
 import org.diagbot.nlp.participle.word.Lexeme;
 import org.diagbot.nlp.participle.word.LexemePath;
 
-import java.util.List;
-
 /**
  * @ClassName org.diagbot.nlp.relation.RelationAnalyze
  * @Description 关系抽取入口

+ 2 - 2
nlp/src/main/java/org/diagbot/nlp/relation/extract/PresentExtract.java

@@ -1,7 +1,7 @@
 package org.diagbot.nlp.relation.extract;
 
-import org.algorithm.core.cnn.model.Lemma;
-import org.algorithm.core.cnn.model.Triad;
+import org.algorithm.core.cnn.entity.Lemma;
+import org.algorithm.core.cnn.entity.Triad;
 import org.diagbot.nlp.participle.word.Lexeme;
 import org.diagbot.nlp.participle.word.LexemePath;
 import org.diagbot.nlp.relation.extract.cell.*;