Language agnostic 文本中单词的自动拼写检查

Language agnostic 文本中单词的自动拼写检查,language-agnostic,text-editor,puzzle,spell-checking,text-processing,Language Agnostic,Text Editor,Puzzle,Spell Checking,Text Processing,[编辑]简而言之:您将如何编写自动拼写检查器?其思想是,检查器从一个已知的好词源(字典)中建立一个单词列表,并在使用足够频繁时自动添加新词。已经有一段时间没用过的词应该逐步淘汰。因此,如果我删除了一个场景中包含Mungrohyperiofier的部分,检查器应该记住它一段时间,当我在另一个场景中键入Mung时,它应该再次提供它。如果我不使用这个词,比如说,几天,它应该忘记它 同时,我希望避免在字典中添加拼写错误。[/EDIT] 我想为科幻小说写一个文本编辑器。编辑应该为当前故事中任何地方使用的任

[编辑]简而言之:您将如何编写自动拼写检查器?其思想是,检查器从一个已知的好词源(字典)中建立一个单词列表,并在使用足够频繁时自动添加新词。已经有一段时间没用过的词应该逐步淘汰。因此,如果我删除了一个场景中包含Mungrohyperiofier的部分,检查器应该记住它一段时间,当我在另一个场景中键入Mung时,它应该再次提供它。如果我不使用这个词,比如说,几天,它应该忘记它

同时,我希望避免在字典中添加拼写错误。[/EDIT]

我想为科幻小说写一个文本编辑器。编辑应该为当前故事中任何地方使用的任何单词提供单词补全。它只提供故事的一个场景供编辑,因此您可以轻松地移动场景

这意味着我有三套:

所有其他场景中所有单词的集合 在我开始编辑它之前,当前场景中的单词集 当前编辑器中的单词集 我需要将集合存储在某个地方,因为每次从头开始创建列表都太贵了。我认为一个简单的纯文本文件,每行一个单词就足够了

当用户编辑场景时,我们会遇到以下情况:

她删除了一个单词。在当前场景中,此词不在其他任何位置使用。 她键入一个新单词 她输入了一个已经存在的单词 她输入了一个已经存在的单词,但打错了 她纠正了第二组单词中的一个拼写错误。 她纠正了第1组单词中的拼写错误,即拼写错误也在其他地方。 她删除了一个她打算再次使用的单词。但是,删除后,单词不再出现在集合1和集合3中。 显而易见的策略是在保存场景时重建单词集,并根据每个场景的单词列表文件构建集合1

所以我的问题是:有没有一个聪明的策略来保留那些不再在任何地方使用但仍能逐步淘汰打字错误的单词?如果可能,此策略应在后台工作,用户甚至不会注意到正在发生的事情,即我希望避免必须抓住鼠标从菜单中选择“将单词添加到词典”


[编辑]根据

的评论,您应该使用的结构是trie。尾部/后缀压缩将有助于记忆。您可以使用伪引用计数GC来跟踪使用情况


对于实际节点,您可能只需要一个32位整数,unicode需要21位,其余的用于各种其他标记和信息。

让我想起了现代LISP实现中关于垃圾收集的内容:

创建时,数据将放入池1中

当需要进行垃圾收集时,垃圾收集器在池1中查找未使用的条目并将其删除

然后,所有剩余条目都被移动到池2

只有当需要的内存超过池1可以释放的内存时,才会检查池2

来自池2的、在垃圾收集中幸存的数据被放入池3中,然后。。。等等


其思想是动态地将数据放入与其生命周期相对应的池中…

因此您需要编写一个拼写检查器。给你。它描述了一个简单而健壮的拼写校正器。你可以使用书中已经写好的部分,再加上一个参考列表,比如说从一本免费字典中获取的语言模型。
我也会去现有的开源拼写检查工具,如和,了解一些想法。

这是一个很好的答案,如何存储信息,但如何逐步淘汰拼写错误?我不确定如何有效地合并每个场景的尝试以获得场景1。我可能也不想在每次按键时都建立这种结构。如果你多做一点,把拼写检查添加到你的功能列表中,你也可以缓解打字错误。Aaron,我试着思考这个问题,但我感到困惑。在案例6中,您预计会发生什么?如果有人写迈克尔和亚历克斯在迈克尔生日那天相遇,他们编辑了迈克尔的第二本书,会发生什么?如果他们把它编辑成Alex会发生什么?你怎么区分呢?有没有办法避免把拼写错误移到下一个池?事实上,我想要一个在后台自动工作的拼写检查器。拼写检查是一个繁琐且容易出错的过程。你必须全神贯注,在一个拼写错误被提交到dict之后,它就永远存在了。我梦想着一个社区拼写检查器,在那里,代码试图通过一些启发来判断一个单词是否可能是正确的。那篇论文非常好,谢谢!我看过aspell,但代码非常。。。aspell代码确实很复杂,花了大约一个月的时间试图理解其中的部分内容。祝你好运