Category Archives: 記録 - Page 2

Google Refine活用メモ

Google refineのクラスタリング機能は便利ですが、ファセット(facet)でバリエーションが多い場合は”too many to display”となってしまい実行出来ません。現バージョンでは制限を変えられるようになっていますが、それでもブラウザベースである程度大きなデータに対して処理を行うとブラウザが長時間にわたり重くなるという問題があります。

その一方でソースコードは公開されているので、それを利用することで、上記の問題を回避したクラスタリングが可能になります。

Key collision については、Clusteringから個々のソースを取得して適宜生成します。

kNN については、下記の要領でダウンロードします。

svn checkout http://simile-vicino.googlecode.com/svn/trunk/ simile-vicino-read-only

ちなみに、kNNはGoogle refine中からは、kNNClustererで呼ばれています。

simile-vicino-read-onlyディレクトリに移動して ant を実行すると生成されます。そのままでも良いですが、下記の要領で jar ファイルとしておくのも可搬性が良くなるのでお薦めです。

jar -cvf simile-vicino.jar -C simile-vicino-read-only/build/classes/ .

以上でクラスタリングを下記の要領で実行することが出来ます。

java -cp ./simile-vicino-read-only/lib/secondstring-20100303.jar:simile-vicino.jar edu.mit.simile.vicino.Cluster <Distance> <Source> <radius> <block size>

PPMのときは、以下のライブラリも必要。

java -cp ./simile-vicino-read-only/lib/secondstring-20100303.jar:./simile-vicino-read-only/lib/arithcode-1.1.jar:simile-vicino.jar edu.mit.simile.vicino.Cluster PPM <Distance> <Source> <radius> <block size>

▼ Distanceは以下のいずれか。

  • BZip2
  • GZip
  • Jaccard
  • Jaro
  • JaroWinkler
  • JaroWinklerTFIDF
  • Levenshtein
  • PPM

▼ Sourceは一行一文字列のテキストファイルが想定。

▼ radiusはkNNの半径(倍精度浮動小数点)。

▼ block sizeは文字単位のnグラムによる距離を計算する際の、nの値。

PerlモジュールCrypt::SSLeayの更新とLWP::UserAgentの関係について

Crypt::SSLeay を cpan コマンドで更新すると、問題なく処理が終わるように見えるが、実はこれだけでは LWP::UserAgent で https 通信が適切に行われる状態になるとは限らない。
LWP::UserAgentのドキュメントに下記の通り書かれている。

The libwww-perl core no longer bundles protocol plugins for SSL. You will need to install LWP::Protocol::https separately to enable support for processing https-URLs

というわけでLWP::Protocol::httpsの対応もしなくてはならない。そして、それは、また、更にCrypt::SSLeayIO::Socket::SSLNet::SSLeayが必要になる。

以上の処理を適切に行わないままに例えばNet::OpenID::Consumerを利用すると、そのなかでhttps通信が必要な場合、適切に処理が進まず、ログインしようとすると以下のようなメッセージが表示されることになる。

naive_verify_failed_network: Could not contact provider to verify signature

Hadoop tips

hadoopのバージョンもついに1になった(リンク)。そこで久々に試してみたついでに、複数マシン(cluster構成)でmap-reduceジョブを行う際に気をつけるパラメーターについて新たに知ったことをメモしておくことにする。なお、相変わらずhdfsは使っていないので、それ関係の情報は無い。

  • core-site.xml
  • パフォーマンス向上のために下記パラメーターの値を調整する。

    1. fs.inmemory.size.mb
    2. io.sort.facto
    3. io.sort.mb
    4. io.file.buffer.size
  • mapred-site.xml
  • 下記パラメーターは、クラスタを構成する全てのマシンから共通に見えるパス(シェアディレクトリ)を設定する。

    1. mapred.system.dir
    2. mapred.temp.dir
    3. mapreduce.jobtracker.staging.root.dir
  • lib/native/Linux-amd64-64
  • map-reduce処理を担うプログラム中で必要なライブラリはこのディレクトリ下に配置する。
    mapred-site.xml中のmapred.child.java.optsパラメーターで-Djava.library.pathを設定しても効かなかった。

参考文献はCluster SetupMapReduce Tutorial

2011年分子生物学会発表スライド補足

年会一般口頭発表(Towards Database Integration Through RDF & Linked Data)で紹介したRDF/Linked Dataを通したデータベース統合について8分では伝えきれないこともあったのでここに記しておく。


Read more »

N-TriplesのUnicode表現(\uxxxx)をデコードする

DBpediaをN-Triples形式で取得したらrdfs:labelプロパティの値として言語指定@enでUnicodeが含まれていた。その表現方法は現時点で未決定(下記リンク2のIssues参照)であるが、少なくとも取得ファイルでは\uで始まるエスケープ表現を用いていた。これはN3形式の踏襲で、すなわちそれは、Python Stringsを土台としている。そして更にJSONのStrings表現とも共通しているが、条件として表現対象の文字がBasic Multilingual Plane(0000からFFFF)に含まれている場合に限られる。その他の場合、Python StringsやJSONでは、\uxxxxを繰り返すのに対し(例、U+1D11Eは”\uD834\uDD1E”)、N3やN-Triplesでは\U(大文字のU)から始まる表現(\U00xxxxxx)を採用している。
さて、このようなエスケープ表現を含む文字列をデコードする方法だが、今回はjavaを用いたので、JenaとSesameについて調査した。その結果、Jenaは明示的にエスケープ表現を含む文字列をデコードするメソッドは公開されていないようだ。Sesameについてはとても簡単で、そのものズバリ、unescapeStringメソッドがNTriplesUtilクラスに用意されている。もちろん、RDFデータを読み書きする限りでは、エスケープ表現を含む文字列をそのまま独立して扱うことは稀だろうけれど、今回のように、rdfs:labelプロパティの値だけを抽出したデータを対象として処理するときには便利。因みに、JenaとSesameを比較しているページがあったので参考としてリンクを張っておく。

  1. DBpedia Downloads
  2. N-Triples (1)
  3. N-Triples (2)
  4. Notation 3
  5. Python strings
  6. JSON
  7. Jena
  8. Sesame
  9. unescapeString
  10. Jena vs Sesame

OWLプロパティに関する特性の例を挙げてみた

OWLのプロパティには様々な特性を付加できるが、特に以下の4特性について、それぞれ、どんな例があるのか考えてみた。今後も適宜更新していく予定。

Functional

まずはW3Cスペックにある例を見る。
女性は一人の夫を持てる。
注釈として、文化依存性のあるオントロジーの良い例、と書いてある。

他に考えてみると、主語に人が来るなら、身長/体重/住基IDなど、その人に固有でかつ一つしかないプロパティが該当しそうだ。技術的な話だと、一つのMACアドレスには最大一つのIPアドレスを持てる? 一つの国には一人の首長がいる? この二つのプロパティは特定の時刻においては、という条件が付くな。後は、誕生日とか、あるイベントの起きた日時は常にFunctionalといえそう。

Inverse functional

W3Cスペックの例は、ある人の生物学的母親は一人、と。主語に女性、目的語に人、述語が、biologicalMotherOf。

同じく人を主語としてみると、個人用電話番号やE-mailアドレスなど、それらのプロパティに一つの個人が関連づけられるものが該当しそうだ。それから、ある核種に対するγ線スペクトルのエネルギー量ってのもそうかな。

Symmetric

人主語では、と友人関係にある、というプロパティ。AさんはBさんと友人関係にあるなら、BさんはAさんと友人関係にある。W3Cスペックでこれが例として取り上げられている。

Transitive

W3Cスペックでは、部分ー全体関係を示すプロパティが典型的ということで、あるエリアAはエリアBの一部で、エリアBはエリアCの一部なら、エリアAはエリアCの一部でもある、という例が示されている。

人主語の場合では、同じ場所にいる、というプロパティが成り立つだろう。AさんとBさんが同じ場所にいて、BさんとCさんが同じ場所にいるなら、AさんとCさんも同じ場所にいる。

Protegeを使ってオントロジーを作る

protegeのバージョンアップに伴い、本記事の記述は古くなってしまいました。新規バージョンの利用方法については、こちらを参考にしてください。 2013年10月15日

今回はオントロジー編集ツールとして広く使われているProtegeを用いてオントロジーを作ります。オントロジーの作り方を記録するだけでなく、Protegeの使い方をまとめておく目的もあります。例として、以前にセマンティックウェブ的なウェブサービス提供方法の一つであるSADIに則ったウェブサービスをPerlを用いて構築する際に用いたメタボオントロジーを取り上げます。定義するオントロジーのイメージは図0のような感じです。参考文献はW3CのOWL仕様書になります。

メタボオントロジー概要

図0. メタボオントロジーの概要。

以下のような順序で進みます。編集には、「ラベルをつける」、「関係の定義」も含まれます。

  1. protegeのインストール
  2. ファイル名の設定
  3. 編集
  4. リリース

Read more »

atコマンドで備忘

よくスケジュール管理ツールで指定時間になるとアラームが鳴る設定がされていることがあるが、UNIXコマンドのatもマニアックだけど使える。cronと違って一回限りの実行。

echo "echo 'Do not forget to submit!' | mail -s 'Time to submit' me@example.com" | at 10:30 Aug 15

といった具合に。

at -lもしくは atq コマンドで予約されているジョブの一覧が得られる。
更に、上記コマンドでジョブ番号が分かれば、at -c <ジョブ番号> で実際に実行されるジョブの内容が、実行時の環境変数も含めて詳細に表示される。

時刻指定は上記例のようなHH:MM形式の他に、midnight、noon、teatime (午後4時のお茶の時間)なんてのも使えるようだ。それから、日にちについてはtodayやtomorrowもOKなほか、今から1時間後、といった指定も at now + 1hour という形式で指定出来る。明日のお茶の時間は、at teatime tomorrow となる。

なお、/etc/at.allow や /etc/at.deny による設定次第では、スーパーユーザでないと使えない可能性がある。

WikiPediaの記事

SADIを使ってSW的なウェブサービスを構築する

SADIはSemantic Automated Discovery and Integrationの略で、セマンティックウェブ的な枠組みを利用し、オンラインでアクセス可能なウェブサービスやデータベース(オンライン資源)を統一した方法で活用出来るように提案されているサービス提供形式の一つです。具体的にいうと、オンライン資源へのアクセスはHTTP、入出力のデータフォーマットはRDF、入出力の型の定義はOWLで、という具合です。SADIに沿って構築されたオンライン資源のエンドポイントにHTTP GETすると、入出力の型や処理内容がRDF形式で得られ、処理させたいデータを同エンドポイントにHTTP POSTすると、実際の処理が行われ、結果が得られます。また、入力データと出力データの関係が陽に分かるように、両者のRDFにおける主語は同じでなければならない、という規定があります。つまり、例えば「山本の身長と体重はそれぞれ170cm、60Kgである」というRDFを入力データとしてBMI (Body mass index)計算サービスエンドポイント(ここでは仮に http://example.org/getBMI とします)に与えると、「山本のBMIは20.76である」、「山本の体重クラスは標準である」というRDFが出力として得られるということを述べています。この場合、いずれも主語は山本になります。

今回はSADIのPerlモジュールを使い、略語を与えると対応する展開形のリストが得られるAllieサービスを試しにSADI対応させてみたので、その際に得られた知識をここに記します。なお、SADIに対応させるために入出力データの型をOWLで定義しますが、そのためにはオントロジーエディタのProtegeを使うと便利です。というのも、Protege用のSADIプラグインが配布されていて、サービスをSADI対応させる際に必要な作業を支援する機能が利用出来るからです。例えば、ブラウザなどを使うことなく、構築したエンドポイントを簡単に試せる機能が提供されています。本プラグインの利用方法についてはこちらを参考にしてください。今回は本ページからリンクが張られているこちらを参考にして作業しました。

SADIのPerlモジュールをインストール
Read more »

SPARQLクエリで検索対象データの特徴を取得

RDFトリプルストアのVirtuosoをインストールして利用可能になるSPRQLエンドポイントに予め記入されているクエリとして以下のものがある。

SELECT DISTINCT ?C WHERE {[] a ?C}

意味のある結果が得られるためには検索対象に rdf:type (つまり a ) が使われているトリプルがある場合のみに限られるが、参考程度には使える。

例えば、様々なSPARQLエンドポイントの状態を一覧で得られるサイトのSPARQLエンドポイントで得られる結果は以下の二つのみ。

http://rdfs.org/ns/void#Dataset
http://labs.mondeca.com/vocab/endpointStatus#EndpointStatus

思ったよりも少なかった。また、最近SPARQLエンドポイントを立ち上げた国立国会図書館においては以下の通り。
http://xmlns.com/foaf/0.1/Organization
http://xmlns.com/foaf/0.1/Person
http://RDVocab.info/uri/schema/FRBRentitiesRDA/Family

こちらもシンプル。オントロジーも併せて検索対象にしておいて頂けると、クエリを組み立てる際に非常に役立つと思う。

因みにAllieSPARQLエンドポイントでは以下の結果が得られる。

http://www.openlinksw.com/schemas/virtrdf#QuadMapFormat
http://www.openlinksw.com/schemas/virtrdf#array-of-QuadMapFormat
http://www.openlinksw.com/schemas/virtrdf#QuadMap
http://www.openlinksw.com/schemas/virtrdf#QuadMapValue
http://www.openlinksw.com/schemas/virtrdf#array-of-QuadMapColumn
http://www.openlinksw.com/schemas/virtrdf#QuadMapColumn
http://www.openlinksw.com/schemas/virtrdf#array-of-QuadMapATable
http://www.openlinksw.com/schemas/virtrdf#QuadMapATable
http://www.openlinksw.com/schemas/virtrdf#QuadMapFText
http://www.openlinksw.com/schemas/virtrdf#array-of-string
http://www.openlinksw.com/schemas/virtrdf#QuadStorage
http://www.openlinksw.com/schemas/virtrdf#array-of-QuadMap
http://www.w3.org/1999/02/22-rdf-syntax-ns#Property
http://www.w3.org/2002/07/owl#Class
http://www.w3.org/2002/07/owl#Ontology
http://www.w3.org/2000/01/rdf-schema#Class
http://www.w3.org/2002/07/owl#OntologyProperty
http://www.w3.org/2002/07/owl#AnnotationProperty
http://www.w3.org/2002/07/owl#Restriction
http://www.w3.org/2002/07/owl#ObjectProperty
http://www.w3.org/2002/07/owl#DatatypeProperty
http://www.w3.org/2002/07/owl#InverseFunctionalProperty
http://purl.org/allie/ontology/201102#PubMedID
http://purl.org/allie/ontology/201102#ShortForm
http://purl.org/allie/ontology/201102#Pair
http://purl.org/allie/ontology/201102#PairList
http://purl.org/allie/ontology/201102#PubMedIDList
http://purl.org/allie/ontology/201102#ResearchArea
http://purl.org/allie/ontology/201102#CooccurringShortFormList
http://purl.org/allie/ontology/201102#LongForm
http://purl.org/allie/ontology/201102#PairCluster

openlinksw.comドメインを持つクラスはVirtuoso固有にビルトインされているクラスで、その他、owlやrdf、rdfsに含まれるクラスとともに、Allieで用いられているクラスのリストが列挙されている。

また、

select distinct ?P where {?P a owl:ObjectProperty}

や、

select distinct ?P where {?P a owl:DatatypeProperty}

とすれば術語の一覧が得られる。