新人报到,写了个中文词性高亮的小功能,请各位前辈批评

总感觉此时应该呼叫 @Nasy

啊?什么??

汉语词性,句法,句读啥的。。脑内聚类收敛到你这了 :thinking:

确实如此qwq 我也简单了解了一些简繁在这个领域的影响,发现不同的NLP工具对简繁的分析准确率是不一样的。我准备让cnhl支持多种NLP后端,比如百度lac等,现在已经在做啦ww

目前基本功能的重写已经过半,仅剩timer部分和贴overlay部分还未完工~

肯定是这样啦,人自己还弄不明白呢。不过我们到底还是要这样去做的~

其实我认为这个应用复杂度是不是过高了,其实按照我的阅读习惯,我更加倾向于把文字设定为标题的颜色,就像这样

这样也就不需要分词了,而且可以保证阅读的流畅性与连贯性

:grin:

“好的发明源自于开发者的个人需要”

2 个赞

我已经安装了 thulac 并且在 Emacs 加载了cnhl.el

没有添加其他关于 cnhl.el 的配置

当我在 org 文件时,使用 cnhl cnhl-buffer 进行高亮时无效

其他函数似乎有效,例如cnhl绑定的按键 M-f 之类的函数
怎么解决?
操作系统:Android-Termux

很抱歉,由于我当初水平有限,目前发布的cnhl-buffer函数处于无效状态……当新版cnhl重写完毕后我会及时通知你!

目前新cnhl的第一版预计能在一周内完成ww

谢谢你,祝你未来高考成功🤓

1 个赞

有个问题想请教一下各位前辈,是关于按词操作的。

Emacs许多按词操作函数都是以forward-word函数为核心的,我想用advice around一下forward-word函数,来让这些函数支持中文按词操作。但有一个小问题,在我advice了forward-word原函数后,其它按词操作函数必须重新eval一遍才能生效(其实我大概能猜出原因……)

我目前能想到的方法是用find-function函数找到simple.el.gz,也就是定义这些按词操作函数的文件,然后eval-buffer……requireload都不管用……但我不知道这样合不合适,有没有更好的方法,会不会出什么问题。

我发现可以(load "simple.el.gz"),但我同样不知道会不会有什么问题qwq……

如果这么做不行我就把它们挨个贴上advice quq


目前进度的话,高亮部分已经基本完工了,包括全buffer高亮的功能,剩下的就是找茬了。按词操作和一些我想要的有趣功能还在开发。

因为用了新的实现思路,以及能力的进步吧,代码比以前干净很多,总算有点elisp该有的样子了哈哈

代码是用半文学编程方式写的,欢迎来这里围观XD


另外,目前cnhl使用的是c++版THULAC,速度比python版快很多,加载模型的时候也几乎没有卡顿。不过一个缺点就是需要大家自己去thulac官网下载模型

它这个模型下载……怎么说呢,确实是有点小坑。所以我在考虑要不要同时支持python版的,通过C引用python。这样就可以用pip自动下载了。

如果大家觉得有必要,我就在c++版做完后试试。


等当前的THULAC版完工后,下一步我打算让cnhl支持这个NLP工具:fastHan,好像是脱胎于复旦大学的一个项目,主要是看它兼具词法分析和句法分析功能,还支持模型微调,岂不美哉 :partying_face: 大家觉得怎么样?

1 个赞

我主要的工作是文本处理。在调试 Emacs 的过程中,感觉以 s-expression 来跳转非常方便。而对于一般性文章,目前的跳转都是基于一个单词,一个句子, 或者一个段落。而平时在写东西的时候,特别是修改文章的时候,主要是在更精细的层面上,也就是主谓宾之间跳转。英文社区有一个 wordsmith-mode ,可惜没有语 法层面的跳转,所以非常期待楼主的作品。

1 个赞

谢谢!THULAC版现已完工,但由于THULAC只是词法分析工具,所以目前只能按照词性进行词语跳转。等我做出fastHan后端后就可以实现主谓宾跳转啦!

1 个赞

手动点个赞!字数补丁!

Cnhl重写版发布啦!! :partying_face:

(碎碎念:其实本来周日晚上就写好了,bug各种修修修加上安装教程啊导出设置啊演示gif啊什么的竟然整整拖了三天,都快赶上我写主要功能的时间了……发布的东西和自用的就是不一样,各种极限测试和容错都得考虑,这回可算狠狠锻炼了一把2333)

现有功能:

  • 中文词法高亮,可随输入实时进行高亮,或手动高亮整句、整段、整个buffer,也可以使用函数指定从哪里高亮到哪里。
  • 中文按词操作,不仅有基本的按词移动、删除等,甚至连count-words时的词数统计都可以统计中文词数。准确来说,所有以forward-word为核心的按词操作函数都被覆盖在内。

相比前一版的改进:

  • 功能上,bug基本没有,某些情况下的报错也是因为我没有做拦截(总感觉因为一些不常发生的错误而在核心代码上套一层的话对cpu很不温柔的样子……)。

@ISouthRain 同学提到的高亮全buffer问题和 @K-gihu 同学提到的光标移动问题已经搞定了,换用新的逻辑后这些问题变得好解决了很多;

另外 @K-gihu 提到的Invalid face reference也解决了——这个问题是这样的,当使用make-overlay函数建立一个overlay,并且没有把它赋值给一个变量的话,下次每当页面滚动时屏幕显示出的部分中有它就会报一个这种错误。解决方法也很简单,给每种颜色建一个overlay存起来,下次要用到这个色的时候copy-overlay复制一个过去就行了,这样的overlay就不会报错。我是参考的org-mode对agenda buffer高亮的方法,不知道什么原理哈哈哈哈。看坛里过去好像也有过对这个问题的讨论,我觉得是不是有必要分享分享qwq

  • 重写后的代码从原先的四百多行砍到了三百五十多行,逻辑也清晰了,没有那么多妥协的地方,效率肯定会高很多,开心 :laughing:
  • 通过dynamic module调用c++版thulac后端,各个方面都好太多了:加载模型的速度快了,分词速度快了,comint的那种八百字一断的问题也没了……也很开心 :partying_face: 果然人还是得学点C哈哈
  • cnhl终于是一个minor mode啦 :rofl:
  • cnhl是用半文学编程的形式重写的,相对比较利于大家理解;我把源码和半交互式的安装步骤都嵌到了README里,也比较便于dynamic module的编译安装,算是比较新颖吧。如果大家不喜欢,我就还是按照传统的方法来。

(目前的安装方式还不能完全用在Windows上,因为不是所有人都有gcc/clang……有哪位前辈知道该怎么做还望指点qwq)

目前的缺点:

  • cnhl使用c++版THULAC,需要手动下载算法模型,但是从这里下载需要提交一些信息。如果大家不喜欢我想我要不要发一份出来……python的thulac是自动下载这个的,用过上一版的同学可以直接拷过来~

另外,重写版的cnhl还缺乏实践的检验,还请各位前辈多多指导,任何问题和想法都可以指出来!有期望增加的功能也可以和我说!

接下来我会着手开发fastHan后端,实现 @p1uxtar@emacs_ran 前辈提到的主谓宾高亮及移动,争取一周内完成。不过这些天学校活动和考试都压上来了,加上过敏,局势堪忧qwq……

谢谢大家的鼓励和陪伴ww

7 个赞

windows用户不使用MSYS的编译安装方法:

  1. 从GitHub上把THULAC仓库下到准备安装的目录里;
  2. 确保emacs-module.h在PATH中,如果不在,可以把它拷进THULAC\include里去 :rofl:
  3. 抓一只mingw-w64过来,其它编译器应该也行~
  4. 如果用mingw的gcc,编译必须在shell中进行,否则会报找不到链接文件的bug。可以下一个busybox for windows,用里面的shell
  5. 把最终结果的cnhl-thulac.so改成cnhl-thulac.dll

抽空好好写写安装方式,最近研究了下如何打造有Windows特色的Windows操作系统,奇怪的知识增加了不少 :rofl:

1 个赞

(与主题无关) 实在佩服楼主作为高中生已有如此心性和见识. 不禁让我想起课题组里的几位本科学弟 (理工科), 拥有无与伦比热情的同时极具执行力, 文理兼修, 热衷于表达但又谦虚礼貌. 向你们学习, 祝好!

3 个赞

衷心感谢你的鼓励!我会继续努力的,同祝好 :smiling_face_with_three_hearts:

作为一个每次语文考试必在语法题上栽跟头的小傻瓜,我在给cnhl做句法分析的时候遭到了降维打击 :sob: 于是去请教我语文老师,没想到语文老师一脸惊喜说:“啊我大学就是干这个的”,然后指着我的代码开始滔滔如流水 :rofl:……

请珍惜人生路上的每个语文老师 :rofl:

所以我又成功放了一周的鸽子2333 这两天学校任务比较重,我争做时间管理大师,尽快把cnhl的下一步早点完工qwq

3 个赞