[编辑]简而言之:您如何编写自动拼写检查程序?我们的想法是,检查器根据已知的良好来源(字典)构建单词列表,并在经常使用时自动添加新单词。应该逐步取消一段时间没用过的词。因此,如果我删除包含“Mungrohyperiofier”的场景的一部分,检查器应该记住它一段时间,当我输入“Mung< Ctrl + Space>”时在另一个场景中,它应该再次提供它。如果我不使用这个词,比如说,几天,就应该忘掉它。
与此同时,我想避免在字典中添加拼写错误。[/ EDIT]
我想为SciFi故事编写一个文本编辑器。编辑器应该为当前故事中任何地方使用的任何单词提供单词完成。它只会提供一个故事场景进行编辑(这样你就可以轻松地移动场景)。
这意味着我有三套:
我需要将这些集存储在某处,因为每次从头开始构建列表的成本太高。我认为一个简单的纯文本文件,每行一个字就足够了。
当用户编辑场景时,我们遇到以下情况:
明显的策略是在保存场景时重建单词集,并从每个场景的单词列表文件构建集#1。
所以我的问题是:是否有一个聪明的策略来保留不再在任何地方使用但仍然可以逐步淘汰拼写错误的单词?如果可能的话,这个策略应该在后台运行,而用户甚至不会注意到正在发生的事情(即我想避免必须抓住鼠标从菜单中选择“向字典添加单词”)。
[编辑]根据grieve
的评论答案 0 :(得分:2)
所以你想写一个拼写检查器。这是Peter Norvig's paper about writing a spelling corrector。它描述了一个简单而强大的拼写纠正器。您可以使用本书已经编写的部分,以及语言模型的参考列表(例如,从免费字典中)。 我还会去现有的开源拼写检查器,例如aspell和hunspell,以获得一些想法。
答案 1 :(得分:0)
你应该使用的结构是一个特里。尾部/后缀压缩将有助于记忆。您可以使用伪引用计数GC来跟踪使用情况。
对于实际节点,您可能需要不超过32位整数,21位用于unicode,其余用于其他各种标签和信息。
答案 2 :(得分:0)
让我想起在现代LISP实施中我被告知垃圾收集的内容:
创建时的数据放在“池1”中,
当需要垃圾收集垃圾收集器时,在池1中查找未使用的条目并将其删除。
然后将任何剩余的条目移动到池2。
仅当需要更多内存而不是池1才能释放时,才会检查池2。
来自池2的数据在垃圾收集后仍然存在于池3中......等等。
我们的想法是将数据动态地放入与其生命周期相对应的池中......