folia文档服务器是一个后端http服务,用于与folia格式的文档交互,folia格式是一种基于xml的语言注释格式(http://proycon.github.io/folia)。它提供了一个通过folia查询语言(fql)高效编辑folia文档的接口。
foliadocserve的Python项目详细描述
folia文档服务器
folia文档服务器是一个与文档交互的后端http服务。 在folia格式中,一种基于xml的语言注释格式 (http://proycon.github.io/folia" rel="nofollow">http://proycon.github.io/folia )。它提供了一个有效编辑的界面 folia文档通过folia查询语言(fql)。然而,事实并非如此 设计为多文档搜索工具。
flat使用folia文档服务器(https://github.com/proycon/flat" rel="nofollow">https://github.com/proycon/flat)
folia文档服务器是用python 3编写的,在 Pynlpl和Cherrypy。
架构
folia文档服务器由一个文档存储组成,它对文档进行分组 在名称空间中,名称空间可以对应于用户id或 项目:
文件根据要求自动加载和卸载,并且 到期.加载的文档完全保存在内存中,以便于快速访问 并在卸载时序列化回磁盘上的XML文件。
文档服务器是一个通过http接收请求的web服务。请求 使用folia查询语言与包含语句的folia文档交互 (FQL)。对于某些用途,也支持语料库查询语言(cql)。 响应是folia xml或解析为json(也可能包含html摘录),如下所示 在fql查询中请求。
功能:
- 网络服务
- 使用fql或cql(有限)的查询
- 多种返回格式(folia xml、json、flat)
- 使用git支持版本控制
- 完全支持更正,替代方案!
- 支持并发性
注意,这个webservice不是要公开的,而是 被另一个系统用作后端。文档服务器确实支持 将命名空间约束到某些会话ID,将fql查询约束到不 违反其命名空间,并按会话ID或命名空间限制上载。 只有在显式启用并在 http:
如果您正在寻找解释fql/cql和查询的命令行工具 folia文档,使用folia tools包中的 foliaquery 工具 请参见https://github.com/proycon/folia" rel="nofollow">https://github.com/proycon/folia
安装和使用
您可以直接从python包索引中获取文档服务器:
$ pip install foliadocserve
或者,从git存储库手动安装或下载tarball:
$ python setup.py install
您可能需要使用sudo进行全局安装。
创建一个可写目录来保存文档,这是文档根路径。然后 按如下方式启动文档服务器:
$ foliadocserve -d /path/to/document/root
有关更多选项,请参见 -h 。
启动后,在指定的主机和端口上将提供一个简单的Web界面。
Web服务规范
请求url中的公共变量:
- 命名空间 -组标识符
- docid -folia文档id
- 会话id -如果没有会话,则会话id可以设置为 nosid 需要。会话id的使用支持诸如缓存和 并发性。
这些url将返回htp200ok,数据格式与fql中请求的格式一致。 查询是否成功。如果查询包含错误,则返回http 404响应 将被退回。
版本控制
-
/getdochistory/<;namespace>;/<;docid>;
(get)-获取指定文档的git历史记录。返回一个json响应:
{'history':[
{'commit':commithash,'msg':commitMessage,'date':commitData}}
-
/revert/<;namespace>;/<;docid>;/<;commit hash>;
(get)-将文档的状态还原为指定的提交哈希值
文档管理
-
/namespaces/
(get)–所有命名空间的列表
-
/documents/<;namespace>;/
(get)–给定命名空间的文档索引(json列表)
-
/upload/<;namespace>;/
(post)–将FOLI XML文档上载到命名空间,请求正文包含FOLI XML。
-
/create/<;namespace>;/
(post)–创建新的命名空间
folia查询语言(fql)
fql语句由换行符分隔,并用utf-8编码。表达式 区分大小写,所有关键字都是大写,所有元素名和 小写的属性。
fql对括号也很严格,它们通常是必需的或禁止的。 为了表达。括号通常表示子表达式,它也用于 布尔逻辑。
一般来说,一个大查询比多个查询更有效 独立查询。
注意,为了可读性,查询可能被拆分成多行 在这里的演示中,实际上它们应该在一个上。
全局变量
-
set
<;variable>;=<;value>;
-设置应用于后面所有语句的全局变量。字符串值需要用双引号括起来。可用变量为:
-
注释器
-注释器的名称
-
注释器类型
-注释器的类型可以是
自动
或
手动
通常,对特定注释类型的查询仅限于 特定集合。为了避免在查询中显式输入集合, 可以设置默认值。注释类型对应于folia元素:
DEFAULTSET entity https://raw.githubusercontent.com/proycon/folia/master/setdefinitions/namedentitycorrection.foliaset.xml
如果folia文档只有一组这样的类型,那么这甚至不是 必要时,将自动设置默认值。
文档选择
文档服务器的fql语句以文档选择器开头,由 关键字 使用 :
USE <namespace>/<docid>
这将选择要应用查询的文档,该文档将 由服务器根据需要自动加载和卸载。它可以 在任何操作查询之前或单独使用,在这种情况下,它将应用o 所有后续查询。
或者,load语句从磁盘加载任意文件,但它的用法是 仅限于命令行 foliaquery 工具,而不限于此文档服务器:
LOAD <filename>
如果您对检索完整文档而不是执行特定查询感兴趣,请使用 get 语句一在a 之后立即使用 或 加载 表达式。
声明
需要声明folia中的所有注释类型。fql帮你做这个 自动。如果对以前未声明的集进行编辑,则 为你申报。这些默认声明永远不会指定默认值 注释器或注释器类型。
可以使用declare关键字后跟 要声明的注释类型,它表示 相应的叶子注释元素:
DECLARE entity OF "https://github.com/proycon/folia/blob/master/setdefinitions/namedentities.foliaset.xml" WITH annotator = "me" annotatortype = "manual"
注意,语句必须在一行上,此处拆分只是为了方便 演示文稿。
with子句是可选的,关键字后面的集合是必需的。
声明可以是链式的,即可以发出多个声明 在一行上,以及在行动声明之前(参见下一节)。
操作
fql语句的核心部分由动作动词组成,如下所示 可用
- 选择<;焦点表达式>;[<;目标表达式>;] -选择批注
- delete<;focus expression>;[<;target expression>;] -删除注释
- 编辑<;焦点表达式>;[<;赋值表达式>;][<;目标表达式>;] -编辑现有注释
- add<;focus expression>;<;assignment expression>;<;target expression>; -添加注释(到目标表达式)
- append<;focus expression>;<;assignment expression>;<;target expression>; -在目标表达式之后插入注释
- 前置<;焦点表达式>;<;赋值表达式>;<;目标表达式>; -在目标表达式之前插入注释
在动作动词后面是焦点表达式,它以 注释类型,等于folia xml元素标记。集合是 使用 of<;set>; 和/或id with id<;id>; 指定。例如:
< Buff行情> "http://some.domain/some.folia.set.xml" rel="nofollow">http://some.domain/some.folia.set.xml的位置如果注释类型已经声明,并且文档中只有一个,或者 如果先前使用了 defaultset 语句,则 of 语句可以 被省略,并将被暗示和自动检测。如果是模棱两可的, 将引发一个错误(而不是应用查询而不管设置如何)。
为了进一步过滤焦点,表达式可以包含一个 where 子句 过滤一个或多个叶子属性:
- 类
- 注释器
- 注释类型
- n
- 信心
当元素包含文本时,以下属性也可用:
- 文本
where 语句需要运算符(=,!=,>;,<;,<;=,>;=,包含,匹配),以及 或 和不运算符可用于 分组和布尔逻辑。运算符决不能粘在属性上 名称或值,但左右有空格。
现在,我们可以用一些运算符显示完整查询的一些示例:
- 选择http://some.domain/some.folia.set.xml"的位置
- 选择pos where class="n"和annotator="johndoe"
- 删除位置class="n"和注释器!="约翰多"
- 删除其中class="n"和注释器包含"john"的pos
- 删除class="n"和注释器匹配"^john$"的pos
选择并删除仅支持where,编辑同时支持where和with,如果 两者都比以往任何时候都有用。添加操作仅支持。如果 对找不到的批注进行编辑,并且没有位置 从句,则返回到加法。
下面是一个将文档中的所有名词更改为动词的编辑查询:
EDIT pos WHERE class = "n" WITH class "v" AND annotator = "johndoe"
查询相当粗糙,因为它仍然缺少 目标表达式:a 目标 表达式 确定焦点应用于哪些元素,而不是应用于 文档作为一个整体,以关键字 开头 注释类型(即folia xml元素标记) 或 元素。目标表达式还确定将返回哪些元素。 在后面的章节中,我们将对此进行详细介绍。
下面的fql查询显示如何获取 单词:
SELECT pos FOR ID mydocument.word.3
或所有单词:
$ pip install foliadocserve0
添加操作几乎总是需要一个目标表达式:
$ pip install foliadocserve1
可以指定多个目标,以逗号分隔:
$ pip install foliadocserve2
目标表达式可以再次包含一个 过滤器:
$ pip install foliadocserve3
可以嵌套以 for 关键字开头的目标表达式:
$ pip install foliadocserve4
也可以使用不带焦点表达式的select关键字,但只能使用目标表达式。如果要返回多个不同的元素,例如id:
$ pip install foliadocserve5
select 关键字也可以与选择范围内所有元素的特殊 all 选择器一起使用,以下两个语句相同,并将返回文档中的所有元素:
$ pip install foliadocserve6
它也可以在更深层次上使用,下面将返回所有单词下的所有内容:
$ pip install foliadocserve7
目标表达式对于span注释至关重要,关键字 span 表示 目标是一个跨距(要同时执行多个跨距,请重复该跨距 关键字),运算符 &; 用于连续跨距,而 , 用于不相交跨距:
$ pip install foliadocserve8
这也适用于过滤器, &; 运算符强制执行单个连续范围:
$ pip install foliadocserve9
记住,我们可以同时执行多个操作:
$ python setup.py install0
has 关键字允许您在文档树中向下搜索 兄弟姐妹。考虑下面的示例,它更改了词性标记 "动词",表示所有出现外稃"fly"的单词。括号 对于 has 语句是必需的:
$ python setup.py install1
目标表达式可以是前一个 不同的是, 中的 要严格得多,元素必须是 in 语句中元素的子元素,而for 的子元素可以跳过 中间元素。与xpath类似, 的 对应于 // 和 中的 对应于 / 。 for 和 in 可以嵌套和混合在 威尔。以下查询很可能不会产生任何结果,因为 可能是WOD和事件结构之间的段落和/或句子:
$ python setup.py install2
可以组合多个操作,所有操作共享相同的目标表达式:
$ python setup.py install3
也可以嵌套操作,为此使用括号,嵌套 在任何where和with语句之后发生:
$ python setup.py install4
尽管在这里显式指定了id,但在必要时将自动生成id,并且未指定。
add 操作有两个类似项: append 和 prepend 。 它们不是在目标表达式的作用域中添加某些内容,而是附加 或者在元素前面加上前缀,这样插入的元素将是同级元素:
$ python setup.py install5
上面的查询在每一个确定的项目后都添加/插入"house"一词。
文本
我们之前的例子主要集中在词性标注上。在这 我们将查看文本内容,在folia中它也是一个注释元素。 (t)
在这里,我们更改单词的文本:
$ python setup.py install6
在这里,我们编辑或添加(回想一下,当没有找到时,编辑会返回到add 没有进一步的选择器)引理并检查文本内容:
$ python setup.py install7
可以在所有元素上使用where文本,它将同时包含显式文本 内容以及隐式文本内容,即从子元素推断的内容。如果 你想表现得非常明确,你可以做到:
$ python setup.py install8
高级 :
当使用自定义类(如 ocred或其他预标准化文本。请考虑以下OCR更正:
$ python setup.py install9
查询响应
我们已经演示了如何进行查询,但还没有说明如何响应 返回。这是使用 return 关键字进行调节的:
- 返回焦点 (默认值)
- 返回父级 -返回焦点的父级
- 返回目标 或 返回内部目标
- 返回外部目标
- 返回祖先目标
默认的焦点模式只是返回焦点。然而,有时你可能想要 更多上下文,可能需要返回目标表达式。在 下面的示例只返回pos标记不会很有趣,您可以 最有可能对它所适用的单词感兴趣:
$ foliadocserve -d /path/to/document/root0
当存在嵌套for/in循环时,可以指定是否要返回 内部(最高粒度,默认值)或外部(最宽范围)。 您还可以决定返回 (外部)目标,与 范围结合使用时可能特别有用 关键词:
返回类型可以使用 格式设置
- 格式化xml -返回folia xml,响应包含在一个简单的
- <;结果>;<;结果/>;<;结果>; 结构。
- 格式化单个XML -如上所述,但返回纯未包装的叶XML和
- 因此,仅当响应仅包含一个元素时才起作用。一个错误 否则将被提出。
- 格式化json -返回json列表
- 格式化单个json 与上面一样,但返回单个元素而不是 清单。如果响应包含多个,则会引发错误。
- 格式化python -返回python对象,仅当 不使用文档服务器直接查询fql库
- 格式化平面 -返回为平面优化的解析格式。这是一个json回复
- 包含结构元素(关键html)的html框架,解析的注释 (关键注释)。如果查询返回一个完整的folia文档,那么json对象将包括解析的set定义(key 设置定义)和声明。
在 哪种情况适用于所有后续查询。同样适用于 格式 语句,但如果不同的格式 在同一个http请求中请求。
当在 目标中返回上下文时 request 关键字返回的元素类型,它 获取folia xml元素的名称。它可以单独使用,因此适用 所有后续查询:
$ foliadocserve -d /path/to/document/root1
。或在查询之后:
$ foliadocserve -d /path/to/document/root2
请求的两个特殊用途是 全部请求(默认)和 请求 无 ,后者与 添加 、 编辑 和 删除 ,默认情况下,它将返回文档的更新状态。
请注意,如果您设置的请求错误,您很快就会得到空结果。
span注释
选择范围批注与标记批注相同。你可能知道 在folia-SPAN中,注释元素在技术上存储在一个单独的 隔离层,但是在编写fql查询时可以忘记这个事实,并且可以 从应用于它们的元素中直接访问它们。
以下查询选择所有命名实体(实际的而不是 虚构的集合,用于更改)具有john:
$ foliadocserve -d /path/to/document/root3
或者考虑选择包含 字库:
$ foliadocserve -d /path/to/document/root4
注意,如果此处使用了 span 关键字,则选择将是 仅限于单个单词"john":
$ foliadocserve -d /path/to/document/root5
我们可以使用该结构来选择所有名为john doe的人,例如:
$ foliadocserve -d /path/to/document/root6
像语法单元这样的跨度注释通常是嵌套树,一个树查询 例如"//pp/np/adj"可以表示如下。回想一下 中的 语句开始的目标表达式类似于for,但对 层次结构,这正是我们想要的:
$ foliadocserve -d /path/to/document/root7
在这种情况下,我们可能最感兴趣的是获得完整的p p:
$ foliadocserve -d /path/to/document/root8
编辑操作不限于编辑属性,有时 要更改跨度的元素。单独的 respan 关键字(不带 for/in/with)实现了这一点。它接受关键字respan 与用于span 目标表达式的 相同,并表示 span,普通目标表达式表示旧作用域:
$ foliadocserve -d /path/to/document/root9
与 一起使用的语句也可以使用,它们总是在
之前DEFAULTSET entity https://raw.githubusercontent.com/proycon/folia/master/setdefinitions/namedentitycorrection.foliaset.xml0
更正和备选方案
folia和fql都明确支持
注解。更正不是对任何
类型,但原始的也保留下来。同样,另一种选择
注释是与同一类型的实际注释一起存在的注释
设置,但不具有权威性。
下面的例子是一个修正,但不是叶意义上的,它直接改变了词性。
注释"fly"一词从"n"到"v"的所有出现,例如
更正错误的标记器输出:
DEFAULTSET entity https://raw.githubusercontent.com/proycon/folia/master/setdefinitions/namedentitycorrection.foliaset.xml
1
现在,我们做同样的操作,但作为显式校正:
DEFAULTSET entity https://raw.githubusercontent.com/proycon/folia/master/setdefinitions/namedentitycorrection.foliaset.xml
2
另一个拼写更正的例子是,我们更正了拼写错误
从concous
到
concous*
:
DEFAULTSET entity https://raw.githubusercontent.com/proycon/folia/master/setdefinitions/namedentitycorrection.foliaset.xml
3
as correction
关键字(始终位于括号内的单独块中)用于
开始纠正。修正本身是一个类集合的一部分
指示校正类型。
替代方案更简单,但遵循相同的原则:
DEFAULTSET entity https://raw.githubusercontent.com/proycon/folia/master/setdefinitions/namedentitycorrection.foliaset.xml
4
信心得分通常与备选方案相关:
DEFAULTSET entity https://raw.githubusercontent.com/proycon/folia/master/setdefinitions/namedentitycorrection.foliaset.xml
5
as
子句也用于选择替代项,而不是
权威形式,这将获得所有可选的词性标记
文本"fly":
DEFAULTSET entity https://raw.githubusercontent.com/proycon/folia/master/setdefinitions/namedentitycorrection.foliaset.xml
6
如果还需要权威标记,可以链接操作。这个
相同的目标表达式(for..)总是适用于所有链接的操作,但as子句
仅适用于其出现范围内的操作:
DEFAULTSET entity https://raw.githubusercontent.com/proycon/folia/master/setdefinitions/namedentitycorrection.foliaset.xml
7
可使用where子句按预期对备选方案本身应用筛选器:
DEFAULTSET entity https://raw.githubusercontent.com/proycon/folia/master/setdefinitions/namedentitycorrection.foliaset.xml
8
注意,对注释本身的属性进行过滤不在
AS条款:
DEFAULTSET entity https://raw.githubusercontent.com/proycon/folia/master/setdefinitions/namedentitycorrection.foliaset.xml
9
根据定义,更正是权威的,因此不需要特殊的语法
获得它们。假设修正了词性标记,这将
正确获取,不需要as子句:
USE <namespace>/<docid>
0
添加
作为更正
只会强制返回那些实际上
更正:
USE <namespace>/<docid>
1
但是,如果您想在更正前获得原件,可以这样做
使用
作为校正原稿
:
USE <namespace>/<docid>
2
folia不只是区分更正,还支持以下建议
更正。设想一个拼写检查器为拼写错误提供输出建议
但要留给用户接受哪种建议。
建议不具权威性,可以以类似的方式获得
使用
建议
关键字:
USE <namespace>/<docid>
3
请注意, 作为更正 可能需要使用 的 关键字 指定校正集,它们还可以使用 where 子句进行筛选:
USE <namespace>/<docid>4
suggestion 关键字也可以使用where过滤器:
USE <namespace>/<docid>5
添加更正建议而不是实际的权威 更正,您可以这样做:
USE <namespace>/<docid>6
action子句中没有WITH语句表明这纯粹是一个建议。实际建议遵循 建议 关键字。
与建议相关的任何属性都可以在建议之后用 with 语句设置:
USE <namespace>/<docid>7
即使该操作存在 with 语句,也会使其成为实际的 更正,您仍然可以添加建议:
USE <namespace>/<docid>8
suggestion 关键字可以链接起来,一次添加多个建议:
USE <namespace>/<docid>9
拼写更正上下文中的另一个示例:
LOAD <filename>0
类似的结构也可供选择。首先我们 确定以下两个语句相同:
LOAD <filename>1
然后通过简单地添加一个 备选方案 条款:
LOAD <filename>2
当对元素进行更正时,它下面的所有注释(递归地)都将保留 完好无损,即从原始元素复制到新的正确元素。这个 这同样适用于建议。此外,所有对原始元素的引用, 例如,SPAN注释元素,将成为 新的校正元件。
这并不总是你想要的,如果你想改正的话 从原始版本继承的注释,只需使用 作为裸更正而不是 作为 更正
您还可以使用 作为校正 与 添加 和 删除 一起使用
最复杂的修正是拆分和合并。一分为二 结构元素,如单词到多个,合并将多个 将元素组合成一个。
在fql中,这是通过替换实现的,使用action substitute :
LOAD <filename>3
subactions与substitute是通用的,以下与上面的等价:
LOAD <filename>4
若要将替换项拆分为多个替换项,只需将替换项链接起来 子句:< >
LOAD <filename>5
像 添加 ,两个 替换 都可以进行赋值( 与 一起),但不进行筛选( 其中 )。
您可能已经注意到合并和拆分示例在 叶子的感觉;原物被移除而不被保存。我们来吧 正确更正:
LOAD <filename>6
以及拆分:
LOAD <filename>7
若要将此作为更正建议,请使用 建议 在 as 子句中,关键字后跟 替换 of替换语句必须括在括号中:
LOAD <filename>8
(或者,您可以在 suggestion 子句之后使用 add 而不是 substitute ,该子句的行为相同)
在folia中,删除建议只是空的建议,它们是使用 deletion 关键字:
LOAD <filename>9
建议可能表明它们在应用时会修改父结构。为了 例如,删除多余时间的建议通常也是 建议句子合并。这在 folia在建议上有一个 merge 属性,在fql中有 建议后紧跟关键字merge 。例如:
DECLARE entity OF "https://github.com/proycon/folia/blob/master/setdefinitions/namedentities.foliaset.xml" WITH annotator = "me" annotatortype = "manual"0
相反的情况是插入一个缺失的句点,即 一般来说,这也是一个分割父句的建议。为此,我们使用 拆分 关键字。插入通常使用 append 或 准备操作,因为没有可替代的操作:
DECLARE entity OF "https://github.com/proycon/folia/blob/master/setdefinitions/namedentities.foliaset.xml" WITH annotator = "me" annotatortype = "manual"1
最后,但并非最不重要的是,显式删除更正时,可以使用 restore 关键字还原原始更正。 例子:
DECLARE entity OF "https://github.com/proycon/folia/blob/master/setdefinitions/namedentities.foliaset.xml" WITH annotator = "me" annotatortype = "manual"2
我可以在危险环境下进行操作吗?
我们已经看到,使用 for 关键字,我们可以移动到叶中更大的元素 文档,并使用 has 关键字可以移动到兄弟级。有 几个上下文关键字为我们提供了查看 语境。就像 有 表达式一样,这些表达式需要始终包含在 括号。
例如,考虑词性标注场景。如果我们有话要说 左邻右舍是限定词,右邻右舍是名词,我们可以 很确定我们考虑的这个词(我们的目标表达式)是 形容词。让我们添加POS标签:
DECLARE entity OF "https://github.com/proycon/folia/blob/master/setdefinitions/namedentities.foliaset.xml" WITH annotator = "me" annotatortype = "manual"3
如果 您对进一步的上下文感兴趣,或者可以使用 左上下文 / 右上下文 / 上下文 如果您不在乎在什么位置 出现以下情况:
DECLARE entity OF "https://github.com/proycon/folia/blob/master/setdefinitions/namedentities.foliaset.xml" WITH annotator = "me" annotatortype = "manual"4
目标表达式可以与 span 关键字和 &; 运算符一起使用,而不是 next 和 previous 关键字
DECLARE entity OF "https://github.com/proycon/folia/blob/master/setdefinitions/namedentities.foliaset.xml" WITH annotator = "me" annotatortype = "manual"5
在 span 关键字中,可以使用 扩展表达式来选择 元素的任何数量或某个数量。你可以通过附加 元素名后的大括号(但不附加到它)并指定 最小和最大元素数。下面的表达式从 在单词"the"和"house"之间最多零个三个形容词:
DECLARE entity OF "https://github.com/proycon/folia/blob/master/setdefinitions/namedentities.foliaset.xml" WITH annotator = "me" annotatortype = "manual"6
如果在大括号中只指定一个数字,则需要 元素的确切数目。要将至少一个单词匹配到无限个数, 使用扩展表达式,如 {1,}
如果您现在想使用folia文档服务器和fql来搜索 大型语料库在实时的情况下,那么就要注意这不是一个好主意。会让人望而却步 大型数据集速度较慢,因为这需要智能索引,此文档 服务器未提供。因此,您不能实时执行此操作,但可能 仅作为建立实际搜索索引的第一步。
其他修饰符是父和祖先。父级最多只能执行一个元素 向上,而祖先将继续到最大的元素:
DECLARE entity OF "https://github.com/proycon/folia/blob/master/setdefinitions/namedentities.foliaset.xml" WITH annotator = "me" annotatortype = "manual"7
而不是父节点,最好为 使用嵌套的 ,这样更有效:
DECLARE entity OF "https://github.com/proycon/folia/blob/master/setdefinitions/namedentities.foliaset.xml" WITH annotator = "me" annotatortype = "manual"8
现在让我们回顾一下语法树,我们知道如何获取上下文。想象 我们想要一个np在p p的左边:
DECLARE entity OF "https://github.com/proycon/folia/blob/master/setdefinitions/namedentities.foliaset.xml" WITH annotator = "me" annotatortype = "manual"9
…整个事情都是副总裁的一部分:
EDIT pos WHERE class = "n" WITH class "v" AND annotator = "johndoe"0
…并返回整棵树,而不仅仅是我们正在寻找的np:
EDIT pos WHERE class = "n" WITH class "v" AND annotator = "johndoe"1
切片
fql目标表达式可以使用 start 和 end 进行切片,或者 endbefore 关键字(前者包含,后者不包含)。他们采取 选择表达式。例如,您可以在两个特定的id之间进行切片:
EDIT pos WHERE class = "n" WITH class "v" AND annotator = "johndoe"2
或选择从 第一个出现到下一个出现的所有单词:
EDIT pos WHERE class = "n" WITH class "v" AND annotator = "johndoe"3
查询通常在 end / endbefore 语句之后结束。但是你可以 希望继续,直到再次遇到start表达式,在这种情况下, 添加关键字repeat
EDIT pos WHERE class = "n" WITH class "v" AND annotator = "johndoe"4
请注意,切片仅对目标表达式有效,因此 的 是 强制性的。如果链接了多个目标表达式,则每个表达式都可以设置 自己的切片。
快捷键
整个叶类都很普遍,很常见的是想选择 在课堂上。例如,要选择带有pos标记"n"的单词,可以执行以下操作:
EDIT pos WHERE class = "n" WITH class "v" AND annotator = "johndoe"5
因为这很常见,所以有一条捷径。指定批注类型 直接以冒号开头,与类匹配的has语句将 自动构造:
EDIT pos WHERE class = "n" WITH class "v" AND annotator = "johndoe"6
这两种说法完全相同。
获得相同结果集的第三种方法是使用目标 表达式:
$ foliadocserve -d /path/to/document/root0
这说明通常有多种方法可以获得相同的 结果集。由于fql库中的延迟计算,没有太多 性能差异。
另一种快捷方式是在结构元素上设置文本。你 可以添加这样的文字:
EDIT pos WHERE class = "n" WITH class "v" AND annotator = "johndoe"8
或者使用快捷方式:
EDIT pos WHERE class = "n" WITH class "v" AND annotator = "johndoe"9
语料库查询语言(cql)
folia文档服务器还支持cql的基本子集。CQL专注于 只查询,没有像fql那样的数据操作功能。然而,CQL, 比fql简洁得多,已经很好地传播了,它的语法是 更容易。
要使用cql而不是fql,只需像往常一样使用fql启动查询 或者,使用 cql 关键字,之后的所有内容都将被解释 作为CQL。例子:
SELECT pos FOR ID mydocument.word.30
标记 属性映射到folia pos 类型。单词映射到 folia/fql 文本 ,任何其他属性都将取消映射,因此您只需使用 CQL中的叶名称,包括任何跨度注释。
如果一个类型有多个集合可用,请确保使用 defaultset fql关键字设置默认值,否则查询将失败,因为cql不知道 叶集范式。
cql语言记录在这里: http://www.sketchengine.co.uk/documentation/wiki/ske/corpusquising 。 尚未支持提到的高级操作员。