{"id":17279633,"url":"https://github.com/ifplusor/actrie","last_synced_at":"2025-08-21T07:33:08.790Z","repository":{"id":57408067,"uuid":"77770827","full_name":"ifplusor/actrie","owner":"ifplusor","description":"Aho-Corasick automation for large-scale multi-pattern matching. Available for C/C++, Python, and Java on Linux, macOS, and Windows.","archived":false,"fork":false,"pushed_at":"2024-10-29T12:26:30.000Z","size":520,"stargazers_count":14,"open_issues_count":0,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-12-11T01:04:17.934Z","etag":null,"topics":["ac-automation","aho-corasick-automation","c","java","matcher","python","string-matcher","string-matching","string-search","trie"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ifplusor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-01-01T08:03:57.000Z","updated_at":"2024-11-13T14:56:19.000Z","dependencies_parsed_at":"2024-10-29T12:44:45.678Z","dependency_job_id":null,"html_url":"https://github.com/ifplusor/actrie","commit_stats":{"total_commits":168,"total_committers":1,"mean_commits":168.0,"dds":0.0,"last_synced_commit":"72d3c92f86e1578c1d98e59d41c86cbfe9f455cf"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifplusor%2Factrie","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifplusor%2Factrie/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifplusor%2Factrie/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifplusor%2Factrie/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ifplusor","download_url":"https://codeload.github.com/ifplusor/actrie/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230078838,"owners_count":18169303,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ac-automation","aho-corasick-automation","c","java","matcher","python","string-matcher","string-matching","string-search","trie"],"created_at":"2024-10-15T09:18:09.240Z","updated_at":"2024-12-19T21:09:26.773Z","avatar_url":"https://github.com/ifplusor.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Project **actrie**\n\n[![GitHub issues](https://img.shields.io/github/issues/ifplusor/actrie)](https://github.com/ifplusor/actrie/issues)\n[![GitHub forks](https://img.shields.io/github/forks/ifplusor/actrie)](https://github.com/ifplusor/actrie/network)\n[![GitHub stars](https://img.shields.io/github/stars/ifplusor/actrie)](https://github.com/ifplusor/actrie/stargazers)\n[![GitHub license](https://img.shields.io/github/license/ifplusor/actrie)](https://github.com/ifplusor/actrie/blob/master/LICENSE)\n![PyPI - Implementation](https://img.shields.io/pypi/implementation/actrie)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/actrie)\n[![PyPI - Wheel](https://img.shields.io/pypi/wheel/actrie)](https://pypi.org/project/actrie/)\n\nEnglish | [简体中文](./README.zh_cn.md)\n\n## What is actrie?\n\nIn the beginning, **actrie** is an implementation of Aho-Corasick automation, optimize for large scale multi-pattern.\n\nNow, we support more types of pattern: anti-ambiguity pattern, anti-antonym pattern, distance pattern, alternation pattern, etc. You can combine all of them together.\n\n## Pattern syntax\n\n### 1. **plain** pattern\n\n\u003e **abc**\n\n### 2. **anti-ambiguity** pattern\n\n\u003e center **(?\u0026!** ambiguity **)**\n\n### 3. **anti-antonym** pattern\n\n\u003e **(?\u003c!** antonym **)** center\n\n### 4. **distance** pattern\n\n\u003e prefix **.{min,max}** suffix\n\n### 5. **alternation** pattern\n\n\u003e pattern0 **|** pattern1\n\n### 6. **wrapper** pattern\n\n\u003e **(** pattern **)**\n\n## Build and install\n\n### 1. Build C library\n\n```bash\n# download source\ngit clone --depth=1 --recurse-submodules --shallow-submodules https://github.com/ifplusor/actrie.git\n\n# go to project directory\ncd actrie\n\n# make build directory\nmkdir build \u0026\u0026 pushd build\n\n# configure cmake project\ncmake -DCMAKE_BUILD_TYPE=Release ..\n\n# configure cmake project if no stdatomic.h in gcc\n#cmake -DCMAKE_BUILD_TYPE=Release -D__GCC_ATOMICS__=ON ..\n\n# build alib and actrie libraries\nmake actrie\n\npopd\n```\n\n### 2. Build and install Python package\n\n```bash\n# build wheel package\npython setup.py bdist_wheel\n\n# install wheel package\npip install dist/actrie-*.whl\n\n# Or install from PyPI\npip install actrie\n```\n\n### 3. Build and install Java package\n\n```bash\n# go to jni directory\npushd jni\n\n# build nar package\nmvn clean package\n\n# install to local maven repository\nmvn install\n\npopd\n```\n\n## Example\n\n### vocab.txt\n\n```text\nf|(a|b).{0,5}(e(?\u0026!ef)|g)\tpattern0\nabc\tpattern1\nefg\tpattern2\n```\n\n### **Python**: example.py\n\n```python\n#!/usr/bin/env python\n# coding=utf-8\n\nfrom actrie import *\n\n# with open(\"vocab.txt\") as rf:\n#     pattern = rf.read()\n\npattern = \"\"\"\nf|(a|b).{0,5}(e(?\u0026!ef)|g)\nabc\nefg\n\"\"\"\n\ncontent = \"abcdefg\"\n\n\ndef test():\n    global pattern, content\n\n    # create matcher by file\n    # matcher = Matcher.create_by_file(\"vocab.txt\")\n\n    # create matcher by string\n    matcher = Matcher.create_by_string(pattern)\n\n    # iterator\n    for matched in matcher.finditer(content):\n        print(matched)\n\n    # find all\n    all_matched = matcher.findall(content)\n    print(all_matched)\n\n\nif __name__ == \"__main__\":\n    test()\n```\n\n### **Java**: Example.java\n\n```java\npackage psn.ifplusor.actrie;\n\npublic class Example {\n\n    public static void main(String[] args) {\n        String pattern = \"f|(a|b).{0,5}(e(?\u0026!ef)|g)\\nabc\\nefg\";\n        String content = \"abcdefg\";\n\n        // create matcher by string\n        try (Matcher matcher = Matcher.createByString(pattern)) {\n            try (Context context = matcher.match(content)) {\n                // iterator\n                for (Word word : context) {\n                    System.out.println(word);\n                }\n            }\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fifplusor%2Factrie","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fifplusor%2Factrie","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fifplusor%2Factrie/lists"}