投稿

ラベル(Python)が付いた投稿を表示しています

日本語入力を支える技術

日本語入力を支える技術 ~変わり続けるコンピュータと言葉の世界 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検索各社のかな漢字変換エンジ...

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 表現例を図を中心に概観しました。 簡単な来歴の図は手作業で書くこともできますが(前回の記事は手作業で書きました)、データが複雑になると手作業で書くのは無理です。 これは作図作業に時間がかかる、というだけでなく、誤りのもとになります。 そこで本記...

Python でグラフデータベース(AuraDB, Docker版Neo4j)を使ってみる

イメージ
本記事では Neo4j、AuraDB を試す環境を準備して Python の簡単なプログラムを動かしてみます。 【目次】 [1]はじめに [2]AuraDB を無料で使ってみる [3]ローカル環境の Docker で Neo4j を使ってみる (1)使い捨て的な利用例 (2)データを永続化して利用する [4]アプリ(Python)から AuraDB / Neo4j にアクセスしてみる (1)サンプルデータ (2)Python で Cypher クエリを実行してみる [1]はじめに 前の記事『 プロパティグラフ(Neo4j / AuraDB他)の概要を知る:グラフデータベース 』で、プロパティグラフをモデルとするグラフデータベースの本を紹介しました。 本記事では実際に Neo4j、AuraDB を試す環境を作って、簡単なプログラムを動かしてみます。 今回は環境構築作業の負担が極力無い方法として AuraDB と Docker 版 Neo4j を取り上げます。 AuraDB は 登録すれば無料で使える Neo4j のクラウドホスティングです。例えば Google Colaboratory でプログラムを書いて AuraDB を使うことができます。 一方、Neo4j の Docker イメージも提供されていますので、ローカル環境で動作させることもできます。 AuraDB も Docker 版 Neo4j も接続設定を変えるだけで同じプログラムが動きます(動くはず)ので、例えば、ローカル環境でテストして本番にAuraDBを利用することもできます。 AuraDB と Neo4j は基本的には汎用データベースエンジンですが、可視化ツールなど面白そうなツールも組み込まれていて、使ってみると楽しいです。 [2]AuraDB を無料で使ってみる 実際の Neo4j データベースに触れる最も手軽な方法は AuraDB を使う事だと思います。 Fully Managed Graph Database Service | Neo4j AuraDB https://neo4j.com/cloud/platform/aura-graph-database/ AuraDB は Neo4j のフルマネージドなクラウドサービスでいくつかプランがありま...

Schema.org の語彙で RDFS 推論してみる(3):OWL-RL で推論

イメージ
本記事では、OWL-RL、SPARQL/RDFLib、Schema.org 語彙定義を利用して検索や推論を行います。 【目次】 [1]はじめに [2]語彙定義の一部で試してみる (1)Schema.org 語彙定義の一部を抜き出す (2)語彙定義を追加して可視化してみる (3)SPARQL で検索してみる [3]OWL-RL で推論 (1)ここで扱う推論とは:RDF(S) entailment (2)OWL-RL をインストール (3)推論を実行して可視化してみる (4)SPARQL で検索してみる [4]Schema.org 語彙定義を利用した推論や検索 [1]はじめに 本記事は、記事『 Schema.org の語彙で RDFS 推論してみる(2):機械可読な語彙定義ファイル 』の続き(第3回)です。 前回の記事では、Schema.org が提供する RDFS ベースの語彙定義を概観して、Python ライブラリ RDFLib に読み込む方法を見ました。 本記事では、Schema.org の語彙定義を利用した検索や推論を簡単に見ていきます。 なお、本記事では Google Colaboratory + RDFLib で動作を見てきましたので、RDFS 推論には、同じ環境で利用できる OWL-RL を利用します。 第1回 準備 第2回 機械可読な語彙定義ファイル 第3回 OWL-RL で推論 [2]語彙定義の一部で試してみる (1)Schema.org 語彙定義の一部を抜き出す 前回の記事で Schema.org の概念階層を中心に概観し、RDFS ベースの機械可読な定義ファイルもダウンロードできることを見ました。 以降では、これを用いた推論などを見ていきますが、Schema.org の語彙定義には多くの内容が含まれていますので、推論などによって情報がどのように変化するかを具体的に確認したいときは大変です。 そこで動きを確認しやすいように、Schema.org の語彙定義から抜粋した小さな語彙定義を作って見ていく事にします。 ここでは、第1回の記事で取得したデータに現れる概念(タイプ、クラス)について、階層関係(サブクラス関係)に絞って見てみます。 具体的には、以下の概念が出現していました。 Article Orga...

Schema.org の語彙で RDFS 推論してみる(2):機械可読な語彙定義ファイル

イメージ
本記事では Schema.org が提供する RDFS ベースの語彙定義を概観します。 【目次】 [1]はじめに [2]Schema.org の RDFS 語彙定義を概観してみる [3]機械可読な語彙定義ファイルのダウンロード [4]「http」と「https」の混在 (1)JSON-LD のコンテキストを表すURL (2)語彙の IRI (3)雑感 [5]RDFS定義ファイルをRDFLibに読み込んでみる [6]参考:JSON-LDをhttps語彙でRDFLibに読み込む例 [1]はじめに 本記事は、記事『 Schema.org の語彙で RDFS 推論してみる(1):準備 』の続き(第2回)です。 前回の記事で、Schema.org の語彙を使って記述されている Web コンテンツに埋め込まれた JSON-LD を、RDF を扱える Python ライブラリ RDFLib に読み込んで、RDFの可視化や情報抽出の例を見ました。 ところで、Schema.org は RDFS ベースの語彙定義ファイルを提供しており、これを利用すると、さらに進んだ情報利用が可能になります。 そこで本記事では、Schema.org が提供する語彙定義を概観しておきます。 第1回 準備 第2回 機械可読な語彙定義ファイル 第3回 OWL-RL で推論 [2]Schema.org の RDFS 語彙定義を概観してみる Schema.org では、多くの語彙を定義しています。ここでいう語彙とは主に、概念(タイプ、クラス)とそれらの関係です。 (注意)本記事で用いている語彙や概念、タイプ、クラス、関係、プロパティなどの用語は、RDFやOWLの定義に従って厳密に使い分けているわけではありません。 まずはブラウザを利用して、Schema.org がどのような語彙を定義しているのか概観してみます。 Organization of Schemas https://schema.org/docs/schemas.html これによると、現在 797タイプ、1453 プロパティが定義されている云々とありますので、非常に多くの語彙が定義されていることが分かります。 これらを全て見ていくのは大変ですが、これらは無秩序に定義されているわけではなく、体系立...