3 个版本

0.0.2 2024年7月12日
0.0.1 2024年7月11日
0.0.0 2024年7月8日

#425文本处理


natural_syntax_ls 中使用

MIT 许可证

18KB
231

自然语言语法高亮

Natural-Syntax-LS 是一个语言服务器,可以在纯文本中高亮显示不同的词性(POS)。

安装

  1. 按照 Rust-BERT 的文档 下载 v2.1 版本的 libtorch

    提示。

    您可以在 tch-rs 的构建脚本中找到下载 libtorch 的 URL (请参阅以下链接)。变量 LIBTORCH 应为 torch/ 目录。

    为什么自动安装不工作。

    Rust-BERT 具有使用 tch-rs 的构建脚本来下载 libtorch 的 "自动安装" 选项。然而,这种方式生成的二进制文件无法运行,因为该 libtorch 不在 LD_LIBRARY_PATH 上。或者,您也可以静态链接 libtorch,但这仍然需要您自己下载 libtorch(请参阅以下链接)。

  2. 使用 Cargo 或其他工具安装 natural_syntax_ls 包以获取 natural-syntax-ls 二进制文件。

    cargo install natural_syntax_ls --default-features=false
    

    default-features 设置为 false 禁止下载 libtorch(自动安装)。

    为什么自动安装是默认设置。

    因为否则运行持续集成将会很痛苦。

编辑器设置

✅ 使用 LSPConfig 的 NeoVim 设置

请将以下 natural_syntax_ls_setup 函数粘贴到您的 Nvim 配置中,并使用客户端的 capabilities 调用它。请参阅以下链接获取示例配置 (请参阅以下链接)

natural_syntax_ls_setup 函数。
local function natural_syntax_ls_setup(capabilities)
    local lspconfig = require('lspconfig')
    require('lspconfig.configs')['natural_syntax_ls'] = {
        default_config = {
            cmd = { 'natural-syntax-ls' },
            filetypes = { 'text' },
            single_file_support = true,
        },
        docs = {
            description = [[The Natural Syntax Language Server for highlighting parts of speech.]],
        },
    }
    lspconfig['natural_syntax_ls'].setup {
        capabilities,
        init_options = {
            token_map_update = {
                -- Customize your POS-token mapping here. E.g.:
                --[[
                -- Disable coordinating conjunctions highlighting.
                CC = vim.NIL, -- `nil` does not work because it gets ignored.
                -- Highlight wh-determiners as enum members without any modifiers.
                WDT = { type = "enumMember" },
                -- Highlight determiners as read-only classes.
                DT = { type = "class", modifiers = { "readonly" } },
                ]]
            },
        },
    }
end

自定义

  • 我只为 filetypes 字段设置了 text,但您也可以为其他任何文件类型启用 natural-syntax-ls。请注意,尽管如此,语言服务器的语义标记默认会覆盖 Tree-sitter 高亮。
  • 通过在 init_options 中指定 token_map_update 字段,您可以根据需要自定义词性和语义标记之间的映射。
    • 默认映射位于 pos2token_bits 函数中,该函数在 semantic_tokens.rs
    • 词性标签是位于 lib.rs 中的 PartOfSpeech 枚举的变体。
    • 标记类型和修饰符是位于 semantic_tokens.rs 中的 TokenTypeTokenModifier 的变体,所有均为驼峰命名。

❓ Visual Studio Code 和其他编辑器设置

没有官方支持,但欢迎社区插件。

我目前不使用 VSCode 和这些其他编辑器,因此我不想为它们维护插件。

然而,由于 Natural-Syntax-LS 实现了语言服务器协议 (LSP),因此为它们实现插件应该非常简单。所以,请随时自己制作插件,并为我在此处创建一个链接的问题。

所选规范

预测调度

对于单个文档,一次只调度一个预测。当预测正在进行时,新更新被排队,最新更新将替换任何之前排队的更新。

调试

我们使用带有 env-filter 功能的 tracing-subscriber 来发出日志^tracing-env-filter。请通过设置 RUST_LOG 环境变量来配置日志级别。

在 macOS 上,您可能需要设置 DYLD_LIBRARY_PATH 以运行测试。

未来工作

  • 自定义词性和语义标记之间的映射。
  • 支持除英语以外的语言。这只需要一个新的模型。
  • 增量更新和语义标记范围。
  • 不要覆盖 Markdown/LaTeX 语法高亮。

依赖项

~26MB
~530K SLoC