繁体   English   中英

不区分大小写的Node.js或C的精确子字符串匹配/索引(无全文搜索)

[英]Case-insensitive, exact substring matching/index for Node.js or C (no full-text search)

哪些库在Node.js中提供了针对大型字符串的不区分大小写的精确子字符串匹配 我特别在寻找基于索引的解决方案。

例如,考虑一个包含数百万个字符串的语料库:

  • "Abc Gef gHi"
  • "Def Ghi xYz"

我需要一个库,以便搜索"C ge"返回上面的第一个字符串,但是搜索"C ge" (请注意多个空格)不会。 总而言之,我不是在寻找带有词干和停用词的模糊,智能,全文搜索; 而是最简单(且最快速)的精确子字符串匹配器,其索引可大规模运行。

欢迎使用JavaScript解决方案,也欢迎使用C解决方案 (因为它们可以变成本机Node.js模块)。 另外, 也可以使用其他编程语言(例如Java)的解决方案 可以通过命令行使用它们。 优选地,解决方案是磁盘空间绑定的,而不是内存绑定的(例如,不是Redis),并且它们应该将索引写入磁盘,以便随后的启动时间很短。

我发现的大多数解决方案(例如此处的解决方案)的问题在于它们过于智能。 即,它们应用不同类型的词干或归一化,因此匹配不精确。

在此先感谢您的帮助!

我将列出一些找到的解决方案。

最简单但最合适的方法是https://github.com/martijnversluis/JsSuffixTrie

然后,基于散列进行更详细的说明: https : //github.com/fergiemcdowall/search-index

我也可以建议http://redis.io/ 它是高级的,但仍然很底层。 没有太多的精美包装。

最后,此博客文章讨论了使用javascript的尝试,其中的问题似乎主要是加载时间: http : //ejohn.org/blog/javascript-trie-performance-analysis/

在我的头上,我可以想到两种可能的解决方案。

一种是使用不区分大小写的正则表达式(具有要搜索的字符串(例如"C ge" )为正则表达式)匹配。

另一个方法是存储所有字符串的全部小写(或大写)副本,并在返回未修改的字符串时将其用于搜索。 当然,搜索字符串必须全部小写(或大写)才能起作用。

当然,这取决于数据集的大小和最小响应时间。

在许多用例中,诸如sedgrep类的标准Unix工具在模式匹配方面是无与伦比的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM