Pyahocorasick

Pyahocorasick是一个基于AC自动机算法的字符串匹配工具。它可以用于快速查找多个短字符串在一个长字符串中的所有出现位置。Pyahocorasick可以在构建状态机时使用多线程,从而大大加快构建速度。

安装Pyahocorasick

Pyahocorasick可以使用pip命令进行安装:

pip install pyahocorasick

使用Pyahocorasick

以下是使用Pyahocorasick进行字符串匹配的示例代码:

import ahocorasick

# 构建模式匹配自动机
patterns = ['he', 'she', 'his', 'hers']
automaton = ahocorasick.Automaton()
for pattern in patterns:
automaton.add_word(pattern, pattern)
automaton.make_automaton() # 在文本中查找匹配
text = 'ushershewashis'
matches = []
for end_index, matched_pattern in automaton.iter(text):
start_index = end_index - len(matched_pattern) + 1
matches.append((matched_pattern, start_index, end_index))
print(matches)

  输出:

[('she', 1, 3), ('he', 2, 3), ('hers', 2, 5), ('she', 5, 7), ('he', 6, 7), ('his', 11, 13)]

  

Marisa_trie

Marisa_trie是一个高效的Trie树实现,可以用于存储和查找大量字符串。它能够压缩存储空间,并提供快速的前缀匹配和近似匹配功能。Marisa_trie还支持多种不同的序列化格式,可以在不同的程序和平台之间共享。

安装Marisa_trie

Marisa_trie可以使用pip命令进行安装:

pip install marisa-trie

  

使用Marisa_trie

以下是使用Marisa_trie进行字符串匹配的示例代码:

import marisa_trie

# 构建trie
short_strings = ['hello', 'world', 'python','py']
trie = marisa_trie.Trie(short_strings) # 匹配长字符串
long_string = 'this is a hello world example using python hello' results = []
for i in range(len(long_string)):
matches = trie.prefixes(long_string[i:]) # 输出匹配结果
if matches:
for matche in matches:
results.append((matche,i,i+len(matche))) print(results)

结果:

[('hello', 10, 15), ('world', 16, 21), ('py', 36, 38), ('python', 36, 42), ('hello', 43, 48)]

  

在以上示例代码中,我们首先构建了一个包含多个短字符串的Trie树。然后我们遍历文本中的所有前缀,并在Trie树中查找匹配的前缀。一旦找到匹配的前缀,我们可以计算匹配的起始和结束位置,并将它们添加到匹配列表中。

(一)pyahocorasick和marisa_trie,字符串快速查找的python包,自然语言处理,命名实体识别可用的高效包的更多相关文章

  1. hash数组快速查找一个字符串中出现最多的字符,并统计出现的次数

    如何快速查找一个字符串中出现最多的字符,并统计出现的次数? 可以使用hash数组,也就是关联数组实现快速查找功能. function seek(str) { var hash = []; var ma ...

  2. lucene如何通过docId快速查找field字段以及最近距离等信息?

    http://www.cnblogs.com/LBSer/p/4419052.html 1 问题描述 我们的检索排序服务往往需要结合个性化算法来进行重排序,一般来说分两步:1)进行粗排序,这一过程由检 ...

  3. vim之快速查找功能

    vim有强大的字符串查找功能. 我们通常在vim下要查找字符串的时候, 都是输入 / 或者 ?  加 需要查找的字符串来进行搜索,比如想搜索 super 这个单词, 可以输入  /super  或者 ...

  4. (私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例)

    (私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例) https://pan.baidu.com/s/1L54VuFwCdKVnQGVc8vD1TQnwmj java手册 Ja ...

  5. [算法2-数组与字符串的查找与匹配] (.NET源码学习)

    [算法2-数组与字符串的查找与匹配] (.NET源码学习) 关键词:1. 数组查找(算法)   2. 字符串查找(算法)   3. C#中的String(源码)   4. 特性Attribute 与内 ...

  6. Matlab 之 字符串数组查找

    Matlab的优势在于向量操作,字符串操作往往费时费力,但是如果能充分利用Matlab自带的一些函数,也可以取得不错的效果.下面就介绍一下字符串数组查找的小技巧. 字符串数组我通常会选择应用cell格 ...

  7. PHP实现文本快速查找 - 二分查找

    PHP实现文本快速查找 - 二分查找法 起因 先说说事情的起因,最近在分析数据时经常遇到一种场景,代码需要频繁的读某一张数据库的表,比如根据地区ID获取地区名称.根据网站分类ID获取分类名称.根据关键 ...

  8. C#:比较二个字符串,查找出相同字数和差异字符

            ;; i < n; i++)             {                 ) == s2.Substring(i, ))                 /*同位 ...

  9. [SQL Server]如何快速查找使用了某个字段的所有存储过程

    [SQL Server]如何快速查找使用了某个字段的所有存储过程       当一个系统中使用了很多的表,并且存在大量的存储过程,当数据库中的某个表删除了某个字段,那么相应的存储过程也需要改动,但是我 ...

  10. 【NYOJ-187】快速查找素数—— 枚举法、筛选法、打表法

    快速查找素数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数. 输入 给出一个正整数数N(N ...

随机推荐

  1. clickhouse 安装部署(linux)

    1.安装部署 1.1下载文件 可以按照官网步骤安装 https://clickhouse.tech/docs/zh/getting-started/install/. 这个库目前大小有2G,网络不允许 ...

  2. node express框架搭建

    前面了解了一些node.js的服务建立及事件绑定和触发,要想一步一步自己来写所有响应,还是比较麻烦,看了express,很多东西都由框架自动完成,开发人员仅需关注自己想要实现的功能即可,真正实现了让开 ...

  3. Java开发词汇

    Java基础常见英语词汇(70个) OO: object-oriented ,面向对象 OOP: object-oriented programming,面向对象编程 JDK:Java develop ...

  4. unity踩坑集锦

    1.AB包加载,如果项目没有这个tag,那么就匹配不上,和代码一样.2.unity打包安卓topbar想显示出来怎么做?:不渲染安全区域外  3. unity编辑器报错 : Expanding inv ...

  5. 关与python面向对象的认识

    面向对象编程 类:从一堆对象中以抽象的方式把相同的特征归类得到. 抽象类 类 实列 子类抽象为父类,子类继承父类特征. 类实例化为实例,实例抽象为类. class Human(object): cen ...

  6. Mongodb between 时间范围

    db.getCollection("Order").find({ "Supplier.ServiceCode": "CNI", " ...

  7. 学习ASP.NET Core Blazor编程系列二十八——JWT登录(3)

    学习ASP.NET Core Blazor编程系列文章之目录 学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应 ...

  8. RPA的市场定义和企业选型

    RPA(Robotic Process Automation)译为机器人流程自动化,又可以称为数字化劳动力,是一种智能化软件,通过模拟并增强人类与计算机的交互过程,实现工作流程中的自动化.RPA具有对 ...

  9. CMSGC-GCRoots-三色标记

    CMS收集器的特点:追求最短的停顿时间. CMS-Concurrent Mark Sweep 并发 标记 清除 标记垃圾的方式 标记清除:标记处需要回收的对象,标记完成后统一回收所有被标记的对象. 标 ...

  10. 基于Admin.NET框架的前端的一些改进和代码生成处理(1)

    Admin.NET 是一套基于Furion/.NET 6实现的通用管理平台,模块插件式开发,框架包含了常规的权限管理.字典等管理模块,以及一些Vue3的Demo案例,框架前后端分离.后端基于基于Fur ...