查找多个字符串匹配的算法

2023-12-10

我正在寻找一种有效算法的建议,用于在大量文本中查找所有匹配项。要搜索的术语将包含在列表中,并且可以有 1000 多种可能性。搜索词可以是 1 个或多个单词。

显然,我可以多次遍历文本并与每个搜索词进行比较。效率不太高。

我考虑过对搜索词进行排序并组合常见的子分段。这样我就可以快速消除大量术语。语言是C++,我可以使用boost。

搜索词的一个示例可以是财富 500 强公司名称列表。

Ideas?


不要重新发明轮子

这个问题已经被深入研究。奇怪的是,搜索一个模式/字符串的最佳算法并不能轻易推断到多字符串匹配。

The "grep"family 以非常有效的方式实现多字符串搜索。如果您可以将它们用作外部程序,请使用它们。

如果您确实需要实现该算法,我认为最快的方法是重现 agrep 的功能(agrep 在多字符串匹配方面表现出色!)。Here是源文件和可执行文件。

And here您会找到一篇描述所用算法、理论背景以及有关字符串匹配的大量信息和指南的论文。

请注意:Knuth、Boyer、Moore、Baeza-Yates 等人对多字符串匹配进行了大量研究。如果您需要一个真正快速的算法,请毫不犹豫地站在他们宽阔的肩膀上。不要重新发明轮子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找多个字符串匹配的算法 的相关文章

  • 迭代最近点实现

    我目前正在使用以下伪代码在 C 中实现 ICP 算法 从 获取ICP 简报 http www math tau ac il dcor Graphics adv slides ICP ppt function ICP Scene Model
  • 为什么 JavaScript 字符串有两种类型?

    这简直是 狠狠地刺伤了我 我不知道是否所有浏览器都是如此 我没有任何其他有能力的浏览器可以测试 但至少 Firefox 有两种字符串对象 打开 Firebugs 控制台并尝试以下操作 gt gt gt a a gt gt gt new St
  • 如何将一串空格分隔的数字拆分为整数?

    我有一根绳子 42 0 例如 并且需要获取两个整数的数组 我可以做一个 split在一个空间上 The obvious approach to this problem is a common combination of simple t
  • 迭代格雷码更改位置的有效方法

    有多种迭代方式n 位格雷码 https en wikipedia org wiki Gray code Constructing an n bit Gray code 有些比其他更有效率 但是 我实际上并不需要格雷码 而是想迭代格雷码列表中
  • 使用 Mathematica 在定义位置的左侧或右侧“StringCut”

    论读书这个问题 https stackoverflow com q 6052211 499167 我认为使用下面的问题会很简单StringSplit 给定以下字符串 我想将其 剪切 到每个 D 的左侧 以便 I get a List片段数
  • last.fm、groveshark、pandora 等推荐网站背后的算法是什么?

    我正在考虑启动一个基于推荐系统的项目 我需要在这方面提高自己 这看起来是网络端的热门话题 还想知道lastfm groveshark pandora 的推荐系统使用什么算法 如果您知道有关此类算法的任何书籍 网站或任何资源 请告知 看一下协
  • 打印字符串有困难

    当我运行该程序时 第二个printf prints string2与扫描到的任何内容string1附在最后 e g 123被扫描到string1然后它打印 Is before 12ab123 相对于12ab 为什么不只是 12ab char
  • C++ 低延迟线程异步缓冲流(用于日志记录) – Boost

    Question 下面的 3 个 while 循环包含已被注释掉的代码 我搜索 TAG1 TAG2 和 TAG3 以便于识别 我只是希望 while 循环在继续操作之前等待测试的条件变为真 同时尽可能减少 CPU 资源 我首先尝试使用 Bo
  • 将整数转换为其 ascii 值的字符串

    给定一个数字number这样它的数字被分组为长度的部分n 默认值为n是3 其中每个组代表一些ascii值 我想转换number转换为这些 ASCII 字符的字符串 例如 n number Output 3 70 F 3 6506606606
  • 如何使用 C++ 字符串流追加 int?

    谁能告诉我或给我一个简单的例子 说明如何将 int 附加到包含单词 Something 或任何单词 的字符串流中 stringstream ss ss lt lt Something lt lt 42 为了将来参考 请查看此内容 http
  • 尝试了解 Boost.Asio 自定义服务实现

    我正在考虑在我们当前使用的现有专有第三方网络协议之上编写自定义 Asio 服务 根据高分 Asio 指南 http en highscore de cpp boost asio html asio extensions您需要实现三个类来创建
  • 什么是无锁多线程编程?

    我见过有人 文章 SO 帖子说他们已经设计了自己的 无锁 容器用于多线程使用 假设他们没有使用影响性能的模数技巧 即每个线程只能基于某个模数进行插入 数据结构如何能够是多线程的而且是无锁的 这个问题是针对C和C 的 无锁编程的关键是使用硬件
  • 将矩形均匀分布在另一个矩形内所需的算法

    我正在寻找一种算法 可以帮助在较大的矩形内分配不同大小的矩形 同时最大限度地减少重叠 我研究过装箱算法 但它们似乎最小化了矩形之间的空间量 在我的例子中 所有被包装的物品都将是正方形 我想我想最大化所有正方形和外部矩形边界之间的距离 这是我
  • Java 中的原始字符串 - 特别是对于正则表达式。多行字符串

    有没有办法在Java中使用原始字符串 没有转义序列 我正在编写大量的正则表达式代码 原始字符串将使我的代码更具可读性 我知道该语言不会直接提供此功能 但是有没有办法以任何方式 模拟 它们 如果您使用 eclipse 这是一个解决方法 当您将
  • 如何获取字母数组的每种可能模式[重复]

    这个问题在这里已经有答案了 可能的重复 有没有更好的方法来进行字符串排列 https stackoverflow com questions 1995328 are there any better methods to do permut
  • 按组渐进串联列[重复]

    这个问题在这里已经有答案了 假设我有这个输入 ID date 1 date 2 str 1 1 2010 07 04 2008 01 20 A 2 2 2015 07 01 2011 08 31 C 3 3 2015 03 06 2013
  • 德尔福 LZMA

    我在 7 zip 网站上找到了一个 LZMA 库 但是没有用 我不使用文件 只使用流 出于某些原因 7 zip 站点上的库只将标头写入流而不压缩流 有人遇到了一些问题吗 有例子吗 知道 Delphi 的其他 LZMA 库吗 Tks 我自己没
  • 将列表列表替换为“压缩”列表列表,同时保持顺序

    我有一个列表列表 如我所附的代码所示 如果有任何共同值 我想链接每个子列表 然后我想用列表的精简列表替换列表的列表 例子 如果我有一个清单 1 2 3 3 4 I want 1 2 3 4 如果我有 4 3 1 2 3 I want 4 3
  • 计算数组中共线的三元组的数量

    我被问到这个面试问题 C 算法 但不知道如何解决 给定一个包含 N 个不同点的笛卡尔坐标的数组 Arr N 计算三元组 Arr P Arr Q Arr R 的数量 使得 P 有任何想法吗 我可以为此使用什么算法 以下内容可能没有优化 但其复
  • 从两个列表中查找总和等于 x 的 2 个数字的最快方法

    我的代码 n 3 a1 0 b1 10 a2 2 b2 2 if b1 gt n b1 n if b2 gt n b2 n diap1 x for x in range a1 b1 1 diap2 x for x in range a2 b

随机推荐

  • 缩放 UIPageControl 的当前点并保持其居中

    我对 UIPageControl 进行了子类化 以便使其当前的点更大 class CustomPageControl UIPageControl override var currentPage Int didSet updateDots
  • 在 Python 中将数据文件列拆分为单独的数组

    我是 python 新手 一整天都在试图解决这个问题 我有一个数据文件 如下所示 time I R stkb Step Information Temp 0 Run 1 11 0 000000000000000e 000 0 000000e
  • 在 PHPMailer 上使用 OAuth 2.0 的 Microsoft Office 授权问题

    我在通过 PHPMail 发送 SMTP 邮件期间遇到 OAuth 2 0 授权问题 基本上 我已经尝试了下面列出的所有范围 email openid profile https graph microsoft com Mail Send
  • 用 div 替换文本框,jquery 不起作用

    它只工作了几秒钟 然后 div 再次消失 document ready function done click function txtname replaceWith function return div this val div 你也
  • 如何使用太阳黑子实现通配符搜索

    随时欢迎任何帮助 我将 sunspot 与 solr 一起使用 但无法找到任何好的解决方案来说明如何使用 sunspot 执行通配符搜索 如果我搜索 8088 它应该返回以 8088 但不是 228088560 开头的所有数字 在 solr
  • 从 libgdx 中的集合中检测触摸对象(移动)的最佳方法

    这是我第一次尝试游戏开发 我刚刚开始尝试 libgdx 并了解游戏编程的不同方面 我看了示例项目 我可以了解libgdx游戏的整体架构 但为了掌握游戏动力学的基础知识 我开始玩低级的东西 比如如何绘制简单的形状 如何移动它们 如何处理此类碰
  • 从 C# 应用程序中启动 SFC

    我一直在寻找 但似乎无法完成这项工作 我正在尝试从 C 应用程序中的按钮启动 SFC 我知道这需要权利提升 并且在我试图做的范围内是我想要的行为 我努力了 以管理员身份运行 cmd 和命令 使用来自 C 的参数以管理员身份运行 CMD an
  • 如何在 firebase 中实现基于角色的访问控制

    这是我第一次涉足 Firebase 和 nosql 我有 SQL 背景 使用简单登录安全电子邮件 密码 如何限制对 Firebase 中数据的访问 例如 某些用户有权创建业务对象 用户 客户 类别等 而其他用户则无权 有没有办法将权限列表附
  • 具有动态行和列的 angular2 表

    如何在 angular2 中创建具有动态列和行的表格 我的数据来自休息服务并在此可观察中捕获 this physicalDataService getPhysicalData subscribe res gt this data res 我
  • 使用查询字符串和锚点标签形成正确的 URL

    当查询字符串和锚标记 哈希标记 在 URL 中可见时 它们的正确显示顺序是什么 http www whatever com var val anchor or http www whatever com anchor var val 有这方
  • 组合 ASP.NET 属性中的字符串

    我正在尝试在属性内连接一个字符串 我收到一个错误 我认为这与我的Eval 是否有正确的方法来连接字符串 或者这是不可能的 我认为问题在于我设置 NavigateUrl 的位置
  • 循环优化。寄存器重命名如何打破依赖关系?什么是执行端口容量?

    我正在分析 Agner Fog 的 optimization assemble 中的循环示例 我指的是12 9章 代码是 我简化了一下 L1 vmulpd ymm1 ymm2 rsi rax vaddpd ymm1 ymm1 rdi rax
  • 使用 BouncyCastle SSL 通过 keyFile 进行 Java AES 解密

    我正在尝试编写 Java 代码 使用与 OpenSSL 解密兼容的 BouncyCastle 来解密使用 AES256 加密的文件 s key 是提供的文件 其中包含将用于加密和解密的密钥 需要完成的步骤 1 读取密钥文件 2 使用提供的密
  • WebView 阻止弹出窗口吗?

    我在用着WebView浏览 pesopay com 并且它工作正常 除了当我按下提交按钮时 使用 Google Chrome 等互联网浏览器会显示一个弹出窗口 确认您填写的信息 但在我的安卓里WebView当我按下提交按钮时什么也没发生 我
  • 在 64 位 Windows 上安装 lxml

    所以我试图在我的机器上安装 lxml 但我似乎无法让它工作 我有 Windows 8 1 64 位和 python 3 5 我都用过 pip install lxml and easy install lxml 我不断收到此错误消息 C U
  • PyAudio 输入溢出 -9981 - 没有解决方案工作

    请不要将此问题报告为重复 因为没有一个可用的解决方案适合我 我测试了所有这些 所以 我正在尝试在我的 RaspberryPi B 型板上运行 PyAudio 示例录音程序 这是我收到的错误 Traceback most recent cal
  • 如何从仅标头库构建静态库

    我正在尝试构建项目的静态库stb 所以我可以将它链接到另一个项目 不是用 C C 编写的 我已经创建了 CMakeLists txt 文件来使用 CMake 构建它 但是构建的静态库文件是空的 我怀疑这是因为机顶盒似乎是仅标头图书馆 我尝试
  • 将函数应用于 DataFrame 中的每个单元格,该单元格取决于 pandas 中的列名称

    如何将函数应用于 DataFrame 中取决于列名称的每个单元格 我知道pandas DataFrame applymap但它似乎不允许依赖于列名称 import numpy as np import pandas as pd np ran
  • ggplot2 中稳健的标准错误

    我想用 ggplot2 绘制一个模型 我估计了一个稳健的方差 协方差矩阵 我想在估计置信区间时使用它 我可以告诉 ggplot2 使用我的 VCOV 或者 我可以以某种方式强制 Predict lm 使用我的 VCOV 矩阵吗 一个虚拟示例
  • 查找多个字符串匹配的算法

    我正在寻找一种有效算法的建议 用于在大量文本中查找所有匹配项 要搜索的术语将包含在列表中 并且可以有 1000 多种可能性 搜索词可以是 1 个或多个单词 显然 我可以多次遍历文本并与每个搜索词进行比较 效率不太高 我考虑过对搜索词进行排序