0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python から MARISA Trie を使えるライブラリを公開しました。

0
Last updated at Posted at 2024-08-20

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 ステップです。

  1. Keyset (文字列の集合) を作成する。
  2. Keyset から Trie (辞書) を構築する。
  3. 検索する。
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 として公開しています。

https://github.com/juno-rmks/marisa-bindings

スターで応援していただけると励みになります。

設計方針

本ライブラリは、Python 向けに API を再設計するのではなく、MARISA Trie 本来の API 仕様をそのまま利用できることを重視しています。

又、上流実装の保守性を保つため、ソースコードは原則改変せず、必要最小限のパッチのみを適用する方針を採用しています。

注意事項

本ライブラリは、非公認のプロジェクトであり、MARISA Trie 本体の作者とは無関係です。

問題報告や改善提案があれば、本ライブラリの Issue へ報告いただけると助かります。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?