3 个版本
0.0.2 | 2024年7月12日 |
---|---|
0.0.1 | 2024年7月11日 |
0.0.0 | 2024年7月8日 |
#425 在 文本处理
在 natural_syntax_ls 中使用
18KB
231 行
自然语言语法高亮
Natural-Syntax-LS 是一个语言服务器,可以在纯文本中高亮显示不同的词性(POS)。
安装
-
按照 Rust-BERT 的文档 下载 v2.1 版本的
libtorch
。提示。
您可以在 tch-rs 的构建脚本中找到下载
libtorch
的 URL (请参阅以下链接)。变量LIBTORCH
应为torch/
目录。为什么自动安装不工作。
Rust-BERT 具有使用 tch-rs 的构建脚本来下载
libtorch
的 "自动安装" 选项。然而,这种方式生成的二进制文件无法运行,因为该libtorch
不在LD_LIBRARY_PATH
上。或者,您也可以静态链接libtorch
,但这仍然需要您自己下载libtorch
(请参阅以下链接)。 -
使用 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
中的TokenType
和TokenModifier
的变体,所有均为驼峰命名。
- 默认映射位于
❓ 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