TranslateService.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575
  1. package cn.cslg.pas.service.common;
  2. import cn.cslg.pas.common.dto.PatentColumnDTO;
  3. import cn.cslg.pas.common.dto.TranslateDTO;
  4. import cn.cslg.pas.common.dto.business.SelectClaimDTO;
  5. import cn.cslg.pas.common.dto.es.EsTranslateDTO;
  6. import cn.cslg.pas.common.utils.ClaimUtils.ClaimSplitUtils;
  7. import cn.cslg.pas.common.vo.EsExplainTextVO;
  8. import cn.cslg.pas.common.vo.PatentRightParams;
  9. import cn.cslg.pas.common.vo.RePatentClaim;
  10. import cn.cslg.pas.common.vo.TranslateVO;
  11. import cn.cslg.pas.domain.es.Content;
  12. import cn.cslg.pas.domain.es.Patent;
  13. import cn.cslg.pas.domain.es.PatentTranslate;
  14. import cn.cslg.pas.domain.es.Text;
  15. import cn.cslg.pas.exception.XiaoShiException;
  16. import co.elastic.clients.elasticsearch.ElasticsearchClient;
  17. import co.elastic.clients.elasticsearch._types.InlineScript;
  18. import co.elastic.clients.elasticsearch._types.Refresh;
  19. import co.elastic.clients.elasticsearch._types.Script;
  20. import co.elastic.clients.elasticsearch._types.query_dsl.Query;
  21. import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
  22. import co.elastic.clients.elasticsearch.core.IndexResponse;
  23. import co.elastic.clients.elasticsearch.core.SearchRequest;
  24. import co.elastic.clients.elasticsearch.core.SearchResponse;
  25. import co.elastic.clients.elasticsearch.core.UpdateByQueryRequest;
  26. import co.elastic.clients.elasticsearch.core.search.Hit;
  27. import com.aliyun.alimt20181012.models.TranslateGeneralResponse;
  28. import com.aliyun.alimt20181012.models.TranslateGeneralResponseBody;
  29. import com.aliyun.tea.TeaException;
  30. import lombok.RequiredArgsConstructor;
  31. import org.apache.commons.lang3.ObjectUtils;
  32. import org.apache.commons.lang3.StringUtils;
  33. import org.springframework.beans.BeanUtils;
  34. import org.springframework.context.annotation.Lazy;
  35. import org.springframework.stereotype.Service;
  36. import org.springframework.util.CollectionUtils;
  37. import java.io.IOException;
  38. import java.util.*;
  39. import java.util.regex.Matcher;
  40. import java.util.regex.Pattern;
  41. import java.util.stream.Collectors;
  42. @Service
  43. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  44. public class TranslateService {
  45. private final ElasticsearchClient client;
  46. //---------------------外部翻译接口------------------------
  47. public static com.aliyun.alimt20181012.Client createClient() throws Exception {
  48. String key = "LTAI5tGyG1Q7fKprgg1nWhXj";
  49. String sercet = "Y6Erboh5lEFiRPR4XK8oCPMvUzYGLN";
  50. // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
  51. // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
  52. com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
  53. // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
  54. .setAccessKeyId(key)
  55. // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
  56. .setAccessKeySecret(sercet);
  57. // Endpoint 请参考 https://api.aliyun.com/product/alimt
  58. config.endpoint = "mt.aliyuncs.com";
  59. return new com.aliyun.alimt20181012.Client(config);
  60. }
  61. public String getTranslateContent(String content) throws Exception {
  62. com.aliyun.alimt20181012.Client client = TranslateService.createClient();
  63. com.aliyun.alimt20181012.models.TranslateGeneralRequest translateGeneralRequest = new com.aliyun.alimt20181012.models.TranslateGeneralRequest()
  64. .setFormatType("text")
  65. .setSourceLanguage("auto")
  66. .setTargetLanguage("zh")
  67. .setSourceText(content)
  68. .setScene("general");
  69. com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
  70. try {
  71. // 复制代码运行请自行打印 API 的返回值
  72. TranslateGeneralResponse translateGeneralResponse = client.translateGeneralWithOptions(translateGeneralRequest, runtime);
  73. String re = translateGeneralResponse.getBody().getData().translated;
  74. return re;
  75. } catch (TeaException error) {
  76. // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
  77. // 错误 message
  78. System.out.println(error.getMessage());
  79. // 诊断地址
  80. System.out.println(error.getData().get("Recommend"));
  81. com.aliyun.teautil.Common.assertAsString(error.message);
  82. } catch (Exception _error) {
  83. TeaException error = new TeaException(_error.getMessage(), _error);
  84. // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
  85. // 错误 message
  86. System.out.println(error.getMessage());
  87. // 诊断地址
  88. System.out.println(error.getData().get("Recommend"));
  89. com.aliyun.teautil.Common.assertAsString(error.message);
  90. }
  91. return "";
  92. }
  93. //根据专利号获取专利信息
  94. public PatentColumnDTO getPatentByPatentNo(String patentNo) throws IOException {
  95. PatentColumnDTO patentColumnDTO = new PatentColumnDTO();
  96. SearchRequest.Builder builder = new SearchRequest.Builder();
  97. //设置查询索引
  98. builder.index("patent");
  99. Query query = QueryBuilders.term(t -> t.field("patent_no.keyword").value(patentNo));
  100. builder.query(query);
  101. SearchResponse<Patent> response = client.search(builder.build(), Patent.class);
  102. List<Hit<Patent>> hits = response.hits().hits();
  103. for (Hit<Patent> hit : hits) {
  104. Patent patent = hit.source();
  105. BeanUtils.copyProperties(patent, patentColumnDTO);
  106. }
  107. return patentColumnDTO;
  108. }
  109. //根据专利号、字段栏位、序号获取专利翻译信息
  110. public List<EsTranslateDTO> getPatentTranslateByPatentNo(TranslateDTO vo) throws IOException {
  111. String patentNo = vo.getPatentNo();
  112. String patentField = vo.getPatentField();
  113. Integer order = vo.getOrder();
  114. SearchRequest.Builder builder = new SearchRequest.Builder();
  115. //设置查询索引
  116. builder.index("translate");
  117. Query q1 = QueryBuilders.term(t -> t.field("patent_no").value(patentNo));
  118. Query q2 = QueryBuilders.term(t -> t.field("patent_field").value(patentField));
  119. Query bool = null;
  120. if (order != null && (patentField.equals("3") || patentField.equals("4"))) {
  121. Query q3 = QueryBuilders.term(t -> t.field("content.order").value(order));
  122. bool = QueryBuilders.bool(i -> i.must(q1, q2, q3));
  123. } else {
  124. bool = QueryBuilders.bool(i -> i.must(q1, q2));
  125. }
  126. builder.query(bool);
  127. builder.size(1000);
  128. builder.trackTotalHits(i -> i.enabled(true));
  129. SearchResponse<PatentTranslate> response = client.search(builder.build(), PatentTranslate.class);
  130. List<Hit<PatentTranslate>> hits = response.hits().hits();
  131. List<EsTranslateDTO> translateDTOS = new ArrayList<>();
  132. for (Hit<PatentTranslate> hit : hits) {
  133. PatentTranslate translate = hit.source();
  134. EsTranslateDTO translateDTO = new EsTranslateDTO();
  135. BeanUtils.copyProperties(translate, translateDTO);
  136. translateDTOS.add(translateDTO);
  137. }
  138. return translateDTOS;
  139. }
  140. //添加
  141. public String addPatentTranslate(PatentTranslate translate) throws Exception {
  142. IndexResponse indexResponse = client.index(i -> i
  143. .index("translate")
  144. //传入user对象
  145. .document(translate).refresh(Refresh.True)
  146. );
  147. return indexResponse.id();
  148. }
  149. //封装添加参数
  150. public String loadingTranslate(String patentNo, String patentField,String language,Boolean ifOrigin,Integer order,String parentSort,String textContent) throws Exception {
  151. PatentTranslate translate = new PatentTranslate();
  152. translate.setLanguage(language);
  153. translate.setPatentNo(patentNo);
  154. translate.setPatentField(patentField);
  155. translate.setIfOrigin(ifOrigin);
  156. Content content = new Content();
  157. content.setOrder(order);
  158. content.setParentSort(parentSort);
  159. content.setTextContent(textContent);
  160. translate.setContent(content);
  161. return this.addPatentTranslate(translate);
  162. }
  163. //添加标题、摘要原/译文
  164. public Integer addTranslate(Text text, String patentNo,String patentField) throws Exception {
  165. int i = 0;
  166. String textContent = text.getTextContent();
  167. //原文
  168. String s = this.loadingTranslate(patentNo, patentField, text.getLanguage(), true, 0, "-1", textContent);
  169. if (StringUtils.isNotEmpty(s)) {
  170. i += 1;
  171. }
  172. //译文
  173. String translateContent = this.getLimitTranslateContent(textContent);
  174. String s1 = this.loadingTranslate(patentNo, patentField, "CN", false, 0, "-1", translateContent);
  175. if (StringUtils.isNotEmpty(s1)) {
  176. i += 1;
  177. }
  178. return i;
  179. }
  180. //------------------------------------返回翻译内容--------------------------
  181. /**
  182. * 根据标题和摘要获取翻译内容
  183. *
  184. * @param vo
  185. * @return
  186. */
  187. public TranslateVO getTranslateByTIAndAb(TranslateDTO vo) throws Exception {
  188. String patentNo = vo.getPatentNo();
  189. String patentField = vo.getPatentField();
  190. TranslateVO translateVO = new TranslateVO();
  191. List<EsTranslateDTO> translateDTOS = this.getPatentTranslateByPatentNo(vo);
  192. if (CollectionUtils.isEmpty(translateDTOS)) {
  193. PatentColumnDTO columnDTO = this.getPatentByPatentNo(patentNo);
  194. if (patentField.equals("1")) {
  195. List<Text> title = columnDTO.getTitle();
  196. if (!CollectionUtils.isEmpty(title)) {
  197. Text titleText = title.get(0);
  198. Integer translateNum = this.addTranslate(titleText, patentNo,patentField);
  199. if (translateNum < 1) {
  200. throw new XiaoShiException("添加标题翻译失败");
  201. }
  202. }
  203. } else if (patentField.equals("2")) {
  204. List<Text> abstractStr = columnDTO.getAbstractStr();
  205. if (!CollectionUtils.isEmpty(abstractStr)) {
  206. Text abstractText = abstractStr.get(0);
  207. Integer translateNum = this.addTranslate(abstractText, patentNo,patentField);
  208. if (translateNum < 1) {
  209. throw new XiaoShiException("添加摘要翻译失败");
  210. }
  211. }
  212. }
  213. try {
  214. Thread.sleep(800);
  215. } catch (InterruptedException e) {
  216. Thread.currentThread().interrupt();
  217. }
  218. translateDTOS = this.getPatentTranslateByPatentNo(vo);
  219. translateVO = this.loadTIAndAbTranslate(translateDTOS);
  220. } else {
  221. translateVO = this.loadTIAndAbTranslate(translateDTOS);
  222. }
  223. return translateVO;
  224. }
  225. //加载标题、摘要的翻译返回内容
  226. public TranslateVO loadTIAndAbTranslate(List<EsTranslateDTO> translateDTOS) {
  227. TranslateVO translateVO = new TranslateVO();
  228. List<EsTranslateDTO> tList = translateDTOS.stream().filter(EsTranslateDTO::getIfOrigin).collect(Collectors.toList());
  229. if (!CollectionUtils.isEmpty(tList)) {
  230. EsTranslateDTO translateDTO = tList.get(0);
  231. translateVO.setOriginalContent(translateDTO.getContent().getTextContent());
  232. }
  233. List<EsTranslateDTO> fList = translateDTOS.stream().filter(i -> !i.getIfOrigin()).collect(Collectors.toList());
  234. if (!CollectionUtils.isEmpty(fList)) {
  235. EsTranslateDTO translateDTO = fList.get(0);
  236. translateVO.setPatentNo(translateDTO.getPatentNo());
  237. translateVO.setPatentField(translateDTO.getPatentField());
  238. translateVO.setLanguage(translateDTO.getLanguage());
  239. translateVO.setTranslationContent(translateDTO.getContent().getTextContent());
  240. }
  241. return translateVO;
  242. }
  243. /**
  244. * 根据权利要求获取翻译内容
  245. *
  246. * @param vo
  247. * @return
  248. */
  249. public List<TranslateVO> getTranslate(TranslateDTO vo) throws Exception {
  250. List<TranslateVO> translateVOS = new ArrayList<>();
  251. String patentNo = vo.getPatentNo();
  252. String patentField = vo.getPatentField();
  253. List<EsTranslateDTO> translateDTOS = this.getPatentTranslateByPatentNo(vo);
  254. if (CollectionUtils.isEmpty(translateDTOS)) {
  255. PatentColumnDTO columnDTO = this.getPatentByPatentNo(patentNo);
  256. if (patentField.equals("3")) {
  257. List<Text> claim = columnDTO.getClaim();
  258. this.addOldClaimTranslate(claim, patentNo, patentField);
  259. } else if (patentField.equals("4")) {
  260. List<Text> explainText = columnDTO.getPublicFullText();
  261. this.addOldPFTTranslate(explainText, patentNo, patentField);
  262. }
  263. try {
  264. Thread.sleep(800);
  265. } catch (InterruptedException e) {
  266. Thread.currentThread().interrupt();
  267. }
  268. translateDTOS = this.getPatentTranslateByPatentNo(vo);
  269. translateVOS = this.loadTranslate(translateDTOS);
  270. } else {
  271. translateVOS = this.loadTranslate(translateDTOS);
  272. }
  273. return translateVOS;
  274. }
  275. /**
  276. * 添加权利要求原文
  277. * @param claim
  278. * @param patentNo
  279. * @param patentField
  280. * @throws Exception
  281. */
  282. public void addOldClaimTranslate(List<Text> claim, String patentNo, String patentField) throws Exception {
  283. if (!CollectionUtils.isEmpty(claim)) {
  284. int i = 0;
  285. List<Text> tList = claim.stream().filter(Text::getIfOrigin).collect(Collectors.toList());
  286. if (!CollectionUtils.isEmpty(tList)) {
  287. Text text = tList.get(0);
  288. PatentRightParams params = new PatentRightParams();
  289. params.setContent(text.getTextContent());
  290. params.setCountry(text.getLanguage());
  291. List<RePatentClaim> rePatentClaims = ClaimSplitUtils.formatPatentRight(params);
  292. for (RePatentClaim rePatentClaim : rePatentClaims) {
  293. if (rePatentClaim.getContent().contains("&nbsp;")) {
  294. String replace = rePatentClaim.getContent().replace("&nbsp;", " ");
  295. rePatentClaim.setContent(replace);
  296. }
  297. //原文
  298. String s = this.loadingTranslate(patentNo, patentField, text.getLanguage(), true,
  299. rePatentClaim.getSort(), rePatentClaim.getParentSort(), rePatentClaim.getContent());
  300. if (StringUtils.isNotEmpty(s)) {
  301. i += 1;
  302. }
  303. }
  304. if (i < 1) {
  305. throw new XiaoShiException("添加权利要求原文失败");
  306. }
  307. }
  308. }
  309. }
  310. /**
  311. * 添加原文说明书
  312. * @param text
  313. * @param patentNo
  314. * @param patentField
  315. * @throws Exception
  316. */
  317. public void addOldPFTTranslate(List<Text> text, String patentNo, String patentField) throws Exception {
  318. if (!CollectionUtils.isEmpty(text)) {
  319. int i = 0;
  320. List<EsExplainTextVO> explainTextVOS = this.splitPatentExplainText(text);
  321. for (EsExplainTextVO explainTextVO : explainTextVOS) {
  322. //原文
  323. String s = this.loadingTranslate(patentNo, patentField, explainTextVO.getLanguage(), explainTextVO.getIfOrigin(),
  324. explainTextVO.getSort(), "-1", explainTextVO.getContent());
  325. if (StringUtils.isNotEmpty(s)) {
  326. i += 1;
  327. }
  328. }
  329. if (i < 1) {
  330. throw new XiaoShiException("添加说明书原文失败");
  331. }
  332. }
  333. }
  334. //封装说明书、权利要求数据
  335. public List<TranslateVO> loadTranslate(List<EsTranslateDTO> translateDTOS) {
  336. List<TranslateVO> VOS = new ArrayList<>();
  337. if (!CollectionUtils.isEmpty(translateDTOS)) {
  338. List<TranslateVO> list = new ArrayList<>();
  339. List<TranslateVO> tVOS = new ArrayList<>();
  340. List<EsTranslateDTO> tList = translateDTOS.stream().filter(EsTranslateDTO::getIfOrigin).collect(Collectors.toList());
  341. for (EsTranslateDTO translateDTO : tList) {
  342. Content content = translateDTO.getContent();
  343. TranslateVO translateVO = new TranslateVO();
  344. translateVO.setPatentNo(translateDTO.getPatentNo());
  345. translateVO.setLanguage(translateDTO.getLanguage());
  346. translateVO.setPatentField(translateDTO.getPatentField());
  347. translateVO.setOrder(content.getOrder());
  348. translateVO.setOriginalContent(content.getTextContent());
  349. translateVO.setParentSort(content.getParentSort());
  350. tVOS.add(translateVO);
  351. }
  352. List<EsTranslateDTO> fList = translateDTOS.stream().filter(i -> !i.getIfOrigin()).collect(Collectors.toList());
  353. if (!CollectionUtils.isEmpty(fList)) {
  354. List<TranslateVO> fVOS = new ArrayList<>();
  355. for (EsTranslateDTO translateDTO : fList) {
  356. Content content = translateDTO.getContent();
  357. TranslateVO translateVO = new TranslateVO();
  358. translateVO.setPatentNo(translateDTO.getPatentNo());
  359. translateVO.setLanguage(translateDTO.getLanguage());
  360. translateVO.setPatentField(translateDTO.getPatentField());
  361. translateVO.setOrder(content.getOrder());
  362. translateVO.setTranslationContent(content.getTextContent());
  363. translateVO.setParentSort(content.getParentSort());
  364. fVOS.add(translateVO);
  365. }
  366. Map<Integer, TranslateVO> fVOMap = new HashMap<>();
  367. for (TranslateVO fVO : fVOS) {
  368. fVOMap.put(fVO.getOrder(), fVO);
  369. }
  370. for (TranslateVO tVO : tVOS) {
  371. TranslateVO fVO = fVOMap.get(tVO.getOrder());
  372. if (fVO != null) {
  373. TranslateVO translateVO = new TranslateVO();
  374. translateVO.setPatentNo(tVO.getPatentNo());
  375. translateVO.setLanguage(tVO.getLanguage());
  376. translateVO.setPatentField(tVO.getPatentField());
  377. translateVO.setOriginalContent(tVO.getOriginalContent());
  378. translateVO.setParentSort(tVO.getParentSort());
  379. translateVO.setOrder(tVO.getOrder());
  380. translateVO.setTranslationContent(fVO.getTranslationContent());
  381. list.add(translateVO);
  382. } else {
  383. list.add(tVO);
  384. }
  385. }
  386. } else {
  387. list.addAll(tVOS);
  388. }
  389. List<TranslateVO> translateVOS = list.stream().sorted(Comparator.comparing(TranslateVO::getOrder)).collect(Collectors.toList());
  390. VOS.addAll(translateVOS);
  391. }
  392. return VOS;
  393. }
  394. public List<TranslateVO> getTranslateOrder(TranslateDTO vo) throws Exception {
  395. List<TranslateVO> translateVOS = new ArrayList<>();
  396. List<EsTranslateDTO> translateDTOS = this.getPatentTranslateByPatentNo(vo);
  397. List<EsTranslateDTO> fList = translateDTOS.stream().filter(i -> !i.getIfOrigin()).collect(Collectors.toList());
  398. if (!CollectionUtils.isEmpty(translateDTOS) && CollectionUtils.isEmpty(fList)) {
  399. int i = 0;
  400. for (EsTranslateDTO translateDTO : translateDTOS) {
  401. Content content = translateDTO.getContent();
  402. String textContent = content.getTextContent();
  403. String translateContent = this.getLimitTranslateContent(textContent);
  404. String s = this.loadingTranslate(translateDTO.getPatentNo(), translateDTO.getPatentField(), "CN", false,
  405. content.getOrder(), content.getParentSort(), translateContent);
  406. if (StringUtils.isNotEmpty(s)) {
  407. i++;
  408. }
  409. }
  410. if (i < 1) {
  411. throw new XiaoShiException("添加译文失败");
  412. }
  413. try {
  414. Thread.sleep(1000);
  415. } catch (InterruptedException e) {
  416. Thread.currentThread().interrupt();
  417. }
  418. translateDTOS = this.getPatentTranslateByPatentNo(vo);
  419. translateVOS = this.loadTranslate(translateDTOS);
  420. } else {
  421. translateVOS = this.loadTranslate(translateDTOS);
  422. }
  423. return translateVOS;
  424. }
  425. //判断文本翻译是否超出限制5000
  426. public String getLimitTranslateContent(String content) throws Exception {
  427. /*if (content.length() > 5000) {
  428. String s = content.substring(0, 5000);
  429. int i = s.lastIndexOf(",") + 1;
  430. String s1 = s.substring(0, i);
  431. str = str + this.getTranslateContent(s1);
  432. String s2 = s.substring(i);
  433. String s3 = this.getLimitTranslateContent(s2);
  434. str = str + s3;
  435. } else {
  436. str = this.getTranslateContent(content);
  437. }*/
  438. String str = "";
  439. String regex = "(?<!\\d)\\.(?!\\d)|[;。;]";
  440. String regex1 = "(?<!\\d)\\.(?!\\d)";
  441. Pattern pattern = Pattern.compile(regex);
  442. Pattern pattern1 = Pattern.compile(regex1);
  443. while (content.length() > 5000) {
  444. String s2 = content.substring(0, 5000);
  445. Matcher matcher = pattern.matcher(s2);
  446. Matcher matcher1 = pattern1.matcher(s2);
  447. int lastIndex = -1;
  448. while (matcher.find()) {
  449. lastIndex = matcher.end() - 1; // matcher.end() 返回的是匹配项之后的索引,所以减1得到最后一个字符的索引
  450. }
  451. if (lastIndex == -1) {
  452. while (matcher1.find()) {
  453. lastIndex = matcher1.end() - 1; // matcher.end() 返回的是匹配项之后的索引,所以减1得到最后一个字符的索引
  454. }
  455. }
  456. String s = content.substring(0, lastIndex + 1);
  457. String translateContent = this.getTranslateContent(s);
  458. str = str + translateContent;
  459. content = content.substring(lastIndex + 1);
  460. }
  461. String translateContent = this.getTranslateContent(content);
  462. str = str + translateContent;
  463. return str;
  464. }
  465. /**
  466. * 根据文本获取翻译内容
  467. *
  468. * @param vo
  469. * @return
  470. */
  471. public TranslateVO getTranslateByText(TranslateDTO vo) throws Exception {
  472. String translateContent = this.getLimitTranslateContent(vo.getContent());
  473. TranslateVO translateVO = new TranslateVO();
  474. translateVO.setOriginalContent(vo.getContent());
  475. translateVO.setTranslationContent(translateContent);
  476. return translateVO;
  477. }
  478. //拆分说明书
  479. public List<EsExplainTextVO> splitPatentExplainText(List<Text> list) {
  480. List<EsExplainTextVO> explainTextVOS = new ArrayList<>();
  481. List<Text> collect = list.stream().filter(Text::getIfOrigin).collect(Collectors.toList());
  482. if (!CollectionUtils.isEmpty(collect)) {
  483. Text text = collect.get(0);
  484. int j = 0;
  485. String content = text.getTextContent();
  486. String[] split = content.split("(\r\n){1,}");
  487. for (String s1 : split) {
  488. if (StringUtils.isNotEmpty(s1) && !s1.equals(" ")) {
  489. EsExplainTextVO textVO = new EsExplainTextVO();
  490. textVO.setSort(j);
  491. textVO.setContent(s1);
  492. textVO.setLanguage(text.getLanguage());
  493. textVO.setIfOrigin(text.getIfOrigin());
  494. explainTextVOS.add(textVO);
  495. j++;
  496. }
  497. }
  498. }
  499. return explainTextVOS;
  500. }
  501. //根据专利号和序号查询是否已有翻译
  502. public List<String> getTranslateOrder(String patentNo, Integer sort) throws IOException {
  503. List<String> list = new ArrayList<>();
  504. SearchRequest.Builder builder = new SearchRequest.Builder();
  505. //设置查询索引
  506. builder.index("translate");
  507. Query q1 = QueryBuilders.term(t -> t.field("patent_no").value(patentNo));
  508. Query q2 = QueryBuilders.term(t -> t.field("patent_field").value("3"));
  509. Query q3 = QueryBuilders.term(t -> t.field("content.order").value(sort));
  510. Query q4 = QueryBuilders.term(i -> i.field("language").value("CN"));
  511. Query bool = QueryBuilders.bool(i -> i.must(q1, q2, q3,q4));
  512. builder.query(bool);
  513. builder.size(1000);
  514. builder.trackTotalHits(i -> i.enabled(true));
  515. SearchResponse<PatentTranslate> response = client.search(builder.build(), PatentTranslate.class);
  516. List<Hit<PatentTranslate>> hits = response.hits().hits();
  517. for (Hit<PatentTranslate> hit : hits) {
  518. PatentTranslate source = hit.source();
  519. String content = source.getContent().getTextContent();
  520. if (StringUtils.isNotEmpty(content)) {
  521. list.add(content);
  522. }
  523. }
  524. return list;
  525. }
  526. //根据专利号和序号查询是否已有翻译
  527. public Long getTranslateByPatentNo(String patentNo) throws IOException {
  528. List<String> list = new ArrayList<>();
  529. SearchRequest.Builder builder = new SearchRequest.Builder();
  530. //设置查询索引
  531. builder.index("translate");
  532. Query q1 = QueryBuilders.term(t -> t.field("patent_no").value(patentNo));
  533. Query q2 = QueryBuilders.term(t -> t.field("patent_field").value("3"));
  534. Query q3 = QueryBuilders.term(t -> t.field("if_origin").value(true));
  535. Query bool = QueryBuilders.bool(i -> i.must(q1, q2, q3));
  536. builder.query(bool);
  537. builder.size(1000);
  538. builder.trackTotalHits(i -> i.enabled(true));
  539. SearchResponse<PatentTranslate> response = client.search(builder.build(), PatentTranslate.class);
  540. // List<Hit<PatentTranslate>> hits = response.hits().hits();
  541. // for (Hit<PatentTranslate> hit : hits) {
  542. // PatentTranslate source = hit.source();
  543. // String content = source.getContent().getTextContent();
  544. // if (StringUtils.isNotEmpty(content)) {
  545. // list.add(content);
  546. // }
  547. // }
  548. return response.hits().total().value();
  549. }
  550. }