- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我不是在询问实现拼写检查算法本身。我有一个包含数十万条记录的数据库。我想要做的是针对所有这些记录检查表中特定列的用户输入,并返回具有特定汉明距离的任何匹配项(同样,这个问题与确定汉明距离等无关)。当然,目的是创建一个“您是不是要找”功能,用户可以在其中搜索姓名,如果在数据库中未找到直接匹配项,则返回可能匹配项的列表。
我正在尝试想出一种方法,以尽可能在最合理的运行时执行所有这些检查。我如何才能以最有效的方式检查用户的输入是否符合所有这些记录?
该功能目前已实现,但运行时非常慢。它现在的工作方式是将用户指定的一个(或多个)表中的所有记录加载到内存,然后执行检查。
为了它的值(value),我使用 NHibernate 进行数据访问。
对于我如何执行此操作或我有哪些选择的任何反馈,我将不胜感激。
最佳答案
计算 Levenshtein 距离并不一定像您想象的那么昂贵。 Norvig article中的代码可以将其视为帮助读者理解算法的伪代码。一个更有效的实现(在我的例子中,在 20,000 个术语数据集上快大约 300 倍)是走 trie .性能差异主要归因于消除了为进行字典查找而分配数百万个字符串的需要,在 GC 中花费的时间大大减少,并且您还获得了更好的引用位置,从而减少了 CPU 缓存未命中。通过这种方法,我可以在 2 毫秒左右的时间内在我的 Web 服务器上进行查找。一个额外的好处是能够轻松返回以提供的字符串开头的所有结果。
缺点是创建 trie 很慢(可能需要一秒钟左右),因此如果源数据定期更改,那么您需要决定是重建整个事物还是应用增量。无论如何,您希望在构建后尽可能多地重用该结构。
关于c# - 创建一个 "spell check"以合理的运行时间检查数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4833769/
当我想在谷歌中搜索一个词或一些东西时;如果该单词或句子中有拼写错误,谷歌可以用正确的拼写或更正的句子回复我。谁能解释一下这是如何完成的。如果有人能用编程而不是数据库和所有这些东西来解释,我会很高兴。谢
我注意到如果我在 Google 搜索栏中打错了字,很可能会为我改正。 比如,如果我输入“不可思议”,它会提示“不可思议”,或者对于“stackovflow”,它会是“stackoverflow”。 这
可用于对整个源代码库及其相关资源文件进行拼写检查的工具或技术是什么? 拼写检查应该是源代码感知的,这意味着它会坚持检查代码中的字符串文字,而不是代码本身。如果拼写检查器理解常见的资源文件格式,例如包含
我知道拼写检查器并不完美,但随着文本数量的增加,它们变得越来越有用。如何拼写检查一个有数千页的网站? 编辑:由于复杂的服务器端处理,我可以通过 HTTP 获取页面的唯一方法。也不能外包给第三方。 编辑
我编写了一个快速概念验证控制台应用程序来测试 AzureSpell 认知服务产品的功能,但它似乎并不经常检测到明显的拼写错误。 通过其他 SO 答案尝试推荐,我的成功有限。 即使使用位于 https:
我如何在搜索引擎中创建像 Google 的“您的意思是……”这样的单词建议系统? 最好使用向量空间模型方法。我用谷歌搜索但没有找到解决方案。 最佳答案 看看the example来自 Peter No
我相信你们中有不少人看过 Google Wave 演示。我特别想知道拼写检查技术。拼写检查器通过找出单词在句子中上下文中出现的位置来提出这些建议,这是多么具有革命性? 我以前没见过这种技术,但其他地方
这是在一次采访中被问到的。 我认为答案可以通过构建所有有效单词的 trie 来完成,然后可以根据可能的有效路径提出建议,否则会被认为是不正确的。 假设用户输入 apfle,系统会在 ap 之后检测到一
我想写一个非常简单的拼写检查器。拼写检查器将尝试将输入的单词与字典中的等效单词进行匹配。 怎样才能找到那些“等价词”?可以对两个词进行什么分析来标记它们是等价的? 最佳答案 在投入太多尝试解开之前,我
我正在尝试使用 Stanford NLP 检查文本示例的拼写准确性。它只是文本的度量,而不是过滤器或其他任何东西,所以如果它稍微偏离一点也没关系,只要错误是统一的。 我的第一个想法是检查词典是否知道该
我正在尝试使用 seqdef 创建一个序列对象使用 SPELL 格式。这是我的数据示例: spell ] time axis: 1 -> 125 [>] SPELL data converted i
ASpell 有什么好的替代品吗?它是不错的开源软件,但已经有一段时间没有更新了。性能不太好,我无法使用非字母字符创建自定义工作列表。 最佳答案 Hunspell .这就是 Firefox 用于其拼写
vim 拼写检查器中是否有任何选项可以忽略纯文本文件中包含下划线、多个大写字母、减号、数字的单词。我在手册 (7.2) 或 Google 搜索中找不到任何内容。 最佳答案 您可以使用 syntax命令
如果我在Elasticsearch中有一个文档,其中一个字段包含术语“十”,那么是否有分析器/ token 生成器在搜索“10”或“十”时允许匹配该文档? 最佳答案 我不相信,不。我相信this qu
我已经安装了 eclipse ,并安装了 pydev 软件当我想改变字符时,我发现拼写服务没有安装。 不知道要启用这个服务,好像是默认设置 如何启用此服务 eclipse 版本:Neon Releas
我正在尝试使用 Hunspell纠正我写的一篇文章。不幸的是,它对我没用,只要它不打印拼错单词的行号。 所以现在我正在使用 -a选项,以便能够将其通过管道传输到 hunspell命令。手册页说,-L选
我试过用 Hunspell 浏览 SourceForge 上的文档,但我仍然迷路了。是否有 C++ 初学者能够遵循的 hunspell 的体面示例?否则,是否有任何更易于使用的免费/开源拼写检查器?
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
感谢 this answer on Code Review,我最近发现了拼写选项,而且我觉得该选项既非常有用(在编辑时)又非常烦人(在阅读代码时,因为所有误报)。 我想在切换到插入模式时以某种方式自动
我想自己编写 Metaphone 3 算法。有说明吗?我知道源代码可以出售,但这不是我要找的。 最佳答案 @Bo 的链接现在是指(现在是 deucnt)项目的整个源代码。 因此这里是新的链接,直接链接
我是一名优秀的程序员,十分优秀!