participle.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. const $ = require("jquery");
  2. require("babel-polyfill");
  3. require("./../css/participle.less");
  4. require("./../css/common.less");
  5. const { post, api,getUrlArgObject,ifHideLogo,typeLis,typeLisName } = 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/syflogo.png');
  10. require('./../resources/images/iconClose3.png');
  11. require('./../css/img/icon_tu.png');
  12. require('./../css/img/icon_wenzi.png');
  13. const {currentIIData} = require('./data.js')
  14. ifHideLogo();
  15. function appendCurrentII(currentIIList){
  16. for(let i = 0; i < currentIIList.length; i++){
  17. 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>
  18. <div class="exampleInfo${i} exampleInfo">${currentIIList[i].content}</div>`;
  19. $('.exampleList .pop-body').append(str)
  20. }
  21. $('.example').click(function(){
  22. const index1 = $(".example.selected").attr('data-index');
  23. $(`.example.selected img`).attr('src','./images/iconDown.png')
  24. $(`.exampleInfo${index1}`).slideUp()
  25. $(".example").removeClass("selected");
  26. $(this).addClass("selected");
  27. const index2 = $(".example.selected").attr('data-index');
  28. if($(`.exampleInfo${index2}`).css('display') === 'block'){
  29. $(`.example.selected img`).attr('src','./images/iconDown.png')
  30. $(".example").removeClass("selected");
  31. $(`.exampleInfo${index2}`).slideUp();
  32. }else{
  33. $(`.exampleInfo${index2}`).slideDown()
  34. $(`.example.selected img`).attr('src','./images/iconUp.png')
  35. }
  36. });
  37. $('.exampleBtn').click(function(e){
  38. e.stopPropagation();
  39. const index = $(this).parent().attr('data-index');
  40. $('#infoTxt').val(currentIIList[index].content);
  41. getEntityPredict();
  42. $(".pop-box").hide();
  43. });
  44. }
  45. $("#showEgBtn").click(function(){
  46. const popShow = $(".pop-box").css('display')
  47. if(popShow === 'block'){
  48. $(".pop-box").hide();
  49. } else{
  50. $(".pop-box").show();
  51. }
  52. });
  53. /******弹窗事件******/
  54. $(".pop-cover,.pop-close,.pop-cancel").click(()=>{
  55. $(".pop-box").hide();
  56. })
  57. let svgData;
  58. function getEntityPredict(){
  59. $("#toggleImgs").css("display","none");
  60. $("#toggleImg").css("display","none");
  61. $('.tableTitle').css("display","none");
  62. const val = $('#infoTxt').val()
  63. const param ={
  64. data:[
  65. {"medical_text_type": "chief_present",
  66. "content": val,
  67. "title": "自定义添加的属性",
  68. "detail_title": "自定义添加的属性"
  69. }
  70. ]
  71. };
  72. $("#resultBoxInfo").html(`<p style="color: #aaa;text-align: center;margin-top:50px;font-size:14px;">正在分析...</p>`);
  73. $("#svg").html(`<p style="color: #aaa;text-align: center;margin-top:50px;font-size:14px;">正在分析...</p>`);
  74. $(".analying").css('display','block');
  75. $('table').css("display","none")
  76. $('.empty').hide();
  77. post(api.entity_predict, param).then(res =>{
  78. if(res.data.code == '0'){
  79. const data = JSON.parse(res.data.data)
  80. const result = data.data[0].entity_relation_object
  81. const entryList = result&&result.outputs&&result.outputs.annotation['T']
  82. const relationList = result&&result.outputs&&result.outputs.annotation['R']
  83. let content = result.content
  84. if((JSON.stringify(entryList)!='[""]')&&(JSON.stringify(relationList)!='[""]')){
  85. // getRelationList(relationList,entryList)
  86. const relationListCopy = JSON.parse(JSON.stringify(relationList))
  87. let enter = chageEnter(entryList)
  88. let rela = chageRelation(relationList)
  89. svgData = Object.assign(enter,rela,{"content":content})
  90. if($("#svg").css("display") == "block"){
  91. showSvg(svgData)
  92. }
  93. getSchema(content,entryList)
  94. getRelationList(relationListCopy,entryList)
  95. $('#analy').removeClass('disabled')
  96. }else{
  97. // $('#analy').addClass('disabled')
  98. $('#resultBoxInfo').html('')
  99. $('.empty').css("display","block");
  100. $('.analying').css("display","none");
  101. $('.tableTitle').css("display","none");
  102. $('table').css("display","none");
  103. }
  104. }
  105. })
  106. }
  107. $("#toggleImg").click(()=>{
  108. $("#resultBoxInfo").css("display","block")
  109. $("#svg").css("display","none")
  110. $("#toggleImgs").removeClass("activeBtn")
  111. $("#toggleImg").addClass('activeBtn')
  112. // $("#toggleImg").css("display","none");
  113. // $("#toggleImgs").css("display","block");
  114. })
  115. $("#toggleImgs").click(()=>{
  116. $("#resultBoxInfo").css("display","none");
  117. $("#svg").css("display","block")
  118. $("#svg").html(`<p style="color: #aaa;text-align: center;margin-top:50px;font-size:14px;">正在生成,请稍后~</p>`);
  119. $("#toggleImg").removeClass("activeBtn")
  120. $("#toggleImgs").addClass("activeBtn")
  121. setTimeout(()=>{
  122. showSvg(svgData)
  123. })
  124. // $("#toggleImgs").css("display","none");
  125. // $("#toggleImg").css("display","block");
  126. })
  127. function chageEnter(data){
  128. var keyMap = {
  129. "name" : "text",
  130. "start" : "startIndex",
  131. "end" : "endIndex",
  132. "id" : "categoryId",
  133. };
  134. for(let i = 0;i < data.length;i++){
  135. let obj = data[i];
  136. for(let key in obj){
  137. let newKey = keyMap[key];
  138. if(newKey){
  139. obj[newKey] = obj[key];
  140. // delete obj[key];
  141. }
  142. obj.color = "red"
  143. obj.borderColor = "#5A8EEE"
  144. }
  145. }
  146. data.splice(0,1)
  147. return {
  148. "labelCategories":data,
  149. "labels":data
  150. }
  151. }
  152. function chageRelation(data){
  153. var keyMap = {
  154. "name" : "text",
  155. "from" : "fromId",
  156. "to" : "toId",
  157. "id" : "categoryId",
  158. };
  159. for(let i = 0;i < data.length;i++){
  160. let obj = data[i];
  161. for(let key in obj){
  162. let newKey = keyMap[key];
  163. if(newKey){
  164. obj[newKey] = obj[key];
  165. }
  166. obj.id = i
  167. obj.categoryId = i
  168. }
  169. }
  170. data.splice(0,1)
  171. return {
  172. "connectionCategories":data,
  173. "connections":data,
  174. }
  175. }
  176. function insertStr(soure, start, newStr){
  177. return soure.slice(0, start) + newStr + soure.slice(start);
  178. }
  179. function getSchema(content, entryList){
  180. let addNum = 0
  181. for(let i = 1; i < entryList.length; i++){
  182. 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>`)
  183. addNum += 107 + entryList[i].name.length
  184. if(i < entryList.length-1&&(entryList[i].end ===entryList[i+1].start)){
  185. content = insertStr(content, entryList[i].end+addNum, '</span>')
  186. addNum += 7
  187. } else{
  188. content = insertStr(content, entryList[i].end+addNum, '</span><span class="star">*</span>')
  189. addNum += 34
  190. }
  191. }
  192. $('#resultBoxInfo').html(content)
  193. $("#toggleImgs").css("display","block");
  194. $("#toggleImg").css("display","block");
  195. $(".entryItem").click(function(){
  196. let hasCheck = getUrlArgObject("num");
  197. if(!hasCheck){return}
  198. let txt = ($(this).html()).replace(/<span[^>]*>(.|\n)*<\/span>/gi,"")
  199. let curType = $(this).find(".type").text()
  200. post(api.check, {
  201. "number": hasCheck,
  202. "word": txt,
  203. "word_type": typeLis[curType]||"transfusion"
  204. }).then(res =>{
  205. if(res.data.code == '0'){
  206. let result = res.data.data.standard_words||[]
  207. if(result.length == 0){
  208. $(".showCheck").css("display","none")
  209. return
  210. }
  211. let str = '',head=`
  212. <tr class="head">
  213. <td>实体名称</td>
  214. <td>类型</td>
  215. <td>标准词</td>
  216. </tr>`
  217. for(let i = 0;i < result.length;i++){
  218. str += `<tr>
  219. <td>${txt}</td>
  220. <td>${typeLisName[curType]||'其他'}</td>
  221. <td>${result[i].standard_word}</td>
  222. </tr>`
  223. }
  224. if(result.length>0){
  225. $(".showCheck").css("display","block").find(".table").html(head+str)
  226. $(".showCheck img").click(function(){
  227. $(this).parent().css("display","none")
  228. })
  229. }
  230. }
  231. })
  232. })
  233. }
  234. function getRelationList(relationList,entryList){
  235. let str = ''
  236. for(let i = 1; i < relationList.length; i++){
  237. const relationItem = relationList[i]
  238. const relationName = relationList[i].name
  239. const entry1 = entryList.find(item => item.id === relationList[i].from).value
  240. const entry2 = entryList.find(item => item.id === relationList[i].to).value
  241. str += `<tr>
  242. <td class="entry1">${entry1}</td>
  243. <td class="relationType">${relationName}</td>
  244. <td class="entry2">${entry2}</td>
  245. </tr>`
  246. }
  247. if(str){
  248. $('.empty').css("display","none");
  249. $('.analying').css("display","none")
  250. $('table').css("display","table")
  251. $('.tableTitle').css("display","block")
  252. }else{
  253. $('.tableTitle').css("display","none")
  254. $('.tableBox .empty').css("display","block");
  255. $('.analying').css("display","none")
  256. }
  257. $('.relationBody').html(str)
  258. }
  259. $("#analy").click(function(){
  260. const val = $("#infoTxt").val().trim()
  261. if(val){
  262. getEntityPredict()
  263. }
  264. })
  265. getMrInfo()
  266. function getMrInfo(){
  267. post(api.getMrInfo, {}).then(res =>{
  268. if(res.data.code == '0'){
  269. const MrInfoList = res.data.data
  270. const initData = MrInfoList[0].content
  271. initTxtData(initData)
  272. const currentIIList = MrInfoList&&MrInfoList.slice(1,MrInfoList.length)
  273. appendCurrentII(currentIIList)
  274. }
  275. })
  276. }
  277. function initTxtData(data){
  278. $('#infoTxt').val(data)
  279. getEntityPredict();
  280. }
  281. $("#infoTxt").bind("input propertychange",function(event){
  282. const val = $("#infoTxt").val().trim();
  283. if(!val){
  284. $('#analy').addClass('disabled')
  285. $('#resultBoxInfo').html('')
  286. $('.empty').css("display","block");
  287. $('table').css("display","none")
  288. $('.tableTitle').css("display","none");
  289. $("#toggleImgs").css("display","none");
  290. $("#toggleImg").css("display","none");
  291. }else{
  292. $('#analy').removeClass('disabled')
  293. }
  294. });
  295. function showSvg(data){
  296. $("#svg").html("")//防止页面不渲染
  297. const poplar = require('poplar-annotation');
  298. const {Annotator} = poplar;
  299. const elm = document.getElementById("svg");
  300. new Annotator(data,elm,{
  301. contentEditable:false,
  302. unconnectedLineStyle:"none",
  303. labelPadding:3,
  304. topContextMargin:-2,
  305. bracketWidth:5,
  306. labelWidthCalcMethod:'label'
  307. });
  308. }
  309. function IEVersion() {
  310. // 取得浏览器的userAgent字符串
  311. var userAgent = navigator.userAgent;
  312. // 判断是否为小于IE11的浏览器
  313. var isLessIE11 = userAgent.indexOf('compatible') > -1 && userAgent.indexOf('MSIE') > -1;
  314. // 判断是否为IE的Edge浏览器
  315. var isEdge = userAgent.indexOf('Edge') > -1 && !isLessIE11;
  316. // 判断是否为IE11浏览器
  317. var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf('rv:11.0') > -1;
  318. if (isLessIE11) {
  319. return true
  320. } else if (isIE11) {
  321. return true
  322. } else {
  323. return false
  324. }
  325. }
  326. if(IEVersion()){
  327. $("#toggleImg").css("display","none")
  328. $("#toggleImgs").css("display","none")
  329. }