找到了,看了下crow这个默认的还是使用google翻译引擎。能不能做一个可配置项?我试了下好像只有lingva这个引擎是可以用的,其他好像都用不了了。 谢谢;
大佬,提个 pr 更新一下?
render buffer 的时候会自动启动。
词组确实是不支持,并且由于分词的问题,wake-up 这种用连接在一起的单词也不行。渲染前,会先把这个buffer 分词。
这个可以有。
哈哈是 @tangxinfa 大佬的代码,你喊他提一下PR。
另外不知道 @tangxinfa 能不能顺便把 font-lock-comment/keyword-face 做成 defface,允许自定义。
大佬,提个pr吧?
@ginqi7 关于这条 (左为生词本,右为 buffer),我不是很理解,为啥hospital 已经在熟词本了,它还会被显示一遍。难道本体是hospita 而不是hospital?
补充:我开启的是透析模式。
直接再运行命令添加一次数熟词本。
stemmer 算法并不是正确的还原一个单词。而是利用一个既定的算法,提取单词的“主干”,因此 stemmer 的结果并不一定是一个单词。
嗯嗯,感谢解答!
我之前的做法是从导入了一个四六级单词库8000词,以为这些词不会再被显示了,但结果是很多简单词一直被显示,我就很疑惑是不是我哪儿出错了。
看来还是要使用你的方法作为起点了:先使用生词本,然后连续使用mark-buffer-known 一段时间,再开启透析模式。
更新:重新建立了空白的 knownwords.txt 和 unknownwords.txt,mark词之后,确实不一定是词。
我看看,多谢提醒。
更新1:@ginqi7 我看了一下,没头绪。请教一下我现在手头有8千词汇 knownwords.txt, 应该怎么用snowballstemmer 处理?
更新2:
import snowballstemmer
stemmer = snowballstemmer.stemmer('english');
print(stemmer.stemWords("We are the world".split()));
不知道怎么把"We are the world"
替代成 ~/.config/.emacs.d/dictionary-overlay-data/knownwords.txt
里的内容
更新3: 解决一半。
import snowballstemmer
f = open("/Users/z/Dropbox/Apps/Emacs/dictionary-overlay-data/unknownwords.txt")
stemmer = snowballstemmer.stemmer('english');
print(stemmer.stemWords(f.read().split()));
得到结果, 不过还得个整成大佬库里一行一行且没有标点符号的样式。继续学习。
['patriot', 'fit', 'palat', 'partisan', 'cultiv', 'fit', 'decri', 'caricatur', 'disson', 'indoctrin', 'grumpi', 'affluent', 'overrun', 'infus', 'anthem', 'vitriol', 'bust', 'tyranni', 'shambol', 'mantra', 'shambol', 'indoctrin', 'vacat', 'recoil', 'grumpi', 'fallout', 'disson', 'jargon', 'treason']
按照大佬说的,进行一些修改。
把“单词”和“解释”区分开了。分别控制。
并设定了两个face dictionary-overlay-unknownword
和 dictionary-overlay-translation
用户自己定义。
并且翻译的格式,也提供了变量:dictionary-overlay-translation-format
用户也可以自己控制。
face dictionary-overlay-unknownword
如果用户不自行定义,那么不会给单词加上overlay, 只会新增翻译的 overlay. 这样的好处是,当你在单词上移动时,仍旧按照字母移动,而不是按照overlay 移动。
大佬有时间的话,麻烦看看这样是否合理。代码是否需要修正。
应该不是,同时查了其他词没有弹出这个提示
我再观察下
刚才又遇到一例(也是同时标其他没问题)
Error (websocket): in callback `on-message': could not parse JSON stream: "invalid token near ''", "<string>", 1, 1, 1 Disable showing Disable logging
今天更新了最新版本的dictionary-overlay和websocket-bridge,每次运行mark-word-unknown时,都报错:[WebsocketBridge] Application dictionary-overlay has exited. Message buffer里没有更多的信息了。昨天的版本还可以正常运行,是不是更新啥出错了? 我的环境:emacs 29.0.50@win10;python 3.9
应该是 dictionary-overlay 没有启动。之前的版本 mark-word-unknown 会自动启动。后来因为这样会有干扰。
需要提前运行 dictionary-overlay-start
你可以把 (dictionary-overlay-start) 启动放到配置文件中,随加载启动。
新增了一个分支,crow 支持切换引擎。
你可以通过变量设置不同的引擎:
(setq dictionary-overlay-crow-engine "google")
由于我是 mac 平台没法测试 crow,你如果试用可行的话,我就合并到主干。
(defun dictionary-add-overlay-from (begin end source target)
"Add a overlay with range BEGIN to END for the translation SOURCE to TARGET."
(let ((ov (make-overlay begin end)))
;; (overlay-put ov 'display source)
(overlay-put ov 'face 'dictionary-overlay-unknownword))
(let ((ov (make-overlay end (+ end 1))))
(overlay-put ov 'display (concat (format dictionary-overlay-translation-format target) (string (char-after end))))
(overlay-put ov 'face 'dictionary-overlay-translation)))
只要不给source 加 display
的property, 就不会影响移动性,如下图。大佬测试一下。