Lark は、人間工学、パフォーマンス、モジュール性に重点を置いて構築された Python 用の解析ツールキットです。
Lark はすべてのコンテキストフリー言語を解析できます。簡単に言うと、世の中のほぼすべてのプログラミング言語を解析でき、ほとんどの自然言語もある程度解析できることを意味します。
誰のためのものですか?
初心者: Lark は実験にとてもフレンドリーです。どんなに複雑で曖昧でも、投げかけられたあらゆる文法を解析し、効率的に解析します。また、文法と入力のみを使用して、注釈付きの解析木を構築し、その解析木を処理するための便利で柔軟なツールを提供します。
専門家: Lark は Earley(SPPF) と LALR(1) の両方、およびいくつかの異なるレクサーを実装しているため、要件に応じてパワーと速度をトレードオフできます。また、さまざまな高度な機能やユーティリティも提供します。
何ができるのでしょうか?
さらに多くの機能があります。先を読んで見つけてください!
最も重要なのは、Lark を使用すると時間を節約し、解析で頭痛がするのを防ぐことができます。
$ pip install lark --upgrade
Lark には依存関係はありません。
Lark は、文法ファイル (*.lark) の構文強調表示を提供します。
これらは他の言語での Lark の実装です。これらは Lark 文法を受け入れ、同様のユーティリティを提供します。
これは「Hello, World!」を解析する小さなプログラムです。 (または他の同様のフレーズ):
from lark import Lark
l = Lark ( '''start: WORD "," WORD "!"
%import common.WORD // imports from terminal library
%ignore " " // Disregard spaces in text
''' )
print ( l . parse ( "Hello, World!" ) )
そして出力は次のようになります。
Tree ( start , [ Token ( WORD , 'Hello' ), Token ( WORD , 'World' )])
結果のツリーには句読点が表示されないことに注意してください。 Lark によって自動的にフィルタリングされます。
Lark は曖昧さの処理に優れています。 「果物はバナナのように飛ぶ」というフレーズを解析した結果は次のとおりです。
ここでコードを読み、ここでその他の例を参照してください。
機能の完全なリストはこちらからご覧ください
Lark は速くて軽い (低いほど良い)
比較がどのように行われたかについて詳しくは、JSON チュートリアルをご覧ください。
サードパーティの詳細なベンチマークについては、Python Parsing Benchmarks リポジトリをチェックしてください。
図書館 | アルゴリズム | 文法 | ツリーを構築しますか? | 曖昧さをサポートしますか? | すべての CFG を処理できますか? | 行/列の追跡 | スタンドアロンで生成 |
---|---|---|---|---|---|---|---|
ヒバリ | アーリー/LALR(1) | EBNF | はい! | はい! | はい! | はい! | はい! (LALRのみ) |
プライ | LALR(1) | BNF | いいえ | いいえ | いいえ | いいえ | いいえ |
PyParsing | ペグ | コンビネータ | いいえ | いいえ | いいえ* | いいえ | いいえ |
パセリ | ペグ | EBNF | いいえ | いいえ | いいえ* | いいえ | いいえ |
倹約的 | ペグ | EBNF | はい | いいえ | いいえ* | いいえ | いいえ |
アントラー | LL(*) | EBNF | はい | いいえ | はい? | はい | いいえ |
(* PEG は非決定論的な文法を処理できません。また、Wikipedia によると、PEG が実際にすべての決定論的な CFG を解析できるかどうかは未解決のままです。)
完全なリスト
Lark は MIT ライセンスを使用します。
(スタンドアロン ツールは MPL2 の下にあります)
Lark はプルリクエストを受け付けます。 Lark の開発方法を参照してください。
これまでに貢献してくださった皆様に多大な感謝を申し上げます:
Lark が好きで、私たちの成長を見たい方は、スポンサーになることをご検討ください。
コードに関する質問は、gitter または Issue で行うのが最適です。
その他のことについては、erezshin at gmail com までメールでお問い合わせください。
-- エレス