2 个版本
0.0.1 | 2024 年 7 月 12 日 |
---|---|
0.0.0 | 2024 年 7 月 11 日 |
#44 in #natural
60KB
1K SLoC
自然语言语法高亮
自然-语法-LS 是一个语言服务器,它在纯文本中突出显示不同的词性(POS)。
安装
-
根据 Rust-BERT 文档下载 v2.1 版本的
libtorch
。提示。
您可以在 tch-rs 的构建脚本中找到下载
libtorch
的 URL (请参阅 tch-rs 的构建脚本)。变量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
,但您也可以为任何其他文件类型启用自然语法-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语法高亮。
依赖项
~43MB
~737K SLoC