关键词过滤扩展,用于检查一段文本中是否出现敏感词,基于Double-Array Trie 树实现
安装 libdatrie , 需要 libdatrie-0.2.4 或更新的版本
它依赖 libiconv .
安装:
================================
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar -zxf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure
make && make install
libdatrie 下载地址:
http://linux.thai.net/~thep/datrie/datrie.html#Download
安装:
================================
wget ftp://linux.thai.net/pub/ThaiLinux/software/libthai/libdatrie-0.2.4.tar.gz
tar -zxf libdatrie-0.2.4.tar.gz
cd libdatrie-0.2.4
./configure --prefix=/usr/local/libdatrie/
make ICONV_LIBS='/usr/local/lib/libiconv.so'
make install
安装 PHP 扩展
================================
wget https://github.com/wulijun/php-ext-trie-filter/archive/master.zip
unzip master.zip
cd php-ext-trie-filter-master/
phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-trie_filter=/usr/local/libdatrie/
make && make install
将生成的 trie_filter.so 文件复制到 php 扩展目录,并在 php.ini 中添加该文件
参考: http://blog.sina.com.cn/s/blog_5f54f0be0101dxqp.html
安装完后,在 phpinfo 里可以看到 trie_filter 扩展
使用示例
$arrWord = array('word1', 'word2', 'word3'); $resTrie = trie_filter_new(); //create an empty trie tree foreach ($arrWord as $k => $v) { trie_filter_store($resTrie, $v); } // 生成关键词词典. trie_filter_save($resTrie, __DIR__ . '/blackword.tree'); // 加载关键词词典 $resTrie = trie_filter_load(__DIR__ . '/blackword.tree'); $strContent = 'hello word2 word1'; // 查找关键词 $arrRet = trie_filter_search($resTrie, $strContent); print_r($arrRet); //Array(0 => 6, 1 => 5) echo substr($strContent, $arrRet[0], $arrRet[1]); //word2 $arrRet = trie_filter_search_all($resTrie, $strContent); print_r($arrRet); //Array(0 => Array(0 => 6, 1 => 5), 1 => Array(0 => 12, 1 => 5)) $arrRet = trie_filter_search($resTrie, 'hello word'); print_r($arrRet); //Array() // 获得查找结果树 trie_filter_free($resTrie);
相关推荐
标题“php-ext-trie-filter-php7.zip”表明这是一个与PHP扩展相关的压缩文件,具体来说是针对PHP7版本的。PHP扩展通常是由C语言编写的,它们增强了PHP解释器的功能,为开发者提供了更多的库和功能。在本例中,“trie...
**数据结构实验报告——Trie树** Trie树,又称为前缀树或字典树,是一种用于存储字符串的有效数据结构。它通过将字符串的字符分解并存储在树的节点中,来实现高效的字符串查找、插入和删除操作。在Trie树中,每个...
6. **实际应用**:Trie树在很多场景下都有广泛应用,如自动补全、关键词过滤、IP路由等。在LeetCode上,这个问题旨在测试对数据结构的理解以及在PHP中实现高效算法的能力。 通过这个压缩包,你可以找到详细的PHP...
1. 安装和启用:首先,你需要下载并编译`trie_filter`扩展,如文件名`php-ext-trie-filter-3b91737d024e6fa83b2ed71f85de81a04eb931c3`所示的源代码包。这通常涉及到解压文件、运行`phpize`、配置、编译和安装等一...
Trie的主要优势在于其查询效率,特别适合于实现自动补全、关键词过滤等功能。 在Go语言中,实现Trie数据结构时,我们通常会定义一个节点结构体,包含一个字符字段和多个子节点引用。每个节点的子节点数量取决于字符...
Implementing_auto_completing_features_using_trie.java
HAT-trie: A Cache-conscious Trie-based Data Structure for StringsNikolas Askitis Ranjan SinhaSchool of Computer Science and Information Technology, RMIT University, Melbourne 3001, Australia. Email: {...
基于 C++ 库的 Python(2.7 和 3.4+)静态内存高效的类似 Trie 结构。 MARISA-trie 中的字符串数据可能比标准 Python dict 占用的内存少 50 到 100 倍; 原始查找速度相当; trie 还提供快速的高级方法,如前缀...
总之,“c++实现的一个快速且内存高效的HAT-trie - Tessil/ HAT-trie-源码”提供了C++中的HAT-trie实现,允许开发者在项目中快速地利用这一高效数据结构,提高字符串操作的性能并节省内存资源。对于需要高效字符串...
aho-corasick-node 基于DoubleArray Trie的Aho-Corasick字符串匹配算法的Node实现。安装npm install aho-corasick-node --save用法建造const AhoCorasick = require ( 'aho-corasick-node' ) ;const keywords = [ 'b...
使用类似于Shiro的字符串检查权限,并放入Trie中。 以类似的样式处理权限的模块。 权限存储在,这使其具有超强的性能,并且可以进行简单的权限检查之外的其他查询:还可以返回子权限列表。 例如,如果您有权访问ID...
hat-trie, 一种有效的trie实现 hat 这是Askitis和Sinha的hat trie数据结构的ANSI实现,它是一个非常高效的( 空间和时间) 现代变体。这里实现的版本将字节数组映射到单词( 。例如,无符号的longs ),它可以以用来存储...
笔记该LSM-trie实现不使用任何用户空间缓存。 I / O限制了其读取性能。 如果您正在寻找用于快速写入,读取和范围搜索的高性能SSD KV存储,请查看 。建造编译器: clang或gcc(在Makefile中更改)。 用于SHA1功能的...
【文件名称列表】:Tessil-hat-trie-ff788cd可能是一个Git仓库的名称,暗示了这是一个开源项目,由Tessil团队开发,版本号为ff788cd。这通常包含源代码、文档、测试用例等资源,用于构建、理解和扩展HATrie实现。 *...
double-array-trie原理与算法实现探索,dat算法分析
G-Trie实施(Ribeiro和Silva,2010年)将与PyGNA一起使用。 这是Pedro Ribeiro和Fernando Silva在“ G-Tries:用于存储和查找子图的数据结构”中概述的G-Trie数据结构的实现,其中使用NetworkX表示图形。
使用BinaryTrie的路由方案网络路由方案的实现: 每个路由器都有一个IP地址,并且通过使用二进制特里(trie)的最长前缀匹配将数据包转发到下一跳路由器。 使用斐波那契堆为无向图实现Dijkstra的单一源最短路径(ssp...
字典树是一种高效的数据结构,常用于字符串搜索、关键词过滤以及自动补全等场景。 字典树,又称前缀树或PATricia树,是一种有序树,用于存储动态集合或关联数组。它的每个内部节点代表一个字符串的前缀,而叶节点则...
Trie树是一种非二叉的多路搜索树,用于高效地存储和检索字符串集合中的关键词。它的每个节点代表一个字符串的前缀,根节点代表空字符串,而边则代表字符。从根节点到某个节点的路径上的字符组合成的字符串就是该节点...