fluidPage( tags$head( tags$script(HTML(" // 记录父窗口,初始为空。 parent = null; // 处理接收到的消息。 window.addEventListener('message', function(e) { //alert(e.data); try{ //记录父窗口以备回发信息 parent = e.source; //向服务器发送input变量更新消息 Shiny.setInputValue('hlmc', e.data); } catch (error){ alert(error); } },false); // 点击时触发识别 $(document).on('click', '.btn-recognize', function (evt) { evt.preventDefault(); var hlmc = document.getElementById('hlmc'); if (hlmc.value ==null || hlmc.value ==''){ alert('没有输入发票货劳名称!'); }else{ try{ Shiny.setInputValue('hlmc', hlmc.value); } catch(error){ alert(error); } } }); // 点击时传出参数 $(document).on('click', '.btn-success', function (evt) { evt.preventDefault(); var selected = document.getElementById('resultHlmc'); if (selected ==null){ alert('没有识别结果!'); }else{ if (parent == null){ alert(selected.innerHTML); } else { try{ parent.postMessage(selected.innerHTML, '*'); } catch(error){ alert(error); } } } }); // 触发了shiny:inputchanged事件,屏蔽输入引起的改变 $(document).on('shiny:inputchanged', function(event) { if (event.name === 'hlmc') { event.preventDefault(); } }); ")) ), titlePanel("发票货劳名称识别示例"), sidebarLayout( sidebarPanel( textAreaInput("hlmc","发票货劳名称", rows =4, resize="vertical", value ="利尔康牌95%酒精消毒液"), actionButton("recognize", "识别货劳名称", class = "btn-recognize"), actionButton("sendout", "传出识别结果", class = "btn-success"), HTML("

暂定用'-'分隔的发票货劳名称并列短语先用语义图分析,如果语义图存在环路,就转用语法树。其它都用语法树。
语法树示例:
利尔康牌95%酒精消毒液
语义图示例:
汤臣倍健多种维生素咀嚼片-迪士尼漫威装

分词后通过建立语法树或语义图,然后从根结点开始广度优先遍历,根据业务的统计和观察编写算法提取其中的名词重新排序,以优先级最高的名词为返回的货劳名称。
发票货劳名称一定是名词,这是NLP技术在特定场景名词短语分析中的应用实例。HanLP的Native API下载NLP深度学习预训练模型在虚拟主机本地执行操作。 "), width = 4 ), mainPanel( HTML("
识别结果: "), textOutput("resultHlmc"), HTML("
分词结果: "), textOutput("segwords"), HTML("
词性标注: "), textOutput("postags"), HTML("
"), # Use imageOutput to place the image on the page imageOutput("plot_as_svg"), HTML("
") ) ))