Ver Fonte

feat: 添加case_no_party_title_parse函数

许家凯 há 1 ano atrás
pai
commit
75ae988edb

+ 22 - 0
src/main/java/com/winhc/bigdata/bean/Entity.java

@@ -0,0 +1,22 @@
+package com.winhc.bigdata.bean;
+
+/**
+ * @Author: XuJiakai
+ * 2023/10/25 17:08
+ */
+public class Entity<T1, T2> {
+    public T1 _1;
+    public T2 _2;
+
+    public static <T1, T2> Entity<T1, T2> of(T1 t1, T2 t2) {
+        return new Entity<>(t1, t2);
+    }
+
+    public Entity() {
+    }
+
+    public Entity(T1 _1, T2 _2) {
+        this._1 = _1;
+        this._2 = _2;
+    }
+}

+ 58 - 0
src/main/java/com/winhc/bigdata/bean/case_no/CaseNoTitleEntity.java

@@ -0,0 +1,58 @@
+package com.winhc.bigdata.bean.case_no;
+
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @Author: XuJiakai
+ * 2023/10/25 16:15
+ */
+public class CaseNoTitleEntity {
+    private List<List<String>> all;
+    private List<String> core;
+
+    public List<List<String>> getAll() {
+        return all;
+    }
+
+    public void setAll(List<List<String>> all) {
+        this.all = all;
+    }
+
+    public List<String> getCore() {
+        return core;
+    }
+
+    public void setCore(List<String> core) {
+        this.core = core;
+    }
+
+    public CaseNoTitleEntity(List<List<String>> all, List<String> core) {
+        this.all = new ArrayList<>(Collections.nCopies(all.size(), null));
+        Collections.copy(this.all, all);
+
+
+        this.core = new ArrayList<>(Collections.nCopies(core.size(), null));
+        Collections.copy(this.core, core);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+
+        if (o == null || getClass() != o.getClass()) return false;
+
+        CaseNoTitleEntity that = (CaseNoTitleEntity) o;
+
+        return new EqualsBuilder().append(all, that.all).append(core, that.core).isEquals();
+    }
+
+    @Override
+    public int hashCode() {
+        return new HashCodeBuilder(17, 37).append(all).append(core).toHashCode();
+    }
+}

+ 53 - 0
src/main/java/com/winhc/bigdata/bean/case_no/LitigantInfo.java

@@ -0,0 +1,53 @@
+package com.winhc.bigdata.bean.case_no;
+
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+
+/**
+ * @Author: XuJiakai
+ * 2023/10/25 17:59
+ */
+public class LitigantInfo {
+    private String litigant_id;
+    private String name;
+
+    public LitigantInfo(String litigant_id, String name) {
+        this.litigant_id = litigant_id;
+        this.name = name;
+    }
+
+    public LitigantInfo() {
+    }
+
+    public String getLitigant_id() {
+        return litigant_id;
+    }
+
+    public void setLitigant_id(String litigant_id) {
+        this.litigant_id = litigant_id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+
+        if (o == null || getClass() != o.getClass()) return false;
+
+        LitigantInfo litigantInfo = (LitigantInfo) o;
+
+        return new EqualsBuilder().append(litigant_id, litigantInfo.litigant_id).append(name, litigantInfo.name).isEquals();
+    }
+
+    @Override
+    public int hashCode() {
+        return new HashCodeBuilder(17, 37).append(litigant_id).append(name).toHashCode();
+    }
+}

+ 75 - 0
src/main/java/com/winhc/bigdata/bean/case_no/PartyInfo.java

@@ -0,0 +1,75 @@
+package com.winhc.bigdata.bean.case_no;
+
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+
+import java.util.List;
+
+/**
+ * @Author: XuJiakai
+ * 2023/10/25 18:02
+ */
+public class PartyInfo {
+    private String title_original;
+    private String title_std;
+    private Integer show_level;
+    private List<LitigantInfo> party_info;
+
+    public PartyInfo() {
+    }
+
+    public PartyInfo(String title_original, String title_std, Integer show_level, List<LitigantInfo> party_info) {
+        this.title_original = title_original;
+        this.title_std = title_std;
+        this.show_level = show_level;
+        this.party_info = party_info;
+    }
+
+    public String getTitle_original() {
+        return title_original;
+    }
+
+    public void setTitle_original(String title_original) {
+        this.title_original = title_original;
+    }
+
+    public String getTitle_std() {
+        return title_std;
+    }
+
+    public void setTitle_std(String title_std) {
+        this.title_std = title_std;
+    }
+
+    public Integer getShow_level() {
+        return show_level;
+    }
+
+    public void setShow_level(Integer show_level) {
+        this.show_level = show_level;
+    }
+
+    public List<LitigantInfo> getParty_info() {
+        return party_info;
+    }
+
+    public void setParty_info(List<LitigantInfo> party_info) {
+        this.party_info = party_info;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+
+        if (o == null || getClass() != o.getClass()) return false;
+
+        PartyInfo partyInfo = (PartyInfo) o;
+
+        return new EqualsBuilder().append(title_original, partyInfo.title_original).append(title_std, partyInfo.title_std).isEquals();
+    }
+
+    @Override
+    public int hashCode() {
+        return new HashCodeBuilder(17, 37).append(title_original).append(title_std).toHashCode();
+    }
+}

+ 3 - 11
src/main/java/com/winhc/bigdata/udf/JudgmentDocumentScore.java

@@ -207,18 +207,10 @@ public class JudgmentDocumentScore extends UDF {
 
 
     public static void main(String[] args) {
+        JudgmentDocumentScore judgmentDocumentScore = new JudgmentDocumentScore();
 
-        Double ys = 1992.85;
-
-        if (ys < i - 1.5) {
-            ys = 1 / (i - ys);
-        } else if (ys >= i + 0.75) {
-            ys = ys - i;
-        } else {
-            ys = 0.75;
-        }
-        Double d = Math.log(ys + 1.1d) * 4;
-        System.out.println(d);
+        Double score = judgmentDocumentScore.evaluate(0L, "一审", "三人合议庭", "判决书", "2022-08-10", 0.75);
+        System.out.println(score);
 
     }
 

+ 137 - 0
src/main/java/com/winhc/bigdata/udf/justice/CaseNoPartyTitleParseUtil.java

@@ -0,0 +1,137 @@
+package com.winhc.bigdata.udf.justice;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.aliyun.odps.udf.ExecutionContext;
+import com.aliyun.odps.udf.UDF;
+import com.aliyun.odps.udf.UDFException;
+import com.winhc.bigdata.bean.Entity;
+import com.winhc.bigdata.bean.case_no.CaseNoTitleEntity;
+import com.winhc.bigdata.bean.case_no.LitigantInfo;
+import com.winhc.bigdata.bean.case_no.PartyInfo;
+import com.winhc.bigdata.utils.BaseUtils;
+import com.winhc.bigdata.utils.CaseNoPropertiesUtils;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.IOException;
+import java.util.*;
+
+/**
+ * @Author: XuJiakai
+ * 2023/10/25 9:49
+ *
+ * 依据案号生成展示当事人字段
+ *
+ * case_no_party_title_parse
+ */
+public class CaseNoPartyTitleParseUtil extends UDF {
+    private Map<String, Set<CaseNoTitleEntity>> caseNoMap = null;
+    private List<String> caseNoSet = null;
+
+    @Override
+    public void setup(ExecutionContext ctx) throws UDFException, IOException {
+        Entity<List<String>, Map<String, Set<CaseNoTitleEntity>>> caseNoKeyword = CaseNoPropertiesUtils.getCaseNoKeyword();
+        caseNoMap = caseNoKeyword._2;
+        caseNoSet = caseNoKeyword._1;
+    }
+
+
+    public String evaluate(String case_no, String plaintiff_info,
+                           String defendant_info) {
+
+        if (StringUtils.isEmpty(case_no)) {
+            return null;
+        }
+        String caseNoKeyword = getCaseNoKeyword(case_no);
+        if (caseNoKeyword == null) {
+            return getPartyTitleDefault(plaintiff_info, defendant_info);
+        }
+        Set<CaseNoTitleEntity> caseNoTitleEntities = caseNoMap.get(caseNoKeyword);
+
+        Iterator<CaseNoTitleEntity> it = caseNoTitleEntities.iterator();
+        CaseNoTitleEntity caseNoTitleEntity = it.hasNext() ? it.next() : null;
+
+        assert caseNoTitleEntity != null;
+
+        ArrayList<PartyInfo> result = new ArrayList<>();
+        List<String> core = caseNoTitleEntity.getCore();
+        if (core.get(0) != null) {
+            PartyInfo partyInfo = new PartyInfo();
+            partyInfo.setTitle_std(core.get(0));
+            partyInfo.setTitle_original(core.get(0));
+            partyInfo.setShow_level(0);
+            partyInfo.setParty_info(parseLitigant(plaintiff_info));
+
+            result.add(partyInfo);
+        }
+
+        if (core.get(1) != null) {
+            PartyInfo partyInfo = new PartyInfo();
+            partyInfo.setTitle_std(core.get(1));
+            partyInfo.setTitle_original(core.get(1));
+            partyInfo.setShow_level(1);
+            partyInfo.setParty_info(parseLitigant(defendant_info));
+
+            result.add(partyInfo);
+        }
+        return BaseUtils.toString(result);
+    }
+
+    private static String getPartyTitleDefault(String plaintiff_info,
+                                               String defendant_info) {
+        ArrayList<LitigantInfo> list = new ArrayList<>();
+        List<LitigantInfo> litigantInfos = parseLitigant(plaintiff_info);
+        if (litigantInfos != null) {
+            list.addAll(litigantInfos);
+        }
+
+        List<LitigantInfo> litigantInfos2 = parseLitigant(defendant_info);
+        if (litigantInfos2 != null) {
+            list.addAll(litigantInfos2);
+        }
+
+
+        PartyInfo partyInfo = new PartyInfo();
+        partyInfo.setShow_level(0);
+        partyInfo.setTitle_std("当事人");
+        partyInfo.setTitle_original("当事人");
+        partyInfo.setParty_info(list);
+        return BaseUtils.toString(partyInfo);
+    }
+
+
+    private static List<LitigantInfo> parseLitigant(String litigant_info) {
+        if (StringUtils.isEmpty(litigant_info)) {
+            return null;
+        }
+        JSONArray objects = JSON.parseArray(litigant_info);
+        ArrayList<LitigantInfo> list = new ArrayList<>();
+        for (Object object : objects) {
+            JSONObject j = ((JSONObject) object);
+            LitigantInfo litigantInfo = j.toJavaObject(LitigantInfo.class);
+            list.add(litigantInfo);
+        }
+        return list;
+    }
+
+
+    private String getCaseNoKeyword(String caseNo) {
+        for (String s : caseNoSet) {
+            if (caseNo.contains(s)) {
+                return s;
+            }
+        }
+        return null;
+    }
+
+
+    public static void main(String[] args) throws UDFException, IOException {
+        CaseNoPartyTitleParseUtil caseNoPartyTitleParseUtil = new CaseNoPartyTitleParseUtil();
+        caseNoPartyTitleParseUtil.setup(null);
+        String evaluate = caseNoPartyTitleParseUtil.evaluate("(2022)鲁0214执保303号", "[{\"name\":\"杨云\",\"litigant_id\":\"\"}]", "[{\"name\":\"李久倩\",\"litigant_id\":\"pb95466c950ea6164f3ce90c234d365a5\"},{\"name\":\"陈全英\",\"litigant_id\":\"p05b849d9da746669f0414d1dd07ad9c4\"},{\"name\":\"江秀波\",\"litigant_id\":\"\"},{\"name\":\"青岛智力高通信息科技有限公司\",\"litigant_id\":\"66b0b993e2ce10f35b63b44c7d3f70f7\"}]");
+        System.out.println(evaluate);
+    }
+
+
+}

+ 26 - 0
src/main/java/com/winhc/bigdata/utils/BaseUtils.java

@@ -0,0 +1,26 @@
+package com.winhc.bigdata.utils;
+
+import cn.hutool.core.io.file.FileReader;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+
+/**
+ * @Author: XuJiakai
+ * 2023/10/25 9:59
+ */
+public class BaseUtils {
+
+    public static String readeResourceFile(String pathFromSourceRoot) {
+        FileReader fileReader = new FileReader(pathFromSourceRoot);
+        return fileReader.readString();
+    }
+
+    public static String toString(Object o) {
+        return JSONObject.toJSONString(o, SerializerFeature.WriteMapNullValue);
+
+    }
+
+    public static void main(String[] args) {
+        System.out.println(readeResourceFile("case_info.json"));
+    }
+}

+ 82 - 0
src/main/java/com/winhc/bigdata/utils/CaseNoPropertiesUtils.java

@@ -0,0 +1,82 @@
+package com.winhc.bigdata.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.winhc.bigdata.bean.Entity;
+import com.winhc.bigdata.bean.case_no.CaseNoTitleEntity;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Author: XuJiakai
+ * 2023/10/25 10:27
+ */
+public class CaseNoPropertiesUtils {
+
+
+    public static JSONArray getCaseInfo() {
+        String s = BaseUtils.readeResourceFile("case_info.json");
+        JSONArray objects = JSON.parseArray(s);
+        return objects;
+    }
+
+
+    public static Entity<List<String>, Map<String, Set<CaseNoTitleEntity>>> getCaseNoKeyword() {
+        JSONArray caseInfo = getCaseInfo();
+        Map<String, Set<CaseNoTitleEntity>> caseNoMap = new HashMap<>();
+        Set<String> caseNoSet = new HashSet<>();
+        for (Object o : caseInfo) {
+            JSONObject item = ((JSONObject) o);
+            recursion(item, null, caseNoMap, caseNoSet);
+        }
+        List<String> collect = caseNoSet.stream().sorted(Comparator.comparingInt(String::length).reversed()).collect(Collectors.toList());
+        return Entity.of(collect, caseNoMap);
+    }
+
+
+    private static void recursion(JSONObject item, CaseNoTitleEntity partyTitle, Map<String, Set<CaseNoTitleEntity>> caseNoMap, Set<String> caseNoSet) {
+        CaseNoTitleEntity thisPartyTitle = partyTitle;
+        if (item.containsKey("party_title")) {
+            thisPartyTitle = item.getObject("party_title", CaseNoTitleEntity.class);
+        }
+        if (item.containsKey("sub_case_type")) {
+            JSONArray sub_case_type = item.getJSONArray("sub_case_type");
+            for (Object o : sub_case_type) {
+                recursion(((JSONObject) o), thisPartyTitle, caseNoMap, caseNoSet);
+            }
+        } else {
+            if (item.containsKey("case_no_keyword")) {
+                String caseNoKeyword = item.getString("case_no_keyword");
+                caseNoSet.add(caseNoKeyword);
+                if (thisPartyTitle != null) {
+                    if (caseNoMap.containsKey(caseNoKeyword)) {
+                        Set<CaseNoTitleEntity> caseNoTitleEntities = caseNoMap.get(caseNoKeyword);
+                        caseNoTitleEntities.add(thisPartyTitle);
+
+                    } else {
+                        HashSet<CaseNoTitleEntity> set = new HashSet<>();
+                        set.add(thisPartyTitle);
+
+                        caseNoMap.put(caseNoKeyword, set);
+                    }
+                }
+            }
+        }
+
+    }
+
+
+    public static void main(String[] args) {
+        Entity<List<String>, Map<String, Set<CaseNoTitleEntity>>> caseNoKeyword = getCaseNoKeyword();
+        String s = BaseUtils.toString(caseNoKeyword);
+        System.out.println(s);
+
+        /*String s = "{ \"all\": [ [ \"原公诉机关\", \"原审被告人\", \"原审被告单位\" ] ], \"core\": [ \"原公诉机关\", \"原审被告人\" ] }";
+        JSONObject jsonObject = JSON.parseObject(s);
+        CaseNoTitleEntity caseNoTitleEntity = jsonObject.toJavaObject(CaseNoTitleEntity.class);
+        System.out.println(caseNoTitleEntity);*/
+
+    }
+}

Diff do ficheiro suprimidas por serem muito extensas
+ 2312 - 0
src/main/resources/case_info.json