瀏覽代碼

权利要求树接口增加韩文专利

chendayu 2 年之前
父節點
當前提交
12602a4f3f

+ 2 - 2
PAS/src/main/java/cn/cslg/pas/service/patentRightSplit/PatentRightSplitCNService.java

@@ -42,9 +42,9 @@ public class PatentRightSplitCNService implements PatentRightSplitService {
                 } else {  //若没有句号"。",则全文按照权要序号如 "1." "2." "3."进行拆分
                     Matcher matcher = Pattern.compile("[0-9]+\\.").matcher(content);
                     while (matcher.find()) {
-                        String macherGroup = matcher.group();  //2.
+                        String macherGroup = matcher.group();  //"2."
                         if (!macherGroup.equals("1.")) {
-                            content = content.replaceFirst(macherGroup, "\n" + macherGroup);  //\n2.
+                            content = content.replaceFirst(macherGroup, "\n" + macherGroup);  //"\n2."
                         }
                     }
                 }

+ 3 - 3
PAS/src/main/java/cn/cslg/pas/service/patentRightSplit/PatentRightSplitENService.java

@@ -38,10 +38,10 @@ public class PatentRightSplitENService implements PatentRightSplitService {
             //若原文没有换行符,则全文按照权要序号如 "1." "2." "3."进行拆分
             if (!content.contains("##@@&&")) {
                 Matcher matcher = Pattern.compile("[0-9]+\\.").matcher(content);
-                while (matcher.find()) {  //"1."
-                    String macherGroup = matcher.group();
+                while (matcher.find()) {
+                    String macherGroup = matcher.group();  //"2."
                     if (!macherGroup.equals("1.")) {
-                        content = content.replaceFirst(macherGroup, "\n" + macherGroup);
+                        content = content.replaceFirst(macherGroup, "\n" + macherGroup);  //"\n2."
                     }
                 }
             } else {

+ 2 - 2
PAS/src/main/java/cn/cslg/pas/service/patentRightSplit/PatentRightSplitJPService.java

@@ -37,9 +37,9 @@ public class PatentRightSplitJPService implements PatentRightSplitService {
                 } else {  //若没有句号"。",则全文按照权要序号如 "【請求項1】" "【請求項2】" "【請求項3】"进行拆分
                     Matcher matcher = Pattern.compile("【請求項[0-9]+】").matcher(content);
                     while (matcher.find()) {
-                        String macherGroup = matcher.group();  //"【請求項1】"、"【請求項2】"
+                        String macherGroup = matcher.group();  //"【請求項2】"
                         if (!macherGroup.equals("【請求項1】")) {
-                            content = content.replaceFirst(macherGroup, "\n" + macherGroup);
+                            content = content.replaceFirst(macherGroup, "\n" + macherGroup);  //"\n【請求項2】"
                         }
                     }
                 }

+ 124 - 120
PAS/src/main/java/cn/cslg/pas/service/patentRightSplit/PatentRightSplitKRService.java

@@ -1,79 +1,91 @@
-//package cn.cslg.pas.service.patentRightSplit;
-//
-//import cn.cslg.pas.common.model.params.PatentRightParams;
-//import cn.cslg.pas.domain.PatentRight;
-//import org.springframework.stereotype.Service;
-//
-//import java.util.ArrayList;
-//import java.util.List;
-//import java.util.regex.Matcher;
-//import java.util.regex.Pattern;
-//
-///**
-// * 拆分权要类(韩国专利KR)
-// *
-// * @author chenyu
-// * @date 2023/8/30
-// */
-//@Service
-//public class PatentRightSplitKRService implements PatentRightSplitService {
-//
-//    @Override
-//    public List<PatentRight> formatPatentRight(PatentRightParams params) {
-//        try {
-//            //创建一个权要集合,用于返回结果
-//            ArrayList<PatentRight> patentRights = new ArrayList<>();
-//            //原文
-//            String content = params.getContent();
-//
-//            //将原文从"1"截取到末尾(为了去除首行"声称的是:\n")
-////            if (!content.equals("") && content.contains("声称的是") && content.contains("1")) {
-////                content = content.substring(content.indexOf("1"));
-////            }
-//
-//            //第1步:拆分权要原文 ↓
-//            //将原文和译文的所有换行符 "\r\n"和"\n" 替换成特殊符号 "##@@&&",这样可以使得全文连在一起,其次再根据特殊符号##@@&&拆分权要
-//            content = content.replace("\r\n", "##@@&&").replace("\n", "##@@&&");
-//
-//            //若原文没有换行符,则全文按照句号"。"拆分
-//            if (!content.contains("##@@&&")) {
-//                content = content.replace("。", "。\n");
-//            } else {
-//                //定义正则表达式
-//                String regex = "##@@&&[0-9]+";
-//                Matcher matcher = Pattern.compile(regex).matcher(content);
-//                while (matcher.find()) {
-//                    String macherGroup = matcher.group();
-//                    content = content.replaceFirst(macherGroup, "\n" + macherGroup.substring(macherGroup.indexOf("##@@&&") + 6));
-//                }
-//                //去除所有特殊符号"##@@&&"
-//                content = content.replace("##@@&&", "");
-//            }
-//            //最后按照换行符"\n"将权要拆成多个
-//            String[] strs = content.split("\n");
-//
-//
-//            //第2步:理出每个权要的类型(type为 1主权要还是 0附属权要)、理出权要之间的层级关系(每个权要的父级权要序号parentSort) ↓
-//            String regex1 = "权利要求[0-9]+";
-//            String regex2 = "权利要求[0-9]+[至或~-]+[0-9]+";
-//            for (int i = 0; i < strs.length; i++) {
-//                //创建权要对象装载当前权要
-//                PatentRight patentRight = new PatentRight()
-//                        .setContent(strs[i])
-//                        .setSort(i);
-//
-//                //判断若该权要有逗号(即超过一句话)并且它第一句话中有"权利要求"4个字 或者 该权要没有逗号(即只有一句话),并且它有"权利要求"4个字,则该权要类型为附属权要
-//                if ((strs[i].contains(",") && strs[i].substring(0, strs[i].indexOf(",")).contains("权利要求")) || (!strs[i].contains(",") && strs[i].contains("权利要求"))) {
-//                    //则该权要类型为附属权要
-//                    patentRight.setType(0);
-//
-//                    Matcher matcher1 = Pattern.compile(regex1).matcher(strs[i]);
-//                    Matcher matcher2 = Pattern.compile(regex2).matcher(strs[i]);
-//                    if (matcher2.find()) {  //"权利要求2~4"
-//                        String parentNum = matcher2.group().substring(matcher2.group().indexOf("权利要求") + 4);  //"2~4"
-//                        String[] parentNumStrs = new String[0];
+package cn.cslg.pas.service.patentRightSplit;
+
+import cn.cslg.pas.common.PatentRightContent;
+import cn.cslg.pas.common.model.params.PatentRightParams;
+import cn.cslg.pas.domain.PatentRight;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 拆分权要类(韩国专利KR)
+ *
+ * @author chenyu
+ * @date 2023/8/30
+ */
+@Service
+public class PatentRightSplitKRService implements PatentRightSplitService {
+
+    @Override
+    public List<PatentRightContent> formatPatentRight(PatentRightParams params) {
+        try {
+            //创建一个权要集合,用于返回结果
+            ArrayList<PatentRightContent> patentRightContents = new ArrayList<>();
+            //原文
+            String content = params.getContent();
+
+            //第1步 ↓:拆分权要原文
+            //将原文和译文的所有换行符 "\r\n"和"\n" 替换成特殊符号 "##@@&&",这样可以使得全文连在一起,其次再根据特殊符号##@@&&拆分权要
+            content = content.replace("\r\n", "##@@&&").replace("\n", "##@@&&");
+
+            //若原文没有换行符则全文按照句号"。"拆分
+            if (!content.contains("##@@&&")) {
+                if (content.contains("。")) {  //若有句号"。"
+                    content = content.replace("。", "。\n");
+                } else {  //若没有句号"。",则全文按照权要序号如 "청구항 1" "청구항 2" "청구항 3"进行拆分
+                    Matcher matcher = Pattern.compile("청구항 [0-9]+").matcher(content);
+                    while (matcher.find()) {
+                        String macherGroup = matcher.group();  //청구항 2
+                        if (!macherGroup.equals("청구항 1")) {
+                            content = content.replaceFirst(macherGroup, "\n" + macherGroup);  //"\n청구항 2"
+                        }
+                    }
+                }
+            } else {
+                //定义正则表达式
+                String regex = "##@@&&청구항 [0-9]+";
+                Matcher matcher = Pattern.compile(regex).matcher(content);
+                while (matcher.find()) {
+                    String macherGroup = matcher.group();
+                    content = content.replaceFirst(macherGroup, "\n" + macherGroup.substring(macherGroup.indexOf("##@@&&") + 6));
+                }
+                //去除所有特殊符号"##@@&&"
+                content = content.replace("##@@&&", "");
+            }
+            //最后按照换行符"\n"将权要拆成多个
+            String[] strs = content.split("\n");
+
+
+            //第2步 ↓:理出权要的类型(type为 1主权要还是 0附属权要)、权要之间的层级关系(每个权要的父级权要序号parentSort)
+            String regex1 = "제[0-9]+항에 있어서";
+            //String regex2 = "权利要求[0-9]+[至或~-]+[0-9]+";
+            for (int i = 0; i < strs.length; i++) {
+                //创建权要对象装载当前权要
+                PatentRightContent patentRightContent = new PatentRightContent()
+                        .setContent(strs[i])
+                        .setSort(i);
+                //创建父级排序号集合,装载父级序号
+                ArrayList<Integer> parentSorts = new ArrayList<>();
+                String macherGroup;
+
+                ////判断若该权要有逗号(即超过一句话)并且它第一句话中有"权利要求"4个字 或者 该权要没有逗号(即只有一句话),并且它有"权利要求"4个字,则该权要类型为附属权要
+                //if ((strs[i].contains(",") && strs[i].substring(0, strs[i].indexOf(",")).contains("权利要求")) || (!strs[i].contains(",") && strs[i].contains("权利要求"))) {
+                //判断若不是权要1,并且含有"항에 있어서"几个字,则为附属权要
+                if (i != 0 && strs[i].substring(strs[i].indexOf("청구항")).contains("항에 있어서")) {
+                    //则该权要为附权要
+                    patentRightContent.setType(0);
+
+                    Matcher matcher1 = Pattern.compile(regex1).matcher(strs[i]);
+                    //Matcher matcher2 = Pattern.compile(regex2).matcher(strs[i]);
+//                    if (matcher2.find()) {  //"权利要求2~4"、权利要求"2-4"、权利要求"2至4"、权利要求"2或4"
+//                        macherGroup = matcher2.group();
+//                        String parentNum = macherGroup.substring(macherGroup.indexOf("权利要求") + 4);  //"2~4"、"2-4"、"2至4"、"2或4"
+//                        String[] parentNumStrs = new String[0];  //[2, 4]
 //                        if (parentNum.contains("~")) {
-//                            parentNumStrs = parentNum.split("~");  //[2, 4]
+//                            parentNumStrs = parentNum.split("~");
 //                        } else if (parentNum.contains("-")) {
 //                            parentNumStrs = parentNum.split("-");
 //                        } else if (parentNum.contains("至")) {
@@ -82,51 +94,43 @@
 //                            parentNumStrs = parentNum.split("或");
 //                        }
 //
-//                        int[] parentSorts = new int[parentNumStrs.length];  //[1, 3]
-//                        for (int i1 = 0; i1 < parentSorts.length; i1++) {
-//                            parentSorts[i1] = Integer.parseInt(parentNumStrs[i1]) - 1;
-//                        }
-//
-//                        if (parentNum.contains("或")) {
-//                            StringBuilder builder = new StringBuilder();
-//                            for (int parentSort : parentSorts) {
-//                                builder.append(parentSort).append(",");
+//                        if (parentNum.contains("或")) {  //"2或4"
+//                            for (String parentNumStr : parentNumStrs) {
+//                                parentSorts.add(Integer.parseInt(parentNumStr) - 1);  //sort:{1, 3}
 //                            }
-//                            patentRight.setParentSort(builder.substring(0, builder.lastIndexOf(",")));
-//                        } else {
-//                            StringBuilder builder = new StringBuilder();
-//                            for (int j = parentSorts[0]; j <= parentSorts[parentSorts.length - 1]; j++) {
-//                                if ((builder + "").equals("")) {
-//                                    builder.append(j);
-//                                } else {
-//                                    builder.append(",").append(j);
-//                                }
+//                        } else {  //"2~4"、"2-4"、"2至4"
+//                            for (int i1 = Integer.parseInt(parentNumStrs[0]); i1 <= Integer.parseInt(parentNumStrs[parentNumStrs.length - 1]); i1++) {
+//                                parentSorts.add(i1 - 1);  //sort:{1, 2, 3}
 //                            }
-//                            patentRight.setParentSort(builder + "");
 //                        }
-//
-//                    } else if (matcher1.find()) {
-//                        String parentNum = matcher1.group().substring(matcher1.group().indexOf("权利要求") + 4);
-//                        patentRight.setParentSort((Integer.parseInt(parentNum) - 1) + "");
-//                    }
-//                } else {
-//                    //否则该权要为主权要
-//                    patentRight
-//                            .setType(1)
-//                            .setParentSort("-1");
-//                }
-//
-//                patentRights.add(patentRight);
-//            }
-//
-//            return patentRights;
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//            ArrayList<PatentRight> patentRights = new ArrayList<>();
-//            patentRights.add(new PatentRight().setContent(params.getContent()));
-//            return patentRights;
-//        }
-//
-//    }
-//
-//}
+//                    } else
+                    if (matcher1.find()) {  //"제4항에 있어서"
+                        macherGroup = matcher1.group();
+                        String parentNum = macherGroup.substring(macherGroup.indexOf("제") + 1, macherGroup.indexOf("항에 있어서"));  //"4"
+                        int parentSort = Integer.parseInt(parentNum) - 1;
+                        parentSorts.add(parentSort);  //sort:{3}
+                    }
+
+                    patentRightContent.setParentSorts(parentSorts);
+                } else {
+                    //否则该权要为主权要
+                    parentSorts.add(-1);  //sort:{-1}
+                    patentRightContent
+                            .setType(1)
+                            .setParentSorts(parentSorts);
+                }
+
+                patentRightContents.add(patentRightContent);
+            }
+
+            return patentRightContents;
+        } catch (Exception e) {
+            e.printStackTrace();
+            ArrayList<PatentRightContent> patentRightContents = new ArrayList<>();
+            patentRightContents.add(new PatentRightContent().setContent(params.getContent()));
+            return patentRightContents;
+        }
+
+    }
+
+}