欢迎光临 x-algo
关注算法在工业界应用
Hi, 这是一个关注大数据算法在工业界应用的网站

使用JS生成依存句法树

想要做公开或者公司内部使用的nlp平台的时候,都要面对可视化的问题,生成依存树可以说是很多nlp同学比较头疼的事情。 如果公司内部找不到合适的前端工程师支持,就只能像我一样自己搞,所以做算法的工作很容易最后变成全栈工程师。花了两天时间终于写好了,程序整体没啥特别的,值得一提的是如何计算每一个边的高度。

画出来的效果图为:

2A223689-A777-4D41-9BFF-72E1D702AB68

确定实现方式

调研了网络上几种实现方式,最后选择通过JS生成HTML代码的方式。

spaCy 简直难看的不能再多一点,所以决定模仿 bosonnlp。话说,画出来的很漂亮有木有。

设计参数

这个JS函数的输入两类信息:边的信息和节点的信息。 入参为下面格式的json数据:

上面信息依次为:自己的id、父亲的id、词内容、词性、依存关系。 如果id=fid就说明当前节点是Root节点。

输出就是直接可以展示结果的html+css3的代码,可独立执行,不依赖外部代码。

函数实现

由于所有元素都是画出来的,所以会严格知道每一个元素的位置、大小等信息。这里主要说一下如何计算高度信息。

计算的方法是一个动态规划 + 记忆化搜索的方法,我这里懒省事,直接递归计算所有可能性了,着急实现就不考虑性能了。

deep[i]表示第i个节点的深度,动态转移方程可以表示为:

\(deep[i] = 1 + \max_{j \in i_{cover} }{deep[j]}\)

\(i_{cover}=[i, i_{father}]\)

相关代码

调用js代码的html代码

js代码(点击展开)

未经允许不得转载:大数据算法 » 使用JS生成依存句法树

分享到:更多 ()

评论 4

*

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #3

    太赞了

    blues1年前 (2017-03-31)回复
  2. #2

    句子太长会导致 Maximum call stack size exceeded

    xiaotong9个月前 (08-23)回复
    • 太长具体是多长?

      leihao9个月前 (08-27)回复
  3. #1

    https://github.com/traburiss/DependencyParsingTreeSVG 进行了一些优化

    traburiss2个月前 (03-22)回复

关注大数据算法在工业界应用

本站的GitHub关于本站