Node.js或C(不包括全文search)的大小写不敏感,确切的子string匹配/索引
哪些库在Node.js中提供大小写不敏感的确切子string匹配,以及大量的string? 我正在寻找基于索引的解决scheme。
举一个例子,考虑一个语料库包含数百万个string:
"Abc Gef gHi"
-
"Def Ghi xYz"
- …
我需要一个库,以便search"C ge"
返回上面的第一个string,但search"C ge"
(注意多个空格)不会。 换句话说,我并不是在寻找模糊的,智能的,全文search的词干和停词; 而是一个最简单的(和快速的)准确的子串匹配器,其索引大规模工作。
JavaScript中的解决scheme是受欢迎的,C中的解决scheme也是如此 (因为它们可以变成本地的Node.js模块)。 另外, 其他编程语言(如Java)的解决scheme也是可能的 ; 他们可以通过命令行使用。 优选地,解决scheme是磁盘空间限制的而不是内存限制的(例如,而不是Redis),并且它们应该向磁盘写入索引,以便后续的启动时间很短。
我发现的大部分解决scheme(如这里的问题 )的问题是,它们太聪明了。 也就是说,他们应用不同的词干或标准化,所以比赛是不准确的。
在此先感谢您的帮助!
我会列出一些我find的解决scheme。
最简单的,但拟合将是https://github.com/martijnversluis/JsSuffixTrie
然后,更详细的哈希基于: https : //github.com/fergiemcdowall/search-index
我也可以build议http://redis.io/ 。 这是先进的,但还是相当低级的。 没有太多花哨的包装。
最后,这个博客文章讨论尝试在JavaScript中,问题似乎是主要加载时间: http : //ejohn.org/blog/javascript-trie-performance-analysis/
在我头上我可以想到两个可能的解决scheme。
一个是使用不区分大小写的正则expression式(使您search的string(例如"C ge"
)是正则expression式)匹配。
另一种方法是存储所有string的全部较低(或较高)的大小写副本,并在返回未修改的string时将其用于search。 当然,searchstring需要全部更低(或更高)的情况下才能正常工作。
这当然取决于你的数据集的大小和最小的响应时间。
对于许多用例来说,标准的Unix工具(如sed
和grep
在模式匹配方面是相当无懈可击的。