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
  • < DL>
    会话id -如果没有会话,则会话id可以设置为 nosid 需要。会话id的使用支持诸如缓存和 并发性。
x-sessionid ,并且必须包含内容长度
  • /query/?query= (get)–上面的http get别名,仅限于一个查询
  • 这些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
    < >ng>添加和编辑更改实际属性,这在 赋值表达式 ,以关键字开头。它适用于 所有常见的folia属性,如 where 关键字,但没有运算符或 布尔逻辑,因为它是一个纯赋值函数。

    选择并删除仅支持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 foliadocserve
    
    0

    添加操作几乎总是需要一个目标表达式:

    $ pip install foliadocserve
    
    1

    可以指定多个目标,以逗号分隔:

    $ pip install foliadocserve
    
    2

    目标表达式可以再次包含一个 过滤器:

    $ pip install foliadocserve
    
    3

    可以嵌套以 for 关键字开头的目标表达式:

    $ pip install foliadocserve
    
    4

    也可以使用不带焦点表达式的select关键字,但只能使用目标表达式。如果要返回多个不同的元素,例如id:

    $ pip install foliadocserve
    
    5

    select 关键字也可以与选择范围内所有元素的特殊 all 选择器一起使用,以下两个语句相同,并将返回文档中的所有元素:

    $ pip install foliadocserve
    
    6

    它也可以在更深层次上使用,下面将返回所有单词下的所有内容:

    $ pip install foliadocserve
    
    7

    目标表达式对于span注释至关重要,关键字 span 表示 目标是一个跨距(要同时执行多个跨距,请重复该跨距 关键字),运算符 &; 用于连续跨距,而 用于不相交跨距:

    $ pip install foliadocserve
    
    8

    这也适用于过滤器, &; 运算符强制执行单个连续范围:

    $ pip install foliadocserve
    
    9

    记住,我们可以同时执行多个操作:

    $ python setup.py install
    
    0

    has 关键字允许您在文档树中向下搜索 兄弟姐妹。考虑下面的示例,它更改了词性标记 "动词",表示所有出现外稃"fly"的单词。括号 对于 has 语句是必需的:

    $ python setup.py install
    
    1

    目标表达式可以是前一个 不同的是, 中的 要严格得多,元素必须是 in 语句中元素的子元素,而for 的子元素可以跳过 中间元素。与xpath类似, 对应于 // 中的 对应于 / for in 可以嵌套和混合在 威尔。以下查询很可能不会产生任何结果,因为 可能是WOD和事件结构之间的段落和/或句子:

    $ python setup.py install
    
    2

    可以组合多个操作,所有操作共享相同的目标表达式:

    $ python setup.py install
    
    3

    也可以嵌套操作,为此使用括号,嵌套 在任何where和with语句之后发生:

    $ python setup.py install
    
    4

    尽管在这里显式指定了id,但在必要时将自动生成id,并且未指定。

    add 操作有两个类似项: append prepend 。 它们不是在目标表达式的作用域中添加某些内容,而是附加 或者在元素前面加上前缀,这样插入的元素将是同级元素:

    $ python setup.py install
    
    5

    上面的查询在每一个确定的项目后都添加/插入"house"一词。

    文本

    我们之前的例子主要集中在词性标注上。在这 我们将查看文本内容,在folia中它也是一个注释元素。 (t)

    在这里,我们更改单词的文本:

    $ python setup.py install
    
    6

    在这里,我们编辑或添加(回想一下,当没有找到时,编辑会返回到add 没有进一步的选择器)引理并检查文本内容:

    $ python setup.py install
    
    7

    可以在所有元素上使用where文本,它将同时包含显式文本 内容以及隐式文本内容,即从子元素推断的内容。如果 你想表现得非常明确,你可以做到:

    $ python setup.py install
    
    8

    高级

    当使用自定义类(如 ocred或其他预标准化文本。请考虑以下OCR更正:

    $ python setup.py install
    
    9

    查询响应

    我们已经演示了如何进行查询,但还没有说明如何响应 返回。这是使用 return 关键字进行调节的:

    • 返回焦点 (默认值)
    • 返回父级 -返回焦点的父级
    • 返回目标 返回内部目标
    • 返回外部目标
    • 返回祖先目标

    默认的焦点模式只是返回焦点。然而,有时你可能想要 更多上下文,可能需要返回目标表达式。在 下面的示例只返回pos标记不会很有趣,您可以 最有可能对它所适用的单词感兴趣:

    $ foliadocserve -d /path/to/document/root
    
    0

    当存在嵌套for/in循环时,可以指定是否要返回 内部(最高粒度,默认值)或外部(最宽范围)。 您还可以决定返回 (外部)目标,与 范围结合使用时可能特别有用 关键词:

    返回类型可以使用 格式设置

      < DL>
      格式化xml -返回folia xml,响应包含在一个简单的
      <;结果>;<;结果/>;<;结果>; 结构。
      < DL>
      格式化单个XML -如上所述,但返回纯未包装的叶XML和
      因此,仅当响应仅包含一个元素时才起作用。一个错误 否则将被提出。
    • 格式化json -返回json列表
    • 格式化单个json 与上面一样,但返回单个元素而不是 清单。如果响应包含多个,则会引发错误。
    • 格式化python -返回python对象,仅当 不使用文档服务器直接查询fql库
    • < DL>
      格式化平面 -返回为平面优化的解析格式。这是一个json回复
      包含结构元素(关键html)的html框架,解析的注释 (关键注释)。如果查询返回一个完整的folia文档,那么json对象将包括解析的set定义(key 设置定义)和声明。

    在 哪种情况适用于所有后续查询。同样适用于 格式 语句,但如果不同的格式 在同一个http请求中请求。

    当在 目标中返回上下文时 request 关键字返回的元素类型,它 获取folia xml元素的名称。它可以单独使用,因此适用 所有后续查询:

    $ foliadocserve -d /path/to/document/root
    
    1

    。或在查询之后:

    $ foliadocserve -d /path/to/document/root
    
    2

    请求的两个特殊用途是 全部请求(默认)和 请求 无 ,后者与 添加 编辑 删除 ,默认情况下,它将返回文档的更新状态。

    请注意,如果您设置的请求错误,您很快就会得到空结果。

    span注释

    选择范围批注与标记批注相同。你可能知道 在folia-SPAN中,注释元素在技术上存储在一个单独的 隔离层,但是在编写fql查询时可以忘记这个事实,并且可以 从应用于它们的元素中直接访问它们。

    以下查询选择所有命名实体(实际的而不是 虚构的集合,用于更改)具有john:

    $ foliadocserve -d /path/to/document/root
    
    3

    或者考虑选择包含 字库:

    $ foliadocserve -d /path/to/document/root
    
    4

    注意,如果此处使用了 span 关键字,则选择将是 仅限于单个单词"john":

    $ foliadocserve -d /path/to/document/root
    
    5

    我们可以使用该结构来选择所有名为john doe的人,例如:

    $ foliadocserve -d /path/to/document/root
    
    6

    像语法单元这样的跨度注释通常是嵌套树,一个树查询 例如"//pp/np/adj"可以表示如下。回想一下 中的 语句开始的目标表达式类似于for,但对 层次结构,这正是我们想要的:

    $ foliadocserve -d /path/to/document/root
    
    7

    在这种情况下,我们可能最感兴趣的是获得完整的p p:

    $ foliadocserve -d /path/to/document/root
    
    8

    编辑操作不限于编辑属性,有时 要更改跨度的元素。单独的 respan 关键字(不带 for/in/with)实现了这一点。它接受关键字respan 与用于span 目标表达式的 相同,并表示 span,普通目标表达式表示旧作用域:

    $ foliadocserve -d /path/to/document/root
    
    9

    一起使用的语句也可以使用,它们总是在

    之前
    DEFAULTSET entity https://raw.githubusercontent.com/proycon/folia/master/setdefinitions/namedentitycorrection.foliaset.xml
    
    0

    更正和备选方案

    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/root
    
    0

    这说明通常有多种方法可以获得相同的 结果集。由于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.3
    
    0

    标记 属性映射到folia pos 类型。单词映射到 folia/fql 文本 ,任何其他属性都将取消映射,因此您只需使用 CQL中的叶名称,包括任何跨度注释。

    如果一个类型有多个集合可用,请确保使用 defaultset fql关键字设置默认值,否则查询将失败,因为cql不知道 叶集范式。

    cql语言记录在这里: http://www.sketchengine.co.uk/documentation/wiki/ske/corpusquising 。 尚未支持提到的高级操作员。

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


    热门话题
    java FloatingAction按钮与RecyclerView中的CardView重叠   java如何计算CardLayout中的卡数   从远程系统上传MySQL数据库并访问Java应用程序   java调用堆栈如何处理带或不带返回类型的递归?   Springboot中的java组计数聚集   java如何在javafx textarea中使用richtextfx   获取与Mockito相关的错误时出现Java问题   java如何将JaxRS响应转换为Wiremock响应   Hadoop集群java。net ConnectionException:连接被拒绝错误   java如何加载文件私有文件类型是pem   java在元空间中的提升和加载的类   如何将系统属性传递给从HTML启动的Java小程序   java如何从网页中获取值并在主类中使用它?安卓应用   java在春天,advisor和aspect之间有什么区别?   java如何检测文件是否已重命名?   java消息驱动Bean何时使用