投稿

日本語入力を支える技術

日本語入力を支える技術 ~変わり続けるコンピュータと言葉の世界 2012/2/8 徳永 拓之 (著) 日本語入力を支える技術 ~変わり続けるコンピュータと言葉の世界 (Amazonで書籍情報を表示) これまで本ブログで日本語の文字に関する本をいくつか取り上げましたが、今回は日本語入力に関する本を取り上げます。 普段殆ど意識することなく日本語入力していますが、考えてみると、なぜ現在のような入力方式が一般に広がったのか?とか、どのような原理でローマ字入力から漢字交じりの日本語に変換できるのか?など、様々な疑問が湧いてきます。 今回取り上げる本は、そのような疑問に答えてくれる本です。 この本は2012年出版なので少し古い感じもするかもしれません。実は私も新品を買ったのではなく、最近、Amazon の中古品で購入して読みました。 ちなみに、私は先端の日本語入力技術を理解しているわけではありませんので、最新の技術と比較して、この本がどうなのかはわかりません。 しかし、日本語入力技術の経緯や理論的な考え方を、数式とコードを織り交ぜて丁寧に解説してくれており、興味深く読むことができました。理論中心の教科書と違って、コード例を示してくれることで数式の意味も理解しやすいです。 この本に書かれていることは、日本語入力に限らず、一歩進んだ入力支援機能を考える際のヒントが詰まっていると思いましたので、今回取り上げることにしました。 <本の内容> 本書の構成は「はじめに」に以下のように書かれています。 『本書の前半は日本語入力システム全般の知識を解説し、後半ではかな漢字変換を中心に、そこで使われるアルゴリズムやデータ構造などを掘り下げます。かな漢字変換には、自然言語処理という研究分野で用いられる手法がそのまま使えます。逆に、本書を自然言語処理への入門として読むこともできるでしょう。』 【目次】 第1章 日本語と日本語入力システムの歩み 1.1 コンピュータで日本語を扱うということ 1.2 日本語を入力するということ 1.3 日本語入力とかな漢字変換 1.4 日本語入力のはじまり 1.5 かな漢字変換のはじまり 1.6 単文節変換から連文節変換へ 1.7 2強時代の到来~統計・機械学習ベースのアルゴリズムへ 1.8 Web検索各社のかな漢字変換エンジ...

Firebase Web クライアントのイベントを処理する(RxFire, ReactFire)

本記事では Firebase Web クライアントの通知を処理しやすくなるかもしれない RxFire と ReactFile をみていきます。 【目次】 [1]はじめに [2]Firebase Web SDK をそのまま使う (1)Authentication 通知例 (2)Firestore 通知例 (3)Storage 通知例 [3]RxFire を利用する (1)RxJS と RxFire (2)RxFire のインストール (3)RxFire の利用例 [4]ReactFire を利用する (1)ReactFire (2)ReactFire のインストール (3)ReactFire の利用例 [1]はじめに 私が Firebase は面白いと感じることの一つに、様々な通知が得られることがあります。 例えば、Firebase Authentication であれば、ログイン、ログアウト状態の変化の通知を受け取ることができます。Firestore であれば、データベースの変更等の通知を受けることができます。 このような通知をうまく利用すれば、面白い動きをするアプリが作れそうな気になります。 一方で、アプリの規模が大きくなるにつれ、ユーザからのアクションとシステム等からの通知に対して一貫性を保って動作する設計や実装を行うことは難しいものです。 そこで本記事では手始めとして、Firebase Web クライアントの通知を処理しやすくなるかもしれない枠組みやライブラリを少しだけ見ておきます。 [2]Firebase Web SDK をそのまま使う Firebase クライアントライブラリから受けられる通知は沢山ありますが、ここではよくありそうな例を3つだけみておきます。 (1)Authentication 通知例 以下のようなコードで、ユーザのログイン状態(ログインした、ログアウトした)の変化の通知を受けることができます。 import { getAuth, onAuthStateChanged } from "firebase/auth"; const auth = getAuth(); const unsubscribe = onAuthStateChanged(auth, (user) =...

JavaScriptで学ぶ関数型プログラミング

イメージ
JavaScriptで学ぶ関数型プログラミング Michael Fogus 著、和田 祐一郎 訳 2014年01月 JavaScriptで学ぶ関数型プログラミング (Amazonで書籍情報を表示) 最近のプログラム、特に UI 系のプログラムでは、map などを使ったコードを当たり前のように目にするようになりました。関数型プログラミングに由来するコードが増えてきたと思います。 関数型プログラミングの考え方は新しいものではありませんが、最近のプログラミング言語は、関数型プログラミングっぽいスタイルのコードが書けるように、これらの機能を標準レベルでサポートする傾向にあると思います。 そうなると、map や filter などを単なる便利な機能という使い方から少しレベルを上げて、関数型プログラミングとはどのようなものか?ということを知りたくなります。 とはいいつつも、実務で Haskell のような言語を使うわけではないので、実務に直接役立ちそうなレベルで関数型プログラミングのエッセンスを知りたい、というのも人情です。 そんな時にお勧めしたいのが今回取り上げる本「JavaScriptで学ぶ関数型プログラミング」です。 以下はこの本のスタンスと思われる記載(5.2)を抜粋したものです。 本書は関数型プログラミングの美徳を熱く説くものではありません。世の中には様々な関数型のテクニックが存在し、それぞれがソフトウェア開発における複雑性を飼いならすための手段となります。しかし同時に、個々の実装においては、よりよい方法があることに気づくこともあります。 普段からあなた自身の個人的な興味とニーズを深く追っておくことで、アプリケーションを構築する際にそのテクニックを使うことが適切であるかどうかを判断できるよう準備しておくことがプログラマーとして賢明であると言えます。 本書は関数型プログラミングの本ですが、同時に、何にもまして、問題とその解決方法を理解する力とそこで使える引き出しを持っているということが、その場その場でとるべき最善のソリューションにつながるものであると信じています。 とはいいつつ、オブジェクト指向スタイルと関数型スタイルの違いに触れながら、JavaScript を使って関数型プログラミングの美徳を熱く説いています(笑)。 初版が...

Ubuntu 22.04 LTS 日本語デスクトップ環境のVagrant BOXを作る

イメージ
本記事は、Ubuntu 22.04 LTS のベースBOXから日本語デスクトップ環境のBOXを作成します。このBOXを利用すれば、デスクトップ環境の仮想マシンを素早く作ることができるようになり、さらに、開発ツールを追加したBOXを作成する際のベースBOXとしても利用できます。 【目次】 [1]はじめに [2]仮想マシンの定義 (1)プロジェクトディレクトリの作成 (2)Vagrantfileの作成 [3]仮想マシンの作成 [4]日本語環境の設定 (1)デスクトップへログインして状況確認 (2)言語サポート(日本語)の追加 (3)標準フォルダーの名前を設定 (4)入力ソース(日本語入力)の設定 (5)日付と時間の設定 (6)ソフトウェアの更新や Firefox 文字化け対応など [5]パッケージ化してBOX登録する (1)パッケージ化 (2)BOX登録 [6]BOXから新しい仮想マシンを作ってテストする (1)簡単な動作確認 (2)テスト用仮想マシンの削除 [7]BOX作成用の仮想マシンとプロジェクトディレクトリの削除 [1]はじめに 本ブログでは、Vagrant+VirtualBox+Ubuntu 上に日本語デスクトップ環境を構築する記事として、Ubuntu 18.04 LTS、Ubuntu 20.04 LTS 版を書きました。 Ubuntu 18.04 LTS 日本語デスクトップ環境のVagrant BOXを作る Ubuntu 20.04 LTS 日本語デスクトップ環境のVagrant BOXを作る 本記事はその Ubuntu 22.04 LTS 版です。 基礎的なベースBOXにデスクトップ関連のパッケージを追加する作業は、(特にダウンロードに)かなり時間がかかりますので、一度作ったデスクトップ環境をパッケージ化してBOX登録しておくと、そのBOXからデスクトップ環境の仮想マシンを素早く作ることができるようになります。さらに、このBOXに開発ツールを追加したBOXを作成する際のベースBOXとして利用することもできます。 本記事では、Ubuntu 22.04 LTSを対象として、Vagrant Cloudで提供されているベースBOXから日本語デスクトップ環境を仮想マシンに作りこみ、それをパッケージ化してBOX登録します。 具体的には以下...

Oxigraph を利用して RDFLib の SPARQL クエリを高速化してみる

本記事は Python から RDFLib 経由で Oxigraph を利用する方法のメモです。 【目次】 [1]はじめに [2]Oxigraph、Pyoxigraph、Oxrdflib について [3]利用方法など (1)ライブラリのインストール (2)RDFLib から SPARQL を実行するコード例 [4]感想など [1]はじめに Python で RDF データを処理しようとするとき最初の選択肢は RDFLib だと思います。 rdflib https://rdflib.readthedocs.io/en/stable/# RDFLib はネットに沢山情報があるし、実績もあります。個人的には Google Colaboratory で手軽に使えることが気に入っています。 しかし、トリプル数が少なく、単純な SPARQL クエリを実行するだけなら気になりませんが、それなりに多いデータに対して複雑な SPARQL クエリを実行しようとすると、パフォーマンスが気になることが多いです。 このようなケースは、Apache Jena とか Fuseki を利用すれば素晴らしいパフォーマンスを発揮するので速度面は解決することができます。 Apache Jena https://jena.apache.org/ しかし、対話環境で利用したいとか、SPARQL クエリの実行結果を Pandas に挿入して云々のような、Python ならではの利点を生かそうとすると、環境構築やプラグラミング環境を含めて考えると、あまりお手軽とは言えません。(少なくとも Google Colaboratory 上でお手軽に使うという感覚ではありません。) そこで、Colaboratory 上で動作する Python のライブラリで、RDF ファイルを読み書きでき、 SPARQL クエリが高速に動作するライブラリは無いものかと探してみたところ、Oxigraph を見つけました。 ありがたいことに、Oxigraph は RDFLib のプラグインが提供されており、RDFLib を利用したコードを殆ど変更することなく、内部では OxiGraph を動作させることが可能です。(つまり、RDFLib の API で Oxigraph を使える。) そこで、本...

Python で W3C PROV オントロジーを可視化する(Python PROV)

イメージ
本記事では Python の prov パッケージを利用して、PROV 情報を可視化する方法を見ていきます。 【目次】 [1]はじめに [2]Prov Python package の利用 (1)Prov Python package のインストール (2)PROV-N の概要 (3)Python で PROV 情報を作成する [3]可視化してみる (1)Graphviz、pydot のインストール (2)図(画像)をPNG ファイルとして出力する (3)属性の追加と日本語表示 [4]RDFファイルを読み込んで可視化する (1)PROV 情報を RDF ファイルとして保存する (2)RDFファイルから読み込んで可視化する [1]はじめに W3C PROV オントロジーを利用すると、物事の来歴情報を記述することができます。 PROV 仕様は来歴表現に関するデータモデルやシリアライズフォーマットが定義されていますので、機械可読な来歴情報を表現できます。 PROV-Overview An Overview of the PROV Family of Documents https://www.w3.org/TR/prov-overview/ ただし、一般に、形式的な表現のままでは人間が理解しやすいとは限りません。 これは PROV の仕様が複雑という意味ではなく、人間は、情報量が多くなると全体像を把握しづらくなるということかと思います。 これに対して PROV の表現を可視化(図示)するための推奨事項が公開されています。 PROV Graph Layout Conventions https://www.w3.org/2011/prov/wiki/Diagrams このような PROV 情報の可視化を行えば、全体像を把握しやすくなると思います。 前回の記事『 Git2PROV を例に W3C PROV オントロジー表現の基本を知る 』では、Git のコミット履歴に関する PROV 表現例を図を中心に概観しました。 簡単な来歴の図は手作業で書くこともできますが(前回の記事は手作業で書きました)、データが複雑になると手作業で書くのは無理です。 これは作図作業に時間がかかる、というだけでなく、誤りのもとになります。 そこで本記...