PC::Software Feed

2016年1月19日 (火)

FreeLing 3.1のコンパイルエラー

英語だけでなくスペイン語・フランス語・ロシア語など、多くの言語の文章データから言葉を取り出して基本形に直してくれるソフトウェア「FreeLing 3.1」。対応言語一覧。Windows、Linux、Mac OS Xなどで動く。

Ubuntu 14でコンパイルするには、以下のように実行する必要があったのでメモ。

LIBS=-lboost_system ./configure
make
sudo make install

最初の./configureで「LIBS=-lboost_system」を付けておかないと、make時に以下のエラー。

dicc2phon.cc:(.text.startup+0x23): undefined reference to `boost::system::generic_category()'

2012年6月10日 (日)

一太郎のヒラギノとLaTeX

一太郎のプレミアム版を買うと、ヒラギノの基本6書体(JIS2004対応版)がついてきて、これは素晴らしいと思う。(1)MS明朝・MSゴシックなんかに比べると、そもそも字母が美しい気がする。それに、(2)MS明朝は全体に字が細いので、本文のフォントとして使うと印刷面が白い印象になるのがイマイチと思っていた。それがヒラギノ明朝W3くらいだと本文にぴったり。しかも(3)グリフが2万種類超ということで、下図のように異体字も自由に選べる。そう滅多に必要にはならないけど、やっぱり人名は正確な漢字を使いたい。

Otf1

しかも、このヒラギノがLaTeXでも使えるのだから、本当に素晴らしい。OTFパッケージを使えば、LaTeX上でもきれいなヒラギノを使うだけでなく、CIDコードを指定することで異体字を自由に選べる。CIDコードを調べるには、一覧表を使うもよし、一太郎(下図)を起動するもよし。

Otf2

なお、LaTeXで使うための設定を続きにメモ。

続きを読む »

2012年5月30日 (水)

Word(*.docx)に画像を貼り付けるときは

*.doc形式のファイルを扱っている際には(=互換モードでは)大丈夫だけど、*.docxという比較的新しい形式のファイルを扱う場合、デフォルトの設定では貼り付けたラスター画像が劣化するので注意が必要。

Result_small

この画像はPDF化して表示サイズを400%にしたときのもの。結構露骨に画質が劣化する。この「劣化」設定を変更するには「ファイル」「オプション」「詳細設定」「イメージのサイズと画質」「ファイル内のイメージを圧縮しない」にチェック。

*.doc形式(互換モード)では画像を圧縮しないのだけど、新版では圧縮する(劣化させる)のがデフォルトの設定になったらしい。気づかなくて結構戸惑った。新機能とかより、こういうのの方をちゃんと「変更点」として広報してほしい気がする。

あと新版にはちらほらバグもあったようで、どうやっても上手くいかなかったことが、*.doc形式(互換モード)で保存し直すなり上手くいくということもあった。バグっぽい挙動でいよいよ詰まったときは*.doc形式(互換モード)を試すのも一手か。

2011年8月10日 (水)

Adobe Acrobat X Pro ― 動作が重すぎて使うのが苦痛

Wordへの変換のような滅多に使わない機能が向上したかわりに、あまりに重くて起動に時間がかかるために、日々のPDF閲覧が非常に不便になった。

Acrobat 9で十分だった。というか、すぐに起動してPDFの中身をスイスイ見れたAcrobat 9の方がはるかに良かった。お金返して欲しいとまで思ったソフトは久しぶり。

[9/24追記]
その後あまり問題なく使えるようになったようだ。しかし、インストール後しばらくは本当にひどかった。起動したように見えるのだが、操作できるようになるまでにしばら~く時間がかかるケースが多くて閉講した。

2010年12月23日 (木)

POS Taggerあれこれ (3) Stanford CoreNLP 1.02

Stanford CoreNLPというものが先月リリースされていたことに気がついた。tokenization、sentence splitting、POS tagging、lemmatization、NER、syntactic parsing、coreference resolutionといった処理を一定に引き受けてくれるAll in Oneツールだ。しかもfree(自由)なライセンス。

ここまでは完璧だったのだが、Webで例示しているコマンドラインがUNIX向けで、Windows用に直すのにまず一苦労。JAVAに慣れている人ならば当然のこととしてすぐに分かるのだろうが、以下のように修正しないと起動しない。

java -cp stanford-corenlp-2010-11-12.jar;stanford-corenlp-models-2010-11-06.jar;xom.jar;jgrapht.jar edu.stanford.nlp.pipeline.StanfordCoreNLP -props conf.txt -file input.txt

あと、動詞については確かに基本形(base forms)を出してくれて、ran(過去形)もrun(基本形)に直してくれる。しかし、比較級や最上級の形容詞については、基本形に直してくれないようだ。TreeTaggerだとbetterをgoodに直してくれるのだが、Stanford CoreNLPではbetterのままだ。この当たりは考え方の違いだろうか。

2009年9月 6日 (日)

WinCVS + OpenSSHでsourceforge.netにアクセス

sourceforge.netのCVSを使って開発をする際には、いちいちパスワード打たなくても変更内容のコミットや、最新ファイルの取得ができる。これが「できる」ということは知っていたのだが、これまでは毎回パスワードを打ちこんで誤魔化していたのを、ようやく実際に「できる」ようにしてみた。

まず、SSHの公開鍵・秘密鍵のペアを作って、公開鍵の方をsourceforge.netに登録する。これはまぁsourceforgeのガイドに載っているとおり。

次に、OpenSSHをインストールした上で、WinCVS 2.xを設定する。設定といっても、以下のようなCVSROOTを指定して、チェックアウトするだけだ。

:ext;command='set HOME=c:/home/hoge& ssh -l USER -i c:/home/hoge/.ssh/id_dsa khc.cvs.sourceforge.net':USER@PROJECT.cvs.sourceforge.net:/cvsroot/PROJECT

USERはsourceforge.netのユーザー名、PROJECTはプロジェクトのUnix名。HOMEはローカルの適当なパスを指定しておけば良く、「c:/home/hoge/.ssh/id_dsa」は秘密鍵のパス。

以上の操作で、いちいちパスワードを打つ必要が無くなる。あるファイルについて、古いバージョンと新しいバージョンの差分(diff)を見ようというときなどは、やはりパスワード無しの方が圧倒的に楽だ。これまでは、バージョンリストを出すのに一度、古いバージョンを取り出すためにもう一度、新しいバージョンを取り出すためにさらにもう一度パスワードを打つ必要があった。我ながらよくやっていたものだ。

つい新しい仕組みに手を出すのに躊躇してしまって、少々手間がかかることが分かっていても、古いやり方のまま誤魔化してしまうということは、時折あるもの。けれど、多くの場合は、早く新しいやり方に以降してしまった方が良いんだろうなぁ。そうは言いつつも、まだCVSなんて使っているわけだが…。せめてSubversionに移行すべきなんだろうか。

なお、上のやり方では、Windows Vista環境では以下のようなエラーが出る(ことがある)。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'id_dsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: id_dsa

OpenSSHが、Vistaのファイルシステムからファイルのパーミッション情報を上手く読み取れないのが原因のようだ。対処法としては、古めのOpenSSHを使えば大丈夫なよう(苦笑)。3.4p1というバージョンなら大丈夫だった。

2009年5月22日 (金)

MySQL4.x以降のMemory(Heap)型テーブル

古いMySQL(3.23)をずっと使っていたのだけれど、これだけ古いと64bit版のバイナリが無い。そこで現行版の5.1をテストしてみたところ、気になった違いは1点だけだった。

Memory(Heap)型テーブルでは、文字列が固定長の「char」形式で保存される。可変長の「varchar」は使用不可で、自動的に「char」に変換される。この「char」形式のカラムのメモリ容量が、4.x以降では少し大きくなっているようだ。「指定した文字数」 x 「1文字が消費する最大バイト数」分の容量が必ず割り当てられるようになったらしい。

日本語EUCの場合、最大で3バイト使う文字があるので、「10文字」と指定した場合、10 * 3 = 30バイト割り当てられる。しかもこの場合、アルファベットだけの文字列を格納する場合も、10文字しか入らない。アルファベットだけで10文字だと、10バイト分の容量なので、残り20バイトが無駄になる。ちょっとメモリがもったいないかな?

なお、バイト数ではなく文字数での指定になるので、事前に「char_length」関数でデータをチェックして、最大何文字格納することになるのか調べておくと良いようだ。

2009年4月26日 (日)

POS Taggerあれこれ (2)

英語コーパス学会第33回大会で、使われているのを見かけたPOS Tagger / Parser:

Sourceforge.netで見つかったもの:

Free(自由)なライセンスで、なおかつ語の基本形を出力してくれるtaggerにはなかなか出会えない。英語の方が自然言語処理の歴史は長そうなもんだけど、むしろJuman・ChaSen・Mecab等を使える日本語の方が恵まれているのかもしれない。これらのフリーソフトウェアの功績は本当に偉大だ。

ともあれ、ここは基本形にこだわらずに、poter-stemmerで妥協しておくのも手だろうか。とはいえ、優先すべき当面の課題がいくつかあるし、そっちに力を入れつつ、英語データの処理についてはもうしばらく検討かな。

2009年4月 7日 (火)

POS Taggerあれこれ (1)

英文から語を取り出して、品詞情報をつけたり、活用している語を基本形(base form)に直してくれたりするPOS Taggerについて。

  • SS Tagger: 基本形出力なしで、再配布は可だけど商用利用は不可。
  • SVMTool: 基本形出力なしだけど、フリー(LGPL)。
  • Lingua::EN::Tagger: 基本形出力なしだけど、フリー(GPL)。
  • Genia Tagger: 基本形出力ありで、再配布は可だけど商用利用は不可。ただしWindows版は古いバージョンのバイナリのみ公開で、このバージョンでは基本形出力なし。
  • TreeTagger: 基本形出力ありだし、多言語対応だけど、再配布不可・商用利用不可
 

基本形出力ありでフリー(自由)なものは、なかなか見あたらない模様。しかし、出来合いの機能を優先して、フリー(自由)であることを諦めるのは、ちょっと躊躇われるところ。自作ソフトはなるべくフリーソフトウェアとして、しかもAll-in-oneパッケージとして配布したい。

もし、「ran 動詞(VBD)」というデータを放り込んだら、「基本形はrunですよ」と教えてくれるソフト(lemmatiser)があればすぐに解決するのだし、ありそうなものなんだけど、うまく見つけられない。CST's Lemmatiserはソフトは公開しているものの、辞書データは自分で作らなきゃいけないらしい。

lemmatiserじゃなくてpoter-stemmerならいくつか見つかる。けれど、stemmerは「played」を「play」には直してくれても、「ran」を「run」にはしてくれないのがちょっと苦しい。

2009年4月 4日 (土)

英文から語を取り出すには

日本語の場合、ChaSenMecabを使えば文章から語(形態素)を取り出して、「これは動詞」「これは名詞」といった品詞情報もつけてくれて、しかも「『走れば』という形に活用してるけど基本形は『走る』だよ」と教えてくれる。非常に簡単。

ところが、同じことを英語データに対して行うのは意外と面倒だった。結構骨が折れたので簡単にまとめておく。

まず、データを1つ1つの文に区切らないといけない。U.S.A.のような略語でもピリオドが使われており、ピリオドがあっても必ずしも文末とは限らないので、ちょっと工夫がいる。これはPerlモジュール「Lingua::EN::Sentence」を使えばまず大抵の場合は大丈夫なようだ。

次に、「children's」といった表記は「children 's」に直さなければいけない。これにはPenn TreebankのtokenizationのページにあるSEDプログラムを使えばよさそう。s2pを使えば、SEDプログラムからPerlプログラムに翻訳できて、Perlでものを造るときにはなお便利。

ここまでくれば、品詞情報を付与するプログラム(POS tagger)に、データを入力できる。POS taggerはいろいろあるが、改変や再配布を含めてフリー(自由)でしかもPerlから使いやすいものとなると、SVMTool(SVM)かPerlモジュール「Lingua::EN::Tagger」(隠れマルコフモデル)あたりか。SVMの方が正確らしいので、SVMToolを当面は使ってみようかというところ。

ただ、SVMTool / Lingua::EN::Taggerのいずれにしても、残念ながら、活用している語を基本形に直してくれる機能は無い。なので、ここからさらにPerlモジュール「Lingua::Stem::En」を使って、それぞれの語を語幹だけに縮めてしまえば、まぁ、一応の目的は達成される。


なんとかいうか、ChaSenやMecabは素晴らしいAll in oneパッケージだったんだなとしみじみ感じるところ。あと、本当はStemmingよりもLemmatizationの方が良さそうなのだが、今のところ、どうも良さそうなLemmatizerが見つからない。機能的にはTreeTaggerが良さそうだが、商用利用や再配布が不可のライセンスではちょっと苦しいだろうか。