哲学与心理 / 工具 · 2022/10/11 0

生成语法工具与语法规则

对生成语法理论有兴趣,找了几个生成语法工具,并作简要介绍。

工具

这两个都是开源项目,提供可用 Demo,也可以自己部署。RSyntxTree 提供更丰富的功能,可生成 svg图片,jsSyntaxTree 仅支持另存为 PNG,路径效果更好看。

RSyntxTree

Demo | Github | Github-WebUI版项目 | 文档

作者:Yoichiro Hasebe (長谷部 陽一郎)

RSyntaxTree 是一个用 Ruby 编写的图形语法树生成器,支持生成语法,在测试认知语法等语法图。Github 项目是命令行,Github WebUI项目可以 Docker desktop 自己部署一个和 demo 一样的工具。

RSyntxTree

jsSyntaxTree

Demo | Github

作者:int2str(Andre Eisenbach)

jsSyntaxTree

简明语法

上面两张图片里单行或多行写法是等义的,简单的句子写成一行更简明,复杂的句子用多行更清晰。

1. 结构:多层嵌套的 []

[S[NP][VP[N][VP]]]

[S
  [NP]
  [VP
    [N]
    [VP]
  ]
]

这两种写法等义,工具忽略每行第一个非空格字符前的空格,把多行转成单行再绘图。

输出的语法图如下:

生成语法示例01>

2. 说明

单词或短语A 单词或短语B 的形式,会将空格后的 B 作为 A 的注释 (后面的简单句子就仅写单行)

[S[NP][VP[N][VP 注释]]]

输出的语法图:

生成语法示例02

其他语法

生成语法一般用到的就是上面两个语法规则,如果我的需求复杂一点,比如我想输入空格,但语句前的空格会被忽略,语句后的空格会被转义为注释,怎么办呢?又或者我想要有换行的注释,怎么办?

空格 <>

语法图里用<>代表空格

换行 \

语句后的\ 表示换行(注意\ 后至有少一个空格才换行)

带方框语句 |语句|

|语句| 绘制一个带方框的语句

列表 #\+语句\

#\\+语句\ 和后续的 \语句\ 构成列表,闭合的 ] 不建议和结尾的 \ 在同一行,可能导致错误

我们把上述4个语法都用上,来绘制一个语法图:

[S
  [NP
    [Adj 注释]
    [VP1 |框|<>行内空格]
  ] 
  [VP2 换行\ 换行]
  [VP3 #\+列表\ 
        \+列表项1\
  ]      
]

换行和列表都可以用空格隔开写在一行,或分行

输出的语法图:

生成语法示例03

路径

RSyntxTree 的路径目前是一个实验性功能,即在语句后增加 +数字 (无空格)来赋予一个数字标签,在另一个语句后 +>标签即可绘制一条由前者指向后者的箭头,例如:

[S
  [NP+7]
  [VP
    [N]
    [VP+>7]
  ]
]

输出的语法图:

生成语法示例04

字体样式

还可以应用字体样式,不逐一举例了

加粗 *语句*

倾斜 **语句**

加粗并倾斜 ***语句***

上划线 =语句=

下划线 -语句-

删除线 ~语句~

上标 语句_上标内容_

下标 语句__下标内容__

除了字体样式,作者也提供多种多样的字符外框,详见 文档

参考

其他工具

languagetool 错句纠正

相关关键词

Abstract syntax tree 抽象语法树

parse tree 具体语法树、分析树、解析树

Prolog DCG 一种表达定语语法的句法结构工具