C++ 製 Trie ライブラリ MARISA Trie を
Python から利用できるライブラリを公開しました。
2026 年 2 月現在、Python 3.10〜3.14 に対応し、Linux・Windows・macOS 環境でビルド済みのバイナリを利用できます。
必要なのは pip install marisa-bindings だけです。処理本体は C++ 実装のため、高速に動作します。
これは何?
MARISA Trie は、コンパクトで高速な Trie データ構造の実装です。構築した Trie に対して、次の検索操作を実行できます。
- Lookup (完全一致検索)
- Reverse lookup (ID による逆引き検索)
- Common prefix search (前方一致検索)
- Predictive search (予測検索)
公式 SWIG 製 Python バインディングが既に存在しますが、開発当時 (2024 年 8 月時点) の最新 Python ではそのままビルドできない状態でした。そのため、公式コードを改変せずに最新 Python でもビルドできる SWIG 製 Python バインディングを整備することにしました。
marisa-bindings を利用すると、これらのネイティブ API を Python からそのまま呼び出せます。
インストール
依存関係を分離するため、Python 仮想環境の使用を推奨します。
python -m venv .venv
source .venv/bin/activate
pip を使用してインストールします。
pip install marisa-bindings
尚、事前にビルドされた wheel がない環境では、ローカルでのビルドが発生します。その場合、ローカルに以下の製品が必要です。
- C++ コンパイラツールチェーン
- SWIG 4.0 以上
- Python 開発用ヘッダ
2026 年 2 月現在は、主要な環境向けに wheel を提供しています。
利用方法
基本的な利用の流れは、次の 3 ステップです。
- Keyset (文字列の集合) を作成する。
- Keyset から Trie (辞書) を構築する。
- 検索する。
from marisa_bindings import marisa
# Keyset を作成する。
keyset = marisa.Keyset()
for word in ["apple", "app", "banana"]:
keyset.push_back(word)
# Keyset から Trie (辞書) を構築する。
trie = marisa.Trie()
trie.build(keyset)
# 完全一致検索する。
print(trie.lookup("apple"))
# 前方一致検索する。
agent = marisa.Agent()
agent.set_query("app")
while trie.common_prefix_search(agent):
print(agent.key_str())
リポジトリ
ソースコードや CI 構成も GitHub で OSS として公開しています。
スターで応援していただけると励みになります。
設計方針
本ライブラリは、Python 向けに API を再設計するのではなく、MARISA Trie 本来の API 仕様をそのまま利用できることを重視しています。
又、上流実装の保守性を保つため、ソースコードは原則改変せず、必要最小限のパッチのみを適用する方針を採用しています。
注意事項
本ライブラリは、非公認のプロジェクトであり、MARISA Trie 本体の作者とは無関係です。
問題報告や改善提案があれば、本ライブラリの Issue へ報告いただけると助かります。