participle.js 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. const $ = require("jquery");
  2. require("babel-polyfill");
  3. require("./../css/participle.less");
  4. require("./../css/common.css");
  5. const { post, api } = require('./api.js');
  6. require('./../resources/images/empty2.png');
  7. require('./../resources/images/iconUp.png');
  8. require('./../resources/images/iconDown.png');
  9. require('./../resources/images/iconClose3.png');
  10. require('./../css/img/icon_tu.png');
  11. require('./../css/img/icon_wenzi.png');
  12. const {currentIIData} = require('./data.js')
  13. function appendCurrentII(currentIIList){
  14. for(let i = 0; i < currentIIList.length; i++){
  15. let str = `<p class="example" id="example${i+1}" data-index=${i}>${currentIIList[i].title} <span class="exampleBtn">引用</span> <img class="iconSlide" src="./images/iconDown.png" alt="logo"></p>
  16. <div class="exampleInfo${i} exampleInfo">${currentIIList[i].content}</div>`;
  17. $('.exampleList .pop-body').append(str)
  18. }
  19. $('.example').click(function(){
  20. const index1 = $(".example.selected").attr('data-index');
  21. $(`.example.selected img`).attr('src','./images/iconDown.png')
  22. $(`.exampleInfo${index1}`).slideUp()
  23. $(".example").removeClass("selected");
  24. $(this).addClass("selected");
  25. const index2 = $(".example.selected").attr('data-index');
  26. if($(`.exampleInfo${index2}`).css('display') === 'block'){
  27. $(`.example.selected img`).attr('src','./images/iconDown.png')
  28. $(".example").removeClass("selected");
  29. $(`.exampleInfo${index2}`).slideUp();
  30. }else{
  31. $(`.exampleInfo${index2}`).slideDown()
  32. $(`.example.selected img`).attr('src','./images/iconUp.png')
  33. }
  34. });
  35. $('.exampleBtn').click(function(e){
  36. e.stopPropagation();
  37. const index = $(this).parent().attr('data-index');
  38. $('#infoTxt').val(currentIIList[index].content);
  39. getEntityPredict();
  40. $(".pop-box").hide();
  41. });
  42. }
  43. $("#showEgBtn").click(function(){
  44. const popShow = $(".pop-box").css('display')
  45. if(popShow === 'block'){
  46. $(".pop-box").hide();
  47. } else{
  48. $(".pop-box").show();
  49. }
  50. });
  51. /******弹窗事件******/
  52. $(".pop-cover,.pop-close,.pop-cancel").click(()=>{
  53. $(".pop-box").hide();
  54. })
  55. function insertStr(soure, start, newStr){
  56. return soure.slice(0, start) + newStr + soure.slice(start);
  57. }
  58. let svgData;
  59. function getEntityPredict(){
  60. const val = $('#infoTxt').val()
  61. const param ={
  62. data:[
  63. {"medical_text_type": "chief_present",
  64. "content": val,
  65. "title": "自定义添加的属性",
  66. "detail_title": "自定义添加的属性"
  67. }
  68. ]
  69. };
  70. $("#resultBoxInfo").html(`<p style="color: #aaa;text-align: center;margin-top:50px;">正在分析...</p>`);
  71. $("#svg").html(`<p style="color: #aaa;text-align: center;margin-top:50px;">正在分析...</p>`);
  72. $(".analying").css('display','block');
  73. $('table').css("display","none")
  74. $('.empty').hide();
  75. post(api.entity_predict, param).then(res =>{
  76. if(res.data.code == '0'){
  77. const data = JSON.parse(res.data.data)
  78. const result = data.data[0].entity_relation_object
  79. const entryList = result&&result.outputs&&result.outputs.annotation['T']
  80. const relationList = result&&result.outputs&&result.outputs.annotation['R']
  81. let content = result.content
  82. if((JSON.stringify(entryList)!='[""]')&&(JSON.stringify(relationList)!='[""]')){
  83. // getRelationList(relationList,entryList)
  84. let enter = chageEnter(entryList)
  85. let rela = chageRelation(relationList)
  86. svgData = Object.assign(enter,rela,{"content":content})
  87. if($("#svg").css("display") == "block"){
  88. showSvg(svgData)
  89. }
  90. getSchema(content,entryList)
  91. getRelationList(relationList,entryList)
  92. $('#analy').removeClass('disabled')
  93. }else{
  94. $('#analy').addClass('disabled')
  95. $('#resultBoxInfo').html('')
  96. $('.empty').css("display","block");
  97. $('.analying').css("display","none");
  98. $('table').css("display","none");
  99. }
  100. }
  101. })
  102. }
  103. $("#toggleImg").click(()=>{
  104. $("#resultBoxInfo").css("display","block")
  105. $("#svg").css("display","none")
  106. $("#toggleImg").css("display","none");
  107. $("#toggleImgs").css("display","block");
  108. })
  109. $("#toggleImgs").click(()=>{
  110. $("#resultBoxInfo").css("display","none")
  111. $("#svg").css("display","block")
  112. showSvg(svgData)
  113. $("#toggleImgs").css("display","none");
  114. $("#toggleImg").css("display","block");
  115. })
  116. function chageEnter(data){
  117. var keyMap = {
  118. "name" : "text",
  119. "start" : "startIndex",
  120. "end" : "endIndex",
  121. "id" : "categoryId",
  122. };
  123. for(let i = 0;i < data.length;i++){
  124. let obj = data[i];
  125. for(let key in obj){
  126. let newKey = keyMap[key];
  127. if(newKey){
  128. obj[newKey] = obj[key];
  129. // delete obj[key];
  130. }
  131. obj.color = "red"
  132. obj.borderColor = "#5A8EEE"
  133. }
  134. }
  135. data.splice(0,1)
  136. return {
  137. "labelCategories":data,
  138. "labels":data
  139. }
  140. }
  141. function chageRelation(data){
  142. var keyMap = {
  143. "name" : "text",
  144. "from" : "fromId",
  145. "to" : "toId",
  146. "id" : "categoryId",
  147. };
  148. for(let i = 0;i < data.length;i++){
  149. let obj = data[i];
  150. for(let key in obj){
  151. let newKey = keyMap[key];
  152. if(newKey){
  153. obj[newKey] = obj[key];
  154. }
  155. obj.id = i
  156. obj.categoryId = i
  157. }
  158. }
  159. data.splice(0,1)
  160. return {
  161. "connectionCategories":data,
  162. "connections":data,
  163. }
  164. }
  165. function getSchema(content, entryList){
  166. let addNum = 0
  167. for(let i = 1; i < entryList.length; i++){
  168. content = insertStr(content, entryList[i].start+addNum, `<span class="star">* </span><span class="entryItem"><span class="type"><span class="trangle"></span>${entryList[i].name}</span>`)
  169. addNum += 107 + entryList[i].name.length
  170. if(i < entryList.length-1&&(entryList[i].end ===entryList[i+1].start)){
  171. content = insertStr(content, entryList[i].end+addNum, '</span>')
  172. addNum += 7
  173. } else{
  174. content = insertStr(content, entryList[i].end+addNum, '</span><span class="star">*</span>')
  175. addNum += 34
  176. }
  177. }
  178. $('#resultBoxInfo').html(content)
  179. }
  180. function getRelationList(relationList,entryList){
  181. let str = ''
  182. for(let i = 1; i < relationList.length; i++){
  183. const relationItem = relationList[i]
  184. const relationName = relationList[i].name
  185. const entry1 = entryList.find(item => item.id === relationList[i].from).value
  186. const entry2 = entryList.find(item => item.id === relationList[i].to).value
  187. str += `<tr>
  188. <td class="entry1">${entry1}</td>
  189. <td class="relationType">${relationName}</td>
  190. <td class="entry2">${entry2}</td>
  191. </tr>`
  192. }
  193. if(str){
  194. $('.empty').css("display","none");
  195. $('.analying').css("display","none")
  196. $('table').css("display","table")
  197. }
  198. $('.relationBody').html(str)
  199. }
  200. $("#analy").click(function(){
  201. const val = $("#infoTxt").val().trim()
  202. if(val){
  203. getEntityPredict()
  204. }
  205. })
  206. getMrInfo()
  207. function getMrInfo(){
  208. post(api.getMrInfo, {}).then(res =>{
  209. if(res.data.code == '0'){
  210. const MrInfoList = res.data.data
  211. const initData = MrInfoList[0].content
  212. initTxtData(initData)
  213. const currentIIList = MrInfoList&&MrInfoList.slice(1,MrInfoList.length)
  214. appendCurrentII(currentIIList)
  215. }
  216. })
  217. }
  218. function initTxtData(data){
  219. $('#infoTxt').val(data)
  220. getEntityPredict();
  221. }
  222. $("#infoTxt").bind("input propertychange",function(event){
  223. const val = $("#infoTxt").val().trim()
  224. if(!val){
  225. $('#analy').addClass('disabled')
  226. $('#resultBoxInfo').html('')
  227. $('.empty').css("display","block");
  228. $('table').css("display","none")
  229. }else{
  230. $('#analy').removeClass('disabled')
  231. }
  232. });
  233. function showSvg(data){
  234. $("#svg").html("")//防止页面不渲染
  235. const poplar = require('poplar-annotation');
  236. const {Annotator} = poplar;
  237. const elm = document.getElementById("svg");
  238. new Annotator(data,elm,{
  239. contentEditable:false,
  240. unconnectedLineStyle:"none",
  241. labelPadding:3,
  242. topContextMargin:-2,
  243. bracketWidth:5,
  244. labelWidthCalcMethod:'label'
  245. });
  246. }