你能建议一些轻量级模糊文本搜索库吗?
我想要做的是允许用户使用拼写错误找到搜索字词的正确数据。
我可以使用像Lucene这样的全文搜索引擎,但我认为这样做太过分了。
修改
为了使问题更清楚,这是该库的主要方案:
我有一个很大的字符串列表。我希望能够在此列表中搜索(类似于MSVS的intellisense),但应该可以按字符串过滤此列表,该字符串不在其中但与列表中的某个字符串足够接近。
示例:
当我在文本框中输入'Gren'或'Geen'时,我希望在结果集中看到'Green'。
索引数据的主要语言是英语。
我认为Lucene对于这项任务非常重要。
更新:
我找到了一个符合我要求的产品。这是ShuffleText 你知道其他选择吗?
答案 0 :(得分:3)
Lucene具有很高的可扩展性 - 这意味着它对小应用程序也有好处。如果您需要的话,可以非常快速地在内存中创建索引。
对于模糊搜索,您确实需要确定要使用的算法。通过信息检索,我成功地使用了n-gram技术和Lucene。但这是一种特殊的索引技术,而不是“库”本身。
如果不了解您的应用程序,推荐合适的库并不容易。你在搜索多少数据?数据的格式是什么?数据的更新频率是多少?
答案 1 :(得分:2)
我不确定Lucene是否适合模糊搜索,自定义库是更好的选择。例如,这个搜索是用Java完成的,并且运行得非常快,但它是为这样的任务定制的: http://www.softcorporation.com/products/people/
答案 2 :(得分:1)
Soundex的编码非常'英语' - Daitch-Mokotoff对许多名字都有效,尤其是欧洲(日耳曼语)和犹太名字。在我以英国为中心的世界里,这就是我的用途。
Wiki here。
答案 3 :(得分:1)
如果您可以选择使用数据库,我建议您使用PostgreSQL及其fuzzy string matching functions。
如果您可以使用Ruby,我建议您查看amatch library。
答案 4 :(得分:1)
您没有指定您的开发平台,但如果它的PHP建议您查看ZEND Lucene lubrary:
http://ifacethoughts.net/2008/02/07/zend-brings-lucene-to-php/ http://framework.zend.com/manual/en/zend.search.lucene.html
因为LAMP在Java上比Lucene轻得多,并且可以很容易地扩展到其他文件类型,只要你能找到转换库或cmd行转换器 - 有很多OSS解决方案可以做到这一点。
答案 5 :(得分:1)
尝试使用基于Lucene API的Walnutil - 集成到SQL Server和Oracle DB。您可以创建任何类型的索引,然后使用它。对于简单搜索,您可以使用walnutilsoft中的一些方法,对于更复杂的搜索案例,您可以使用Lucene API。请参阅基于Web的示例,其中使用了从Walnutil Tools创建的索引。您还可以看到一些用Java和C#编写的代码示例,您可以使用它来创建不同类型的搜索。 这个工具是免费的。 http://www.walnutilsoft.com/
答案 6 :(得分:0)
@aku - 链接到工作soundex库就在页面底部。
至于Levenshtein距离,Wikipedia article on that也有底部列出的实现。
答案 7 :(得分:0)
答案 8 :(得分:0)
检查此链接。它使用levenshtein距离指标但速度更快。 http://narenonit.blogspot.com/2012/07/fuzzy-matching-autocomplete-library.html