トウ @NASNETou 日本語は、「修飾部分を長い順に並べるだけで美文になる」という謎ルールがあったりする。 「推敲とか高尚なことを言ってるくせに、実は長さしか見てない」というダサい人類の事実を明らかにするのちょっと止めてほしい。
「Rubyのしくみ Ruby Under a Microscope【委託】 - 達人出版会」という本の第1章を読んだので、内容と感想を書きます。 この本はいろいろな人がオススメされていたので、難しそうだなと思いつつ買いました。 🗿ではじまる行と🗿🗿🗿で囲まれた部分は自分で考えたことです。 はじめに 字句解析 times.rbの字句解析の流れ Ripperを使う 構文解析 LALR構文解析アルゴリズム 例1 例2 Rubyの文法規則 Ripperを使う その2 おわりに はじめに Rubyの構文はLispやSmalltalkといった高度な言語のアイデアを採用している。 🗿🗿🗿 Lispって? https://news.mynavi.jp/techplus/article/programinglanguageoftheworld-18/ Smalltalkって? https://
またか. またなのか. 何回目だ. ということで, ラムダ計算のインタプリタの実装としては4回目くらい*1, コンパイル時計算でやるものとしても3回目くらいになってしまうけど, ラムダ計算の処理系をまた書いてしまった. 今回の目的は, Scala 3にはmatch typesという機能があり, これだけでチューリング完全なのではないか, というのを検証するため. また, 文字列リテラル型を操作する型レベル関数が3.1.2-RC1にきていて, これを使えば構文解析器だって書ける. 経緯 過去の事例 関数と返り値 パターンマッチと再帰呼出し Scala 3の型レベル言語 match types リテラル型操作 ラムダ計算の実装 評価 印字 構文解析 型推論 (型検査) おわりに 経緯 もともとは, id:xuweiさんが文字列リテラル型でコンパイル時に動作する構文解析器を実装していたのが始まり
まえがき タイトルが一体何言ってるんだお前は、という感じのものなのですが、初めて構文解析器ぽいものを書き始めてから、たぶん20年くらい経ったかなくらいの意味です。私を知っている方はご存知かも知れませんが、修士~博士にかけての私の研究テーマは、Packrat Parser/PEGで、博士論文もそれ関係でした。 で、博士号取った後、査読付き論文は一本も出していないのですが、中田育男先生の、ISO-Rubyパーザの試験実装をお手伝いしたり、なんだかPEGや構文解析に関する論文の査読をしていたら、去年からプログラミング研究会の論文誌編集委員になったりしています。最近、まともに(査読付き)論文書いてない私がこんな立場引き受けていいのかなーと思うものの、構文解析という分野はとてもニッチなので、査読できる人が少ないせいか、構文解析に関する論文は、私に査読の話が来ることがしばしばあります。 私が型システム
こんにちはydahです。最近はPure Ruby LALR parser generatorであるLramaにパッチを送っています。 気がつけば12月もあとわずかとなり、Ruby3.3.0のリリース日も近づいてきましたね。5月半ばに開催されたRubyKaigi 2023で金子さん(@spikeolaf)の「The future vision of Ruby Parser」を聞いてから、約半年が経ちました。あの時の自分はまさか半年後には自分がパーサージェネレーターの開発に関わっている人生を送っているとは思いもしなかったと思います。 今回のRuby3.3.0のリリースノートには、私が実装した機能が載っていてとても感慨深いです。 https://www.ruby-lang.org/en/news/2023/12/11/ruby-3-3-0-rc1-released/ Use Lrama inst
Ruby 3.3リリース! 新機能解説 Lrama LRパーサジェネレータが切り開く、Rubyの構文解析の未来 シンプルで強力な文法はRubyの特徴のひとつだと言われています。その文法を技術的に支えているのがパーサです。Ruby 3系のひとつの目標として、LSPやRBS、TypeProfをはじめとした各種ツールの拡充があります。それらのツールは多くの場合AST(抽象構文木)というプログラムをパースした結果を対象に解析を行います。そこでこれらのツールに対してより良いAPIを提供するべく、Rubyのパーサを刷新する動きが活発になっています。 最新のRuby 3.3ではパーサの内部に大規模な改善が入っています。この記事ではRuby 3.3で導入されたLrama LALR (1) パーサジェネレータについて紹介します。 パーサジェネレータ ——パーサをどのようにして実装するか パーサを実装す
随分と昔に、CCG(combinatory categorial grammar/組み合わせ範疇文法)のパーサを作った。 https://m-a-o.hatenablog.com/entry/20160614/p3 この時の実装は、CYK法に近いもので、ボトムアップ構文解析である。 ところで、人間が自然言語を処理する時は、単語を先頭から順に処理していってると思われる。普通のCCGに於いて、例えば、I saw a cat.という文は標準的には、以下のような導出木によってparseされる。 I saw a cat -- --------- ------ ----- NP (S\NP)/NP NP/N N ----------------- (/-application) NP ----------------------------- (/-application) S\NP --------
私は2024年5月15日から17日まで、沖縄の那覇で開催されていたRubyKaigi 2024に参加し、登壇をしてきました。 RubyKaigiへの参加はRubyKaigi 2022からなので今年で3年目です。 もう2週間が経とうとしていますが、少しずつ気持ちを整理してようやく現実に戻ってきました。 この記事自体は帰りの飛行機の中で書き始めたのですが、つらつらと書いていると凄まじい長文となってしまいました。(6/2現在までずっと書いているとは思いもしませんでした。) 本文章内に、他の方の旧Twitterでのポストを引用していますが、もし問題がございましたらお手数ですがお知らせください。 これはゆいレールのはじまり 発表では、Lramaに新たな文法を拡張するというアプローチでparse.yのメンテナンス性を向上させるというお話をしました。 rubykaigi.org 言葉にするのは非常に難し
「文法として曖昧さがない」「正規表現や文脈自由文法よりも強力」などの理由で注目を浴びる構文解析技術「解析表現文法(parsing expression grammar, PEG)」の初の入門書。 《本書の特長》 ●Pythonで動く著者提供のツール「PegTree」でパーザを生成しながら解説。理論の詳細に惑わされず、実装上のポイントが効率よく学べます。 ●構文解析の初歩から解説。オブジェクト指向プログラミングや関数型プログラミングなどの高度な技法も随時解説されているので、Pythonでの簡単なプログラミング経験があれば、だれでも読むことができます。 ●後半では、小規模なプログラミング言語、パーザジェネレータ、パーザコンビネータなどの開発を解説。一段深い解析表現文法の使い方を学べます。 本書で紹介したソースコードの一部は、[関連サイト]のリンクからご利用いただけます。 第1章 構文解析入門
Goのソースコードを処理するツール(コードチェックやデータ生成など)を作ってみたいと思ったので、Goの構文解析に入門してみました。 まえがき ソースコードを何らかのツールにかけて処理したいことはよくあるかと思います。 例えばコードのルールチェックやフォーマットを行うとか、特定のフォーマットで書かれたコード(やコメント)から何らかのデータ(APIドキュメントなど)を自動生成するなどです。 昨今ではこのような処理を行うためのツールが多数提供されており、多くのプロジェクトで利用されています。 しかし、プロジェクトに固有なルールであるとか、独自のデータファイルを生成したいとなったとき、それら既存のツールでは対応できないこともあります。 そのような場合は「自分たちでツールを作る」ということが考えられますが、その際にはどのようにしてソースコードを処理すればよいのでしょうか? 簡単なツールであればちょっ
はいさい! ちゅらデータ ぬ オースティン やいびーん どー! んな、 がんじゅー やいびーみ? 概要 .csv拡張子のファイルをJavaScriptで解析し、ヘッダーと行を抽出する方法を紹介します。 背景 npmに公開しているCSV構文解析ソフトは他にあります。が、今回は使いません。 なぜこれを使わないか? 筆者は不要であれば、第三者が作ったパッケージを極力組み入れたくないからです。 なぜ第三者パッケージを避けたいか? 複数の理由があります。 セキュリティの脆弱性が懸念される。Leftpad事件のような事件は今後も起きる。 そのパッケージがいつ放棄されるかわからない。放棄された時に、自分の手で維持しなければいけなくなる。 仕事で携わっているプロジェクトの特徴で、第三者パッケージを入れると稟議を通すのに時間がかかり、にりー(だるい) 第三者パッケージの使い方を学ぶより、JavaScript
だいぶ寒くなってきたので、慌てて冬支度を始めました。毎日のように何かしらの荷物が届きます。 ▲ 今年は猫用のホットカーペットを買いました、たまに乗っていただけます こんにちは。データアナリティクス事業本部 インテグレーション部 機械学習チームのShirotaです。 これは「 クラスメソッド 機械学習チーム アドベントカレンダー 2022 」12/8(木)の記事となっております。 前日 12/7(水)の記事は以下よりご覧ください。Amazon SageMaker Studio Labの新機能を早速試してみたブログになっております。 自然言語処理強化月間 ということにして私は今回のアドベントカレンダーを執筆していくことにしましたが、今回もそんなわけで自然言語処理に関するお話をしていこうと思います。 それではいきましょう! 日本語自然言語処理オープンソースライブラリ 「GiNZA」 いきなりライ
表というのはプログラムに使うには実に扱いやすい形式であることは言うまでもありません。 そのまま二次元配列にしてしまえばよいので。 プログラム 以上の考え方からプログラムを書くと最終的にこうなりました。 // 文字列表現の 0~255 を解釈して返却値で返す。 // 解釈に成功した場合は残りの文字列の位置を rest にセットする。 // エラーの場合は -1 を返し、 rest は問題のある箇所がセットされる。 int parse_number(const char* input, const char** rest); // IP アドレスの文字列表現をパースして result に格納する。 // 正しいフォーマットとしてパースが完了した場合には 1 を返し、 // そうでなかった場合には 0 を返す。 // 0 が返されたときは result の内容は信頼できない。 _Bool par
課題 わたしは、Ruby on Rails を使ってアプリケーション開発を本業としているエンジニアです。 Railsで機能を開発すれば、当然Specも書く必要がありますよね。Specを書かないと動作確認ができていない状態でリリースしてしまう危険性があります。 しかし、開発中に多くのクラスやメソッドを書いていると、どのクラスに対して/どのメソッドに対してSpecを書いたのか忘れてしまいます。そうすると、十分に動作を検証していない状態で、PRがマージされてしまうことがあります。 Railsのアプリケーションにおいて、どのメソッドにSpecが書かれていて、どのメソッドには書かれていないのかをSpecファイルを見なくても明らかにしたい!そんなふうに考えたことはないでしょうか。 わたしは、実装を見た瞬間に対応するSpecが存在することが保証されている(または、実装側にSpecが不要であることが明示さ
今回実装したものたち 動機 研究室の引き継ぎでExcelのブックをいただいたのですが、あまりに計算が複雑なため、そのまま読むのが憚られました。 このような課題は自分に限らずだれもが遭遇しうるものだと思うので、Excelのセル同士の依存関係を可視化するツールを作ろうと思い至りました。 特にこの記事の最終的な成果物として、 セル同士の依存関係が一目でわかる 各セルに名前付けができる 定数セルの値を変えた時に、結果セル計算結果がどのように変化するか確かめられる を想定します。 まずは単純な実装(Python) 最も簡単な実装は正規表現を使うことです。例えば \b[A-Z]+[1-9][0-9]*(?::[A-Z]+[1-9][0-9]*)?\b このような正規表現を考えると、A1, A2:A3のようなセル表現のパターンだけを抜き出すことができます。なお、ここでは単純化のためSheet1!A3のよ
こんにちはydahです。昨日に引き続き筆を執っています。今日はクリスマスイブですね。 さて、今回はANDPAD Advent Calendar 2023の24日目の記事として、今年Lramaの開発で手を動かしてきた内容の中で、これまで発表していないものを紹介します1。もうすぐ今年も終わりますので、いわゆる「今年の振り返り」的な内容です。 今年はどれくらい手を動かしたかというと大体140コミットほどでした。2 グラフを眺めているとKaigi on Rails 2023、RubyWorld Conference 2023辺りでKaigi Effectを受けていることが目に見える3ので、とてもおもしろいですね。それでは、振り返りをしていきましょう。 #includeを明示しなくていいようにする Change to automatically insert #include of header f
日本語の構文解析においては、3つのレベルでの「係り受け」が存在する。 佐伯梅友・橋本進吉らによる句の「係り受け」(いわゆる学校文法) 吉田将・栗原俊彦らによる二文節間の「係り受け」(いわゆる文節係り受け) Joakim Nivre・金山博らによる単語間の「係り受け」(いわゆる依存文法) これらの3つの「係り受け」は、それぞれに関係はあるものの、情報処理という視点から見た場合には、アプローチがかなり異なっている。この記事の[問2]例文「Alexは男性にも女性にも使われる名前で、女性の名Alexandraの愛称であるが、男性の名Alexanderの愛称でもある。」をもとに、概説しておこう。 (1) 句の「係り受け」 いわゆる学校文法における句の「係り受け」は、文全体を少しずつ区切っていきながら、区切りにおける「係り受け」を考える、という点に大きな特徴がある。「係り受け」は一般に、文頭に近い方の
// C# Advent Calendar 2018 の 23 日目の記事です。 デバッガーのようなものを自作してみました。 動機 普段は Visual Studio を使っているが、デバッグ時に手動でステップ実行するのが面倒 ループなどでステップ数が多い場合 分岐の様子や変数の状態を軽くチェックしたい場合 解決案 ステップの時間間隔だけを指定して、デバッガーを自動で実行させる 変数の一覧が表示される 時間間隔をリアルタイムで調節できる .NET Compiler Platform (Roslyn) の構文解析の機能を使い、各ステップの間にデバッグ用のコードを差し込めば実現できそう 結果 というわけで、WPF でプロトタイプ「Tick-tack Debugger」を作ってみた結果、このようになりました。 例として、ニュートン法で平方根を求めています。 (クリックで拡大) 解説 以下は概略の
今日は以下の論文についてまとめます。 BERTによる日本語構文解析の精度向上(柴田ら 2019) 昨年の「言語処理学会」で発表されたものです。 日本語で分かりやすいのですが、整理もかねてまとめます。 BERT自体の解説はググれば分かりやすい説明があります。 また、以前にまとめましたので、詳細は割愛します。 kento1109.hatenablog.com なにがスゴい? 「BERTを使って既存の構文解析器の精度を大幅に上回った」という点です。 ここでは、既存の構文解析器として「KNP, Cabocha, J.depP」と比較しています。 従来Shift-Reduce 法やチャンキング段階適用により、係り受け関係を特定する手法が知られています。 「SVMを用いた 統計的日本語係り受け解析」の手法では「係り元(A)」と「係り先(B)」の素性を利用して、 「(A)が(B)に係るか」という二値分類
ANTLR とは ANTLR の導入 ANTLR の実行 ANTLR による構文解析 ANTLR の文法ファイルと生成ファイルの関係 まとめ ANTLR とは ANTLR (ANother Tool for Language Recognition) は構文解析器を生成するパーサジェネレータで、yacc や JavaCC などと同じ類いのものです。 BNF のような文法定義から、ソースコードなどを処理するコードを生成します。 プログラム言語の入力部であったり、DSL や コード解析、設定ファイルの読み込みなどの構造を持った入力テキストの処理を簡単に実現することができます。 例えば、Hibernate の HQL(Hibernate Query Language) では ANTLR による構文解析が使われています。 ここでは、ANTLR 4 の使い方について簡単に見ていきます。 ANTLR
英文の構文解析的なツールが欲しい、主に英語学習用に。 それなりの長さの文章だとSVOCとか係り受けとか自信ないのでざっくり確認できたらいいなと思ってググった。 enHackが良さげ。 enHack enHack 英語学習者向けのSVOCや係り受けを表示できるツール。読み上げ機能など学習用の機能が他にも実装されている。 corenlp.run どちらかと言うと専門的な自然言語処理よりの解析ツール。 品詞タグは「品詞タグ・セット」が参考になる。 The Stanford Natural Language Processing Group 英語構文解析 文例は限られているけど参考にはなりそう。 参考ページ: Ginger 英文チェッカー より自然な英文にするための英文校正ツール。 Stanford Parserを使って、自然言語処理がどこまで進化したのかを実感しましょう! | MISO GSK2
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く