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. linux下python程序部署

    1.安装python 2.安装virtualenv https://blog.csdn.net/mulangren1988/article/details/59106682 3.指定virtualen ...

  2. 持续集成环境(3)-Jenkins用户权限管理

    我们可以利用Role-based Authorization Strategy 插件来管理Jenkins用户权限 安装Role-based Authorization Strategy插件 开启权限全 ...

  3. Day06 ServletContext

    ServletContext的介绍与用法 1.什么是ServletContext 1.1 SevrvletContext:Servlet上下文 服务器会为每一个Web工程创建一个ServletCont ...

  4. HTTP 认证授权技术归纳

    原文:https://coolshell.cn/articles/19395.html

  5. Apache Ranger系列七:Hive 和 Spark 执行过程中的文件路径配置

    背景:在使用Ranger鉴权的过程中,要求必须开启impersonation功能(即执行用户与提交用户保持一致,而不是统一代理的hive/spark).但是在执行的过程中,会需要在hdfs存储临时的文 ...

  6. IOS开发基础之核心动画 基础动画、关键帧、组动画案例

    // // ViewController.m // 30-核心动画 // // #import "ViewController.h" @interface ViewControll ...

  7. 织梦(DedeCMS)安全方案

    一.织梦(DedeCMS)介绍 织梦(DedeCMS)作为国内龙头CMS系统之一,因其系统结构科学合理,操作使用简单,拥有海量用户.和其他CMS一样,安全漏洞也是其无法避免的问题.虽然官方不断发布补丁 ...

  8. windows下 mstsc 远程Ubuntu 图形界面

    安装及设置xrdp ------------------------------------------------------ touch ~/installXrdp.sh  cat > ~/ ...

  9. Android笔记--按钮触控

    Button(由TextView派生而来) 但也是有一定的区别: 具体实现: 按钮控件的新增属性 具体实现: 在未使用textAllCaps属性之前,按钮名称会默认为全部使用大写字母: 在指定了该属性 ...

  10. fortify Unsafe JNI

    Unsafe JNI 主要解决问题: 1.system.currentTimeMillis(); 使用SystemClock.now()替换. 2.isAssignableFrom(); 使用新定义的 ...