精华内容
下载资源
问答
  • 前面我用for循环创建了div,每个div中有各自的数据以及同样的布局 效果图如下: 部分代码如下: 现在,我希望在点击每...然而,根据一般的写法,按钮点击事件:(’#…’).onclick或者是获取值:document.getEle...

    前面我用for循环创建了div,每个div中有各自的数据以及同样的布局

    效果图如下:
    在这里插入图片描述
    部分代码如下:
    在这里插入图片描述

    现在,我希望在点击每个div里的发表按钮时,能在js里获取{{problem.pro_id}}以及{{problem.user_name}}这两个参数,然后进行传递,写入数据库等等操作

    然而,根据一般的写法,按钮点击事件:(’#…’).onclick或者是获取值:document.getElementById 全部都只对第一个div有效

    也就是我点击按钮,只有第一个div里的按钮可以点击,其他div里的按钮点击无响应
    获取值我也只能获取第一个div里的{{problem.pro_id}}以及{{problem.user_name}}

    这显然不符合我们的需求

    解决方法如下:

     <script>
            var btn=document.getElementsByTagName('button')
            for(var i=0;i<btn.length;i++){
                (function(n){
                    btn[n].onclick=function(){
    
                        alert(n);
                    }
                })(i);
            }
    </script>
    

    上述代码中,var btn=document.getElementsByTagName(‘button’)自动帮我们查找页面所有的button按钮,并返回一个列表给我们,此时,btn[n]便依次代表我们从上到下的div里的各个按钮,btn[0]代表第一个div里的按钮,btn[1]代表第二个div里的按钮,依次类推…

    而我要传递的第一个数值,{{problem.pro_id}}其实是从1开始,每次加一的,代表着div的编号,我们这里直接用n+1进行代替,不再多写方法获取了

    但我们还有一个参数需要获取,就是{{problem.user_name}}
    在这里插入图片描述

    如图,我把它写在了< a >标签下,如果你是写在了其他标签下,照着我的方法也一样的获取

    对上面< script >中的代码略作修改

     <script>
            var btn=document.getElementsByTagName('button')
            var a=document.getElementsByClassName('user-name')
            for(var i=0;i<btn.length;i++){
                (function(n){
                    btn[n].onclick=function(){
                        var user_name = a[n].innerText;
                        alert(user_name);
                    }
                })(i);
            }
    </script>
    

    重点注意其中的代码;var a=document.getElementsByClassName(‘user-name’),原理与 var btn=document.getElementsByTagName(‘button’)类似,它搜寻html页面中所有class名为user-name的标签,获取标签的内容,返回一个列表给我们

    而var user_name = a[n].innerText;就是获取对应排号为n的,class为user-name的标签的字段内容(我是用的< a >标签,用innerText,其他的标签不一定,但百度一下就可以有),当点击div里的按钮时,会有alert提示值,让我们便于矫正。这样我们就可以获取到不同div里的值了

    另外,n这个数的选取要注意:
    在这里插入图片描述
    如图,我有多个标签class名为user-name,但只有{{problem.user_name}}这一个数据是我所需要的,如何具体选取,这里不多赘述

    ok,这不就行了吗,要的就是这个效果

    传送门:Django 仿ajax传递数据(Django第十篇)

    展开全文
  • jQuery 事件

    千次阅读 2016-07-16 22:53:40
    一、事件模型  jQuery 事件方法会触发匹配元素的事件,或将函数绑定到所有匹配元素的某个事件。触发实例:  $("button#demo").click()  上面的例子将触发 id="demo" 的 button 元素的 click 事件。  绑定实例: ...

    一、事件模型

      jQuery 事件方法会触发匹配元素的事件,或将函数绑定到所有匹配元素的某个事件。触发实例:     

         $("button#demo").click()

      上面的例子将触发 id="demo" 的 button 元素的 click 事件。

      绑定实例:

         $("button#demo").click(function(){
               $("img").hide();
          }); 

    
    

      上面的例子会在点击 id="demo" 的按钮时隐藏所有图像。

    方法

    描述

    blur()

    触发、或将函数绑定到指定元素的 blur 事件

    change()

    触发、或将函数绑定到指定元素的 change 事件

    click()

    触发、或将函数绑定到指定元素的 click 事件

    dblclick()

    触发、或将函数绑定到指定元素的 double click 事件           

    error()

    触发、或将函数绑定到指定元素的 error 事件

    focus()

    触发、或将函数绑定到指定元素的 focus 事件

    keydown()

    触发、或将函数绑定到指定元素的 key down 事件

    keypress()

    触发、或将函数绑定到指定元素的 key press 事件

    keyup()

    触发、或将函数绑定到指定元素的 key up 事件

    load()

    触发、或将函数绑定到指定元素的 load 事件

    mousedown()

    触发、或将函数绑定到指定元素的 mouse down 事件

    mouseenter()    

    触发、或将函数绑定到指定元素的 mouse enter 事件

    mouseleave()

    触发、或将函数绑定到指定元素的 mouse leave 事件

    mousemove()

    触发、或将函数绑定到指定元素的 mouse move 事件

    mouseout()

    触发、或将函数绑定到指定元素的 mouse out 事件

    mouseover()

    触发、或将函数绑定到指定元素的 mouse over 事件

    mouseup()

    触发、或将函数绑定到指定元素的 mouse up 事件

    ready()

    文档就绪事件(当 HTML 文档就绪可用时)

    resize()

    触发、或将函数绑定到指定元素的 resize 事件

    scroll()

    触发、或将函数绑定到指定元素的 scroll 事件

    select()

    触发、或将函数绑定到指定元素的 select 事件

    submit()

    触发、或将函数绑定到指定元素的 submit 事件

    unload()

    触发、或将函数绑定到指定元素的 unload 事件

     

    二、管理事件

    1、jQuery 名称冲突

      jQuery 使用 $ 符号作为 jQuery 的简介方式。某些其他 JavaScript 库中的函数(比如 Prototype)同样使用 $ 符号。jQuery 使用名为 noConflict() 的方法来解决该问题。

                var jq=jQuery.noConflict();

    帮助您使用自己的名称(比如 jq)来代替 $ 符号。

     

    2、绑定事件:使用on()和bind()绑定

      bind() 方法为被选元素添加一个或多个事件处理程序,并规定事件发生时运行的函数。

      语法:$(selector).bind(event,data,function)

      event必需。规定添加到元素的一个或多个事件。由空格分隔多个事件。必须是有效的事件。

      data 可选。规定传递到函数的额外数据。

      function 必需。规定当事件发生时运行的函数。

    实例:

    <html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
      $("button").bind("click",function(){
        $("p").slideToggle();
      });
    });
    </script>
    </head>
    <body>
    <p>This is a paragraph.</p>
    <button>请点击这里</button>
    </body>
    </html>

      替代语法:$(selector).bind({event:function, event:function, ...})

      {event:function, event:function, ...}必需。规定事件映射,其中包含一个或多个添加到元素的事件,以及当事件发生时运行的函数。

    实例:

    <html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
      $("button").bind({
        click:function(){$("p").slideToggle();},
        mouseover:function(){$("body").css("background-color","red");},  
        mouseout:function(){$("body").css("background-color","#FFFFFF");}  
      });
    });
    </script>
    </head>
    <body>
    <p>This is a paragraph.</p>
    <button>请点击这里</button>
    </body>
    </html>

    on()方法已经被bind()方法替代,两个方法使用差不太多。

     

    3、绑定事件:快速绑定方法

    $("button").bind("click",function(){
        $("p").slideToggle();
      });

    快速绑定方法为:

    $("button").click(function(){
        $("p").slideToggle();
      });

    4、绑定事件:使用one()绑定

      one() 方法为被选元素附加一个或多个事件处理程序,并规定当事件发生时运行的函数。当使用 one() 方法时,每个元素只能运行一次事件处理器函数,执行一次响应之后就会失效。

      语法:$(selector).one(event,data,function)

      event必需。规定添加到元素的一个或多个事件。由空格分隔多个事件。必须是有效的事件。

      data 可选。规定传递到函数的额外数据。

      function 必需。规定当事件发生时运行的函数。

    实例:

    <html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
      $("p").one("click",function(){
        $(this).animate({fontSize:"+=6px"});
      });
    });
    </script>
    </head>
    <body>
    <p>这是一个段落。</p>
    <p>这是另一个段落。</p>
    <p>请点击 p 元素增加其内容的文本大小。每个 p 元素只会触发一次改事件。</p>
    </body>
    </html>

    5、注销事件

      one()自动删除事件,on()和bind()需要手工清除,有off()和unbind()方法删除绑定的事件。

      unbind() 方法移除被选元素的事件处理程序。该方法能够移除所有的或被选的事件处理程序,或者当事件发生时终止指定函数的运行。ubind() 适用于任何通过 jQuery 附加的事件处理程序。

    (1)、取消绑定元素的事件处理程序和函数

      规定从指定元素上删除的一个或多个事件处理程序。如果没有规定参数,unbind() 方法会删除指定元素的所有事件处理程序。

      语法:$(selector).unbind(event,function)

      event可选。规定删除元素的一个或多个事件,由空格分隔多个事件值。如果只规定了该参数,则会删除绑定到指定事件的所有函数。

      function可选。规定从元素的指定事件取消绑定的函数名。

    <html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
      $("p").click(function(){
        $(this).slideToggle();
      });
      $("button").click(function(){
        $("p").unbind();
      });
    });
    </script>
    </head>
    <body>
    <p>这是一个段落。</p>
    <p>这是另一个段落。</p>
    <p>点击任何段落可以令其消失。包括本段落。</p>
    <button>删除 p 元素的事件处理器</button>
    </body>
    </html>

    (2)、使用 Event 对象来取消绑定事件处理程序

      规定要删除的事件对象。用于对自身内部的事件取消绑定(比如当事件已被触发一定次数之后,删除事件处理程序)。如果未规定参数,则 unbind() 方法会删除指定元素的所有事件处理程序。

      语法:$(selector).unbind(eventObj)

      eventObj可选。规定要使用的事件对象。这个 eventObj 参数来自事件绑定函数。

    <html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
      var x=0;
      $("p").click(function(e){
        $("p").animate({fontSize:"+=5px"});
        x++;
        if (x>=2)
          {
          $(this).unbind(e);
          }
      });
    });
    </script>
    </head>
    <body>
    <p style="font-size:20px;">点击这个段落可以增加其大小。只能增加两次。</p>
    </body>
    </html>


    6、event对象

    方法                          

    描述

    event.isDefaultPrevented()

    返回 event 对象上是否调用了 event.preventDefault()。      

    event.pageX

    相对于文档左边缘的鼠标位置。

    event.pageY

    相对于文档上边缘的鼠标位置。

    event.preventDefault()

    阻止事件的默认动作。

    event.result

    包含由被指定事件触发的事件处理器返回的最后一个值。

    event.target

    触发该事件的 DOM 元素。

    event.timeStamp

    该属性返回从 1970 年 1 月 1 日到事件发生时的毫秒数。

    event.type

    描述事件的类型。

    event.which

    指示按了哪个键或按钮。

     

    7、事件触发

    trigger() 方法触发被选元素的指定事件类型。

    (1)、触发事件

      规定被选元素要触发的事件。

      语法:$(selector).trigger(event,[param1,param2,...])

      event必需。规定指定元素要触发的事件。可以使自定义事件(使用 bind() 函数来附加),或者任何标准事件。

      [param1,param2,...] 可选。传递到事件处理程序的额外参数。额外的参数对自定义事件特别有用。

    <html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
      $("input").select(function(){
        $("input").after("文本被选中!");
      });
      $("button").click(function(){
        $("input").trigger("select");
      });
    });
    </script>
    </head>
    <body>
    <input type="text" name="FirstName" value="Hello World" />
    <br />
    <button>激活 input 域的 select 事件</button>
    </body>
    </html>


    (2)、使用 Event 对象来触发事件

      规定使用事件对象的被选元素要触发的事件。

      语法:$(selector).trigger(eventObj)

      eventObj 必需。规定事件发生时运行的函数。

    <html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
      $("input").select(function(){
        $("input").after("文本被选中!");
      });
      var e = jQuery.Event("select");
      $("button").click(function(){
        $("input").trigger(e);
      });
    });
    </script>
    </head>
    <body>
    <input type="text" name="FirstName" value="Hello World" />
    <br />
    <button>激活 input 域的 select 事件</button>
    </body>
    </html>


    8、事件切换

    toggle() 方法用于绑定两个或多个事件处理器函数,以响应被选元素的轮流的 click 事件。该方法也可用于切换被选元素的 hide() 与 show() 方法。

    (1)、向 Toggle 事件绑定两个或更多函数

      当指定元素被点击时,在两个或多个函数之间轮流切换。如果规定了两个以上的函数,则 toggle() 方法将切换所有函数。例如,如果存在三个函数,则第一次点击将调用第一个函数,第二次点击调用第二个函数,第三次点击调用第三个函数。第四次点击再次调用第一个函数,以此类推。

      语法:$(selector).toggle(function1(),function2(),functionN(),...)

      function1()必需。规定当元素在每偶数次被点击时要运行的函数。

      function2()必需。规定当元素在每奇数次被点击时要运行的函数。

      functionN(),...可选。规定需要切换的其他函数。

    <html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
      $("button").toggle(function(){
        $("body").css("background-color","green");},
        function(){
        $("body").css("background-color","red");},
        function(){
        $("body").css("background-color","yellow");}
      );
    });
    </script>
    </head>
    <body>
    <button>请点击这里,来切换不同的背景颜色</button>
    </body>
    </html>

    (2)、切换 Hide() 和 Show()

      检查每个元素是否可见。如果元素已隐藏,则运行 show()。如果元素可见,则元素 hide()。这样就可以创造切换效果。

      语法:$(selector).toggle(speed,callback)

      speed可选。规定 hide/show 效果的速度。默认是 "0"。可能的值:毫秒(比如 1500)、"slow"、"normal"、"fast"

      callback可选。当 toggle() 方法完成时执行的函数。

    <html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
      $(".btn1").click(function(){
      $("p").toggle(1000);
      });
    });
    </script>
    </head>
    <body>
    <p>This is a paragraph.</p>
    <button class="btn1">Toggle</button>
    </body>
    </html>

     

    (3)、显示或隐藏元素

      规定是否只显示或只隐藏所有匹配的元素。

      语法:$(selector).toggle(switch)

      switch 必需。布尔值,规定 toggle() 是否应只显示或只隐藏所有被选元素。true - 显示元素、false - 隐藏元素

    <html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
      $(".btn1").click(function(){
        $("p").toggle(true);
      });
    });
    </script>
    </head>
    <body>
    <p>This is a paragraph.</p>
    <p style="display:none">This is another paragraph.</p>
    <p>把 switch 参数设置为 false,可以隐藏所有段落。</p>
    <button class="btn1">显示所有 p 元素</button>
    </body>
    </html>


    9、事件委派

    (1)、delegate() 方法  

       delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。使用 delegate() 方法的事件处理程序适用于当前或未来的元素(比如由脚本创建的新元素)。

       语法:$(selector).delegate(childSelector,event,data,function)

       childSelector必需。规定要附加事件处理程序的一个或多个子元素。

       event必需。规定附加到元素的一个或多个事件。由空格分隔多个事件值。必须是有效的事件。

       data可选。规定传递到函数的额外数据。

       function必需。规定当事件发生时运行的函数。

    <html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
      $("div").delegate("p","click",function(){
        $(this).slideToggle();
      });
      $("button").click(function(){
        $("<p>这是一个新段落。</p>").insertAfter("button");
      });
    });
    </script>
    </head>
    <body>
    <div style="background-color:yellow">
    <p>这是一个段落。</p>
    <p>请点击任意一个 p 元素,它会消失。包括本段落。</p>
    <button>在本按钮后面插入一个新的 p 元素(点击会消失)</button>
    </div>
    <p><b>注释:</b>通过使用 delegate() 方法,而不是 live(),只有 div 元素中的 p 元素会受到影响。</p>
    </body>
    </html>

    (2)、live() 方法

      live() 方法为被选元素附加一个或多个事件处理程序,并规定当这些事件发生时运行的函数。通过 live() 方法附加的事件处理程序适用于匹配选择器的当前及未来的元素(比如由脚本创建的新元素)。

      语法:$(selector).live(event,data,function)

      event必需。规定附加到元素的一个或多个事件。由空格分隔多个事件。必须是有效的事件。

      data可选。规定传递到该函数的额外数据。

      function必需。规定当事件发生时运行的函数。

    <html>
    <head>
    <script type="text/javascript" src="/jquery/jquery.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
      $("p").live("click",function(){
        $(this).slideToggle();
      });
      $("button").click(function(){
        $("<p>This is a new paragraph.</p>").insertAfter("button");
      });
    });
    </script>
    </head>
    <body>
    <p>这是一个段落。</p>
    <p>点击任意 p 元素会令其消失。包括本段落。</p>
    <button>在本按钮后面插入新的 p 元素</button>
    <p><b>注释:</b>通过使用 live() 方法而不是 bind() 方法,新的 p 元素同样会在点击时消失。</p>
    </body>
    </html>

      delegate()方法和live()用法和效果差不多,但是和bind()方法不同,bind()方法在点击“在本按钮后面插入新的 p 元素”按钮后动态生成的p元素不会拥有click事件,所以点击动态生成的p元素不会隐藏。

    (3)、undelegate()

      undelegate() 方法删除由 delegate() 方法添加的一个或多个事件处理程序。

      语法:$(selector).undelegate(selector,event,function)

      selector可选。规定需要删除事件处理程序的选择器。

      event可选。规定需要删除处理函数的一个或多个事件类型。

      function可选。规定要删除的具体事件处理函数。

    <html>
    <head>
    <meta charset="UTF-8"/>
    <script type="text/javascript" src="js/jquery.js"></script>
    <script>
    $(document).ready(function(){
      $("body").delegate("p","click",function(){
        $(this).slideToggle();
      });
      $("button").click(function(){
        $("body").undelegate();
      });
    });
    </script>
    </head>
    <body>
    <p>这是一个段落。</p>
    <p>这是另外一个段落。</p>
    <p>点击任意段落(p 元素),该段落就会消失。</p>
    <button>使用 delegate() 方法移除所有段落(p 元素)的事件句柄</button>
    </body>
    </html>


    10、管理事件

    方法

    描述

    bind()

    向匹配元素附加一个或更多事件处理器

    delegate()

    向匹配元素的当前或未来的子元素附加一个或多个事件处理器

    die()

    移除所有通过 live() 函数添加的事件处理程序。

    live()

    为当前或未来的匹配元素添加一个或多个事件处理器

    one()

    向匹配元素添加事件处理器。每个元素只能触发一次该处理器。

    toggle()

    绑定两个或多个事件处理器函数,当发生轮流的 click 事件时执行。

    trigger()

    所有匹配元素的指定事件

    triggerHandler()

    第一个被匹配元素的指定事件

    unbind()

    从匹配元素移除一个被添加的事件处理器

    undelegate()

    从匹配元素移除一个被添加的事件处理器,现在或将来

     

     

    展开全文
  • 事件事件抽取与事理图谱

    万次阅读 2019-01-04 23:06:04
    人类社会是一个静态事物进行动态活动所创造形成的世界,人类的命题记忆是以“事件”为存储单位的,存储的是组成事件的概念及其之间的关系以及事件及其之间的关系,以事件作为知识的基本单元更能反映客观世界的知识,...

    事件、事件抽取与事理图谱

        人类社会是一个静态事物进行动态活动所创造形成的世界,人类的命题记忆是以“事件”为存储单位的,存储的是组成事件的概念及其之间的关系以及事件及其之间的关系,以事件作为知识的基本单元更能反映客观世界的知识,特别是知识的动态性,从认知心理学的角度来看,事件更符合人类的理解与思维习惯。知识库是机器实现认知智能的根本前提之一,如何让机器能够以一种更为接近于人脑知识结构体系的方式武装自己,是信息抽取以及知识工程领域一直致力攻克的方向。目前,以“事件”为核心开展信息抽取、语言资源建设、事理图谱建设等相关工作是新的制高点,本文主要以“事件”为核心,对事件、事件抽取、事件关系抽取、事理图谱相关的知识概念进行了简要的介绍。

    一、事件
        事件是什么,有多种定义,从不同的学科角度可以得到不同的答案。哲学上,公元前伟大的哲学家亚理斯多德认为,事件是可以感知的、相对独立的、运动的存在,是一种非静态的概念,一个典型的事件是一个行为的序列或者一系列状态的改变,是随着时间变化的具体事实;在认知学科上,斯坦福大学著名教授zacks[2001]提出,事件是被旁观者所观察到的在现实世界所产生的行为,可以通过时空结构来理解。有趣的是,这位教授还将事件与动作进行了区分,即动作是行为者刻意的行为,动作一定是事件而事件不都能称为动作,动作是客观的,而事件是被观察者观察得到的。语言学方面,Chung[1985]年提出事件结构,认为“事件是谓词、谓词发生的时间段、谓词发生的情况或者条件三个部分组成的术语”;Putejovsky[2000]提出以基础谓词为中心的事件理论;在信息领域,最早由美国国防高级研究计划委员会DARPA举办的Topic Detection and Track(话题检测与追踪)会议,将事件定义成“特定时间、特定地点发生的事情”,一个话题由多个事件组成;在本体研究领域,事件则是在指在某个特定时间和环境下发生的由若干角色参与并表现出若干动作特征的一类事情。
        通过以上的介绍我们可以看到,不同领域对事件的定义存在差异,并且体现了该领域所关注的实际问题。哲学和认知学科中更加关注事件的本源和概念,语言学领域更注重从词法和句法层面探究事件的语法结构和语义;信息领域则更关注事件在信息处理中的应用,包括事件的识别、获取以及事件应用;本体领域则更关注更细粒度的事件表示,力求从表示、事件关系、事件与概念本体之间的关系做体系的分析。而在这些存在差异的理解当中,也存在着一个共同之处,即都认为事件是人类知识中重要的组成部分,世界是由动态事件组成的,而且都在时间的刻画和表示形式上不断钻研。

    二、事件抽取
        事件抽取(event extraction)是信息抽取领域中重要的一个组成部分。目前关于事件抽取这一任务相关的技术评测主要包括MUC、ACE、TDT、TAC-KBP、BioNLP等,其中由美国DARPA于1987-1997年举办的MUC(Message Understanding Conferences)消息理解会议,任务包括命名实体识别、模板关系抽取等,其中的场景模板(Scenario Template)填充任务涉及事件抽取;作为MUC的后继者,由美国国家标准与技术研究所NIST先后在1999年至2008年举办的ACE(Automatic Content Extraction)系列评测,其中的事件探测与识别VDR任务涉及事件抽取;2009年ACE由TAC(Text Analysis Conference )正式接棒,ACE成为TAC的一个子任务;由DARPA资助举办的TDT(Topic Detection and Track)话题检测与追踪会议于1998年到2004年举办,起源于早期的事件检测与追踪项目EDT(Event Detection and Tracking)是以事件作为核心的评测会议之一,主要关注话题的产生与变化;BioNLP是一个生物文本挖掘评测项目,其中包括生物事件的抽取任务。
        事件抽取,就这个任务而言,目前可以分成两种,即元事件(meta event)抽取和主题事件(topic event)抽取。元事件由Filatova[2004]等人提出,表示一个动作的发生或状态的变化,由表示动作的动词或名词来驱动,包括参与该动作行为的主要成分(如时间、地点、 人物等)。目前学界和工业界谈论事件抽取,大多还是指元事件抽取,ACE是这类事件抽取的代表,ACE对参与评测的事件进行了定义,即事件由事件触发词(Trigger)和描述事件结构的元素(argument)组成。所谓事件触发词,即表示事件发生的核心词,多为动词或名词。元素(argument)又称为事件论元,表示事件的参与者、时间、地点等属性信息。ACE2015定义了8种事件类别(life, movement,conflict,contact等)和33种子事件类别(born, marry,injury, transport,attack等),每种事件类别对应唯一的事件模板,如子事件born,事件模版(template)包括person,time-within,place等。这样,事件抽取就变成了一个事件识别和事件元素识别的任务,后者事件元素识别即根据预先设定的事件模板,抽取相应的元素,类似于一种槽填充任务,也常称作为论元识别。就元事件抽取而言,目前主流的技术包括基于模式匹配、基于机器学习、基于神经网络等的事件抽取方法,其中基于神经网络的事件抽取方法将事件抽取转换成一个有监督的多元分类任务,具体包括句子篇章级事件抽取、基于联合模型、融合外部资源的神经网络事件抽取方法等。
        主题事件包括一类核心事件或活动以及所有与之直接相关的事件和活动,可以由多个元事件片段组成,与元事件抽取最大的不同在于,主题事件中所包含的多个元事件信息通常都分散于一个或多个文档当中,往往需要确定描述同一主题事件的文档集合,并将这些分散的缘事件进行组合。与元事件的抽取方法不同,主题事件的抽取方法一般需要借助事件表示或者本体框架作为理论支持,从技术上主要分为基于事件框架和基于本体的主题事件抽取两种。而其中的主题事件框架,代表性的有M. Minsky[1974]提出的“Framework for Representing Knowledge”,事件框架描述了一种由不同侧面刻画形成的分类体系,这些侧面描述了事件的不同信息。事件本体是一个与事件框架相关的概念,来源于知识工程和人工智能领域,与形式化描述领域词汇之间相似关系的本体类似,事件本体描述了事件体系中的概念、关系、层次结构以及实例。如Chen[2004]所提出的Domain 、Category 、Event 、Extended Concepts四层本体事件模型,其中每个Domain下包括多个领域Category,Category下一组事件集合组成,即对应事件层,Extended Concepts层定义了事件概念和对象概念。

    三、事件关系抽取
        目前关于领域事件抽取的工作大体还是沿着元事件抽取这种方法,如金融领域中常见的并购事件抽取,往往首先需要定义并购事件的事件结构,即触发词如“收购”、“并购”等,并购的论元结构,包括并购方、被并购方、并购金额、并购时间、并购状态、并购地点等,领域事件中的抽取精度随着事件结构的复杂度上升而下降,这也是目前领域事件知识库构建的难点之一。元事件抽取集中于单个事件类型的事件信息抽取,忽略事件之间的关系,主题事件抽取则更关注多个事件类型之间在话题上的一种变化,事实上,事件关系识别是信息抽取领域与事件抽取相关的另一个任务,目前关于事件关系相关的工作代表性的包括Framnet、TDT、脚本(script)、叙事性事件链(narrative event chain)
        由Charles J. Fillmore[2003]提出的Framenet是与事件相关的一项重要工作,严格上来说,它与事件关系不直接相关,而是一种词汇语义描述框架。Framenet也称为框架语义学(Frame Semantics),该理论力求通过定义和描述事件、关系、实体以及参与者等的框架来对词义进行系统的描述和解释。Frame框架是整个Framet的核心,也是词语的刻画方法,每个Frame框架中有多个框架元素,这些元素描述了这个frame的一些结构化信息,例如Caustion是Framnet中的一个框架,这个框架可以被cause.v, cause.n,make.v这几个词使用,该框架定义的框架元素包括原因主体(cause)、影响主体(Affected)、影响(Effect),这几个元素对“造成”这个词框架的意义进行了描述。此外,各个框架之间也存在着多种有向关系类型,包括继承关系、透视关系、总分关系、先后关系、起始关系、致使关系、使用关系、参照关系等。例如,“赠送 ”是 “给予 ”的子框架,“聊天”是 “说话”的子框架,“昂首阔步”是 “走路” 的子框架。这些框架之间的关系,描绘出了现实世界中语义的整体概念信息。从项目首页的介绍中我们可以看到,目前Frament定义了超过1200个Frame框架、1.3W个词语、1W余个框架元素、超过1800个框架关系以及超过20W的标注句子。这些资源对于我们构建事件本体并定义事件间关系具有很大的借鉴意义。
        TDT评测是更接近于话题事件抽取的一个工作,该评测细分成报道切分(story segmentation)、话题跟踪(story tracking)、话题检测(story detection)、首次报道检测(new event detection)以及关联检测(link detection)共5个子任务,这5个子任务都更加关注话题之间在时间信息上的一种变化。
         Scripts,又称script理论,最早由Silvan Tomkins[1954]提出作为affect theory理论的一个扩展,后期由Schank[1997]进一步发展,并进一步称为框架理论的一个延伸,旨在描述知识结构,尤其是对符合事件序列的表示上。关于script,目前有多种定义,代表性有Eramus[2010]所定义的“a set of expectations about what will happen next in a well-understood situation”,从构成上来说,一个脚本由一个为了完成特定目标而进行的一系列的动作或事件所形成的框架,其中的动作或事件在某些场合下也被称作场景(scene)。餐厅脚本(Restaurant script)是脚本理论中的经典例子,如“tom finds a free place, sits, waits for the waiter to take his order and finally eats his meal”,其中的”find place”,“sit”,”wait”,“eat”等动作构成了“餐厅就餐”这个脚本事件。
        Chambers[2008]在scripts的基础上进一步提出了叙事性事件链(narrative event chain)这个概念,认为这是一种新的知识结构化表示方式,叙事性事件链由一系列的叙事性事件(narrative event)按照时序组合形成,narrative event是一个包含事件event和事件参与者的元组。进一步的,在这个工作的基础上,先后提出了叙事性事件链自动抽取以及叙事性事件链预测等任务,相关的评测包括TimeML系列。TimeML是在一个关于问答系统的AQUAINT 项目里首次被提出来,从 TimeML的标注形式来看,(Subordination Link)标签用来描述文本中两个事件之间的关系。TimeML评测主要还是集中在对时序关系事件的识别,大致任务分成两部分,一是识别两个事件实体,其次是判定两个事件之间的时序关系。而到了后期,事件之间的因果关系(Causality)逐步进入研究视野,Wolff [2007]提出了动态事件模型,将因果概念分成CAUSE, ENABLE and PREVENT三个子概念类型。具有代表性的因果关系标注语料库有Palmer et al[2005]提出的PropBank 以及Prasad et al[2007]提出的Penn Discourse Treebank (PDTB),前者标注了动词与动词,动词与从句(clause)之间的因果关系,后者标注了从句(clause)之间的因果关系,两个因果关系标注语料库进一步推动了事件因果关系抽取技术的发展,Zhao[2017]是在因果关系抽取上一个代表性工作。

    四、事理图谱
        有了事件,事件之间的关系,再以一种组织体系进行表示,就可以构建起一个事件知识库。事实上, Chambers[2008]所提出的叙事性事件链(narrative event chain)这个概念已经很接近于事理图谱的概念,到后期,随着知识图谱的发展,以事件为核心进行知识组织表示的方式先后被提出。代表性的,Glavas and Snajder [2015]提出了eventgraphs的概念,事件图谱事以事件为基础信息的新型结构化表示方式,图谱中的节点表示事件提及(individual mentions of events),节点之间的边表示事件提及之间的时间(temporal)关系和指代(coreference)关系,并提出了一个包含三个阶段的端到端图谱自动构建系统和标注语料库EvExtra;Li[2018]进一步提出事件演化图谱(event evolutionary graph)的概念,定义为由抽象事件演化模式组成的知识库。在借鉴以上具有启发性的工作基础上,我们进一步将事理图谱的概念进行拓展,我们认为:“事理图谱是以“事件”为核心的新一代动态知识图谱,结构上具有抽象概念本体层和实例等多层结构;构成上包括静态实体图谱和动态事件逻辑图谱两部分;功能上注重描述事件及实体在时空域上的丰富逻辑事理关系(顺承、因果、反转、条件、上下位、组成等);应用上可通过抽象、泛化等技术实现类人脑的知识建模、推理与分析决策。”。当然,事件图谱也好,事件网络也行,事理图谱也好,从本质上来说,这只是一个知识的结构化表示方式。而就事理图谱的未来发展而言,如何进一步确定和构建一个灵活可为机器所利用的知识组织体系,一种更为合适的事件表示方法,一套从抽象概念层的事件逻辑表示和泛化框架,一个将事理逻辑与静态知识融合共通的运作方式等问题,将是信息抽取、知识工程领域中需要攻克的难题。

    五、总结
        事件,是人类的命题记忆的组织单元,也是信息时代的一种信息承载方式。作为信息抽取领域的一项重要任务,事件抽取技术已经取得了一定的发展,关于事件本身的本体理论研究、事件抽取技术以及事件关系抽取技术的研究、以事件为中心进行的知识库研究、以事件作为知识表示的应用研究等都在如火如荼地进行,对于事件的应用需求也日益剧烈,为了实现这一目标,需要学界和业界共同努力。以事件为核心的势力图谱将是未来知识图谱中的一个制高点,我们在知识图谱和事理图谱上开展了一些基础和推进性的工作,欢迎大家关注我们的公众号Datahorizon以及我们的工作,新的2019已经来临,让我们携手并进,共同推进技术升级以及应用落地。

    参考文献

    [1]Zacks[1985], Zacks, J. M., & Tversky, B. (2001). Event structure in perception and conception. Psychological Bulletin, 127, 3-21

    [2]Chung[1985], Chung & Timberlake, Argument Structure and Grammatical Relations: A Crosslinguistic Typology,1985,214

    [3]Putejovsky[2000], J. Putejovsky .“Type Coercion and Lexical Selection”, in ), Semantics and the Lexicon, Williamson T. 2000.

    [4]Eramus[2010], Erasmus, et al . The potential of using script theory in consumer behaviour research. Journal of Family Ecology and Consumer Sciences

    [5]Chen[2004],Chen, et al,2004 ,Multi-level Definitions and Complex Relations in Extended-HowNet, Workshop on Chinese Lexical Semantics,

    [6]Minsky[1974], Marvin Minsky. A Framework for Representing Knowledge… MIT-AI Laboratory Memo 306, June, 1974.

    [7]Wolff [2007],Wolff, P. Representing causation. Journal of Experimental Psychology: General, 136, 82-111

    [8]Palmer et al[2005], The Proposition Bank: An Annotated Corpus of Semantic Roles,Computational Linguistics,2005

    [9]Prasad et al[2007],Rashmi Prasad et al,The Penn Discourse Treebank 2.0 Annotation Manual. The PDTB Research Group. December 17, 2007.

    [10]Charles J. Fillmore[2003], Filmore. Background to Framenet[J].International Journal of Lexicography,2003,16(3):235- 250.

    [11]Chambers[2008],Chambers and Jurafsky. Unsupervised Learning of Narrative Event Chains. ACL- 08

    [12]Schank[1977],Roger C Schank and Robert P Abelson. Scripts, plans, goals, and understanding: An inquiry into human knowledge structures (artificial intelligence series). 1977.

    [13]Glavas and Snajder[2015],Construction and evaluation of event graphs,graphs, natural language processing,Volume 21, Issue 4

    [14]Zhao et al[2017] Sendong Zhao, et al, Constructing and embedding abstract event causality networks from text snippets. In WSDM, pages 335–344. ACM, 2017

    [15]Li et al.[2018]Zhongyang Li, Xiao Ding and Ting Liu∗,Constructing Narrative Event Evolutionary Graph for Script Event Prediction, IJCAI,2018

    [16]Filatova[2004], Filatova, E., Hatzivassiloglou, V.: Event-based Extractive Summarization. In: Proceedings of ACL 2004 Workshop on Summarization

    文章为原创,如有转载,请注明出处。
    作者简介:
    刘焕勇,中国科学院软件研究所,主要从事信息抽取、社会计算、知识图谱与事理图谱相关研发工作。如有自然语言处理、知识图谱、事理图谱、社会计算、语言资源建设等问题或合作,可联系作者:
    1、我的github项目介绍:https://liuhuanyong.github.io
    2、我的csdn博客:https://blog.csdn.net/lhy2014
    3、about me:刘焕勇,中国科学院软件研究所,lhy_in_blcu@126.com

    展开全文
  • addEventListener注册事件事件监听)

    千次阅读 2017-09-24 00:54:49
    bth.on事件 = function{ }; 如果重复注册相同的事件,后面的事件会把前面的事件覆盖掉。 例子: 输入一下代码,点击事件,控制台输出 document.onclick = function () { console.log("厉害"); } document.onclick =...
    注册事件的简单方式::
    bth.on事件 = function{
    };
    如果重复注册相同的事件,后面的事件会把前面的事件覆盖掉。
    例子:
    输入一下代码,点击事件,控制台输出
    document.onclick = function () {
    console.log("厉害");
    }
    document.onclick = function () {
    console.log("我的哥");
    }

     

     
    对以后的开发不利,会造成影响故,而引用另一种方式——事件监听。addEventListener:注册事件
    document.addEventListener(参数1"string",参数2function,参数3boolean)
    参数1:事件类型,click,mouseover等;参数2:function函数作为参数调用;参数3布尔值默认为false,下一篇事件流再叙
    参数2,function触发,可用匿名函数,也可以指定函数名
     
     
    document.addEventListener("click", fn);
    function fn(){
    console.log("哎呦");
    }
    
    document.addEventListener("click", function () {
    console.log("不错哟");
    });

     

     
    注册事件与移除(删除)事件监听:
    removeEventListener("事件类型",fn函数)
    document.removeEventListener("click", 函数名);
    *如果想要移除注册事件,必须要有函数名!
    与下面的空数组和对象一样,匿名函数
    数组console.log([ ] == [ ]);对象console.log({ } =={ });
    打印出来都是false,为什么?
     
    []==[];与{}=={}都是比较的地址(引用),[]相当于new了一个数组,另一个[]也是,都是在内存空间中创造了数组空间,只是都是空的数组而已,并不是同一个数组,对象同理。
     
    addEventListener具有兼容性
    (IE678不支持addEventListener与removeEventListen两个方法,但是支持attachEvent与detachEvnet)
    attachEvent(type, func)与addEventListener
    //type:事件类型 需要加上on onclick onmouseenter
    //func:需要执行的那个事件
    (顺序是倒的)
    detachEvnet(type, func);
    兼容性封装:
    function addEvent(element, type, fn) {
    if ("addEventListener" in element) {
    element.addEventListener(type, fn);
    } else {
    element.attachEvent("on" + type, fn);//type缺少on,加上字符串"on”;
    }
    }
    
    function removeEvent(element, type, fn){
    if ("addEventListener" in element) { //有addEventListener就必肯定可以有removeEventListener可以直接写
    element.removeEventListener(type, fn);
    } else {
    element.detachEvent("on" + type, fn);
    }
    }

     

    展开全文
  • 也许偶尔就会遇到“事件委托”(也有的称我“事件代理”,这里不评论谁是谁非。以下全部称为“事件委托”),尤其是在查JavaScript的事件处理的时候。但是,大多数时说的是“事件绑定”,对于“事件委托”,或是不提...
  • 后来又有一个叫“IE”的小子,这孩子比较傲气,他认为“凭什么我要依照你的规则走”,于是他又创造了一套自己的规则(事件冒泡) 再后来,有个叫W3C的媒婆,想撮合这两个孩子,将他们的特点融合在了一起,这下,事件...
  • 在axure8中,触发事件和自定义事件可能是初学者不太了解的东东。下面就我个人对这两个动作(action)的理解,下面对这两个放在“动作”面板中的两个“特殊”事件,做一个阐述。如图二者的相同点有以下两点:1. 二者都...
  • /* 三个文本框 哪个文本框获得了焦点就将背景设置为红色 文本设置为文本框获得了焦点 */ import java.awt.Color; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.FocusEvent;...imp...
  • JS的事件监听机制

    2015-04-10 10:38:47
    很久以前有个叫Netscape的姑娘,她制订了Javascript的一套事件驱动机制(即事件捕获)后来又有一个叫“IE”的小子,这孩子比较傲气,他认为“凭什么我要依照你的规则走”,于是他又创造了一套自己的规则(事件冒泡)...
  • Java事件处理机制 java中的事件机制的参与者有3种角色: 1.event object:事件状态对象,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中 2.event source:具体的事件源,比如说,你点击...
  • Java事件处理机制(自定义事件

    千次阅读 2017-03-13 00:28:34
    转载地址:http://blog.csdn.net/qq_35101189/article/details/61673121?ref=myreadJava中的事件机制的参与者有3种角色:1.event object:事件状态对象,用于listener的相应的方法之中,作为参数,一般存在与...
  • java事件处理机制(自定义事件

    千次阅读 2015-07-09 10:47:54
    java中的事件机制的参与者有3种角色:1.event object:事件状态对象,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中2.event source:具体的事件源,比如说,你点击一个button,那么button...
  • *比如鼠标点击按钮的过程,首先鼠标按下,就会产生一个鼠标左键按下事件(这个可以看成是一个外部鼠标中断事件,由电脑硬件外部中断产生的或者以勾子函数的形式形成的,即事件也可以自己创造了),而这个事件是一个...
  • 事件驱动

    万次阅读 2011-06-04 17:45:00
    3.4事件驱动——有事我叫你,没事别烦我 劳心者治人,劳力者治于人 ——《孟子·滕文公上》 关键词:编程范式,事件驱动式,回调函数,framework,IoC,DIP,观察者模
  • 零世界我来创造的先行实例

    千次阅读 热门讨论 2009-08-18 13:43:00
    文字、游戏的整个和小事件,大事件平衡,用户积累关系。后期的零计划,形成一个以部分制作人为中心的圈子,然后跟踪其设计。 此外,现在游戏主要开发语言是 c++ 、 java,c# 基本都不入流,还在使用主要可能是基于...
  • [js点滴]JavaScript事件详解

    千次阅读 2016-11-13 14:10:19
    DOM支持大量的事件,本节介绍DOM的事件编程。EventTarget接口DOM的事件操作(监听和触发),都定义在EventTarget接口。Element节点、document节点和window对象,都部署了这个接口。此外,XMLHttpRequest、AudioNode...
  • input事件的获取

    千次阅读 2013-11-22 21:02:49
    loop线程已经运行起来了,如果不出意外,它是不会终止的;不妨以此为起点,再开始一段新的旅程,我要去探索...上帝创造万事万物都是有原因的,看看构造它是出于什么目的。 EventHub::EventHub(void) : mBuiltInKeybo
  • 时间,空间和实物(事件)三个要素构成一个场景。改变其中任何一个要素都会进入到一个新的场景,同时另外两个要素也会随之发生改变。从产品的角度来看,三个要素的改变都可以让一个产品从一个现有的场景进入到另一个...
  • Java事件处理机制

    千次阅读 2018-10-07 15:20:53
    本文来自CSDN 博客 ,全文地址请点击:...1.event object(事件类,事件触发/发布):事件状态对象,用于listener的相应的方法之中,作为参数,一般存在于liste...
  • 这一周 最近闹得沸沸扬扬的就是 郭德纲 跟 曹云金 师徒的恩怨情仇,这俩人我也不评价,只是觉得两句话挺应景: ...上周末又去看牙医,因为左边牙肿完右边又肿...总的来说收获还是很多的,勇敢的少年,快去创造奇迹!
  • jQuery 事件方法

    千次阅读 2012-12-26 11:15:41
    事件方法会触发匹配元素的事件,或将函数绑定到所有匹配元素的某个事件。 触发实例: $("button#demo").click() 上面的例子将触发 id="demo" 的 button 元素的 click 事件。 绑定实例: $("button#demo").click...
  • 数据可视化是怎样创造出来的

    千次阅读 2012-09-22 01:05:03
    我多次被炫目的数据可视化或信息可视化震惊,在我知道这些图片背后的数据来源和创造历程后,更是为之诧异不止。它涉足制图学、图形绘制设计、计算机视觉、数据采集、统计学、图解技术、数型结合以及动画、立体渲染、...
  • 数据可视化是如何被创造出来的

    万次阅读 2015-04-24 23:16:12
    我多次被炫目的数据可视化或信息可视化震惊,在我知道这些图片背后的数据来源和创造历程后,更是为之诧异不止。它涉足制图学、图形绘制设计、计算机视觉、数据采集、统计学、图解技术、数型结合以及动画、立体渲染、...
  • java 键盘事件 KeyListener

    千次阅读 2018-06-12 20:46:46
    /* * KeyListener:文本框内内容长度超过10 达到第11个时(最大长度10) 焦点自动跳到下个文本框 * 控制台会自动输出所按字符的ASCII */import java.awt.Component;import java.awt.Font;import java.awt.GridLayout...
  • java 窗体事件 WindowListener

    千次阅读 2018-06-13 13:53:44
    JLabel title=new JLabel("窗体事件",JTextField.CENTER);//也行 add(title,BorderLayout.NORTH); add(t,BorderLayout.CENTER); addWindowListener(this); setSize(500, 300); ...
  • 如果要在C#中定义一个事件,首先你要创造一个delegate(委派),用他来定义一个你所想使用事件的标签,然后你才能使用event关键字,在这个委派的基础上定义一个事件.两点需要注意的是:第一,首先你要创造一个委派,第二,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 93,744
精华内容 37,497
关键字:

创造的事件