« 翻訳ツールと辞書StarDictで英字郎をつかう »

OmegaTで英字郎を変換したStarDict辞書を使う

2014/12/29

  14:35:00 by , Categories: Freesoftware and Open Source Software, Linux

OmegaTでは、StarDict辞書を使えることを前回触れました。
前回は、英字郎の辞書ソース(TXT形式)をstardict形式に変換できました。

StarDictで使うためには、 /usr/share/stardict/dic/ へ、前回作製したファイルを配置することで使い始めることができます。

さて、OmegaTでは、プロジェクトディレクトリのdictionaryへ配置すれば良いことを前回に述べました。しかしながら、おそらくそのままでは、一向に利用できないものと思います。

というのは、


14101: 情報: Loaded dictionary from '/home/miurahr/translate/dictionary/reiji-136.ifo': 10490ms
14101: FINER: File '/home/miurahr/translate/dictionary/eiji-136.dict.dz' added
14101: FINER: File '/home/miurahr/translate/dictionary/reiji-136.idx' added
14101: FINER: File '/home/miurahr/translate/dictionary/reiji-136.dict.dz' added
14101: FINER: File '/home/miurahr/translate/dictionary/waei-136.idx' added
14101: FINER: File '/home/miurahr/translate/dictionary/waei-136.ifo' added
14101: エラー: Uncatched exception in thread [DirectoryMonitor]
14101: エラー: java.lang.OutOfMemoryError: Java heap space
14101: エラー: at java.util.Arrays.copyOf(Arrays.java:2271)
14101: エラー: at java.io.ByteArrayOutputStream.grow
(ByteArrayOutputStream.java:113)
14101: エラー: at java.io.ByteArrayOutputStream.ensureCapacity
(ByteArrayOutputStream.java:93)
14101: エラー: at java.io.ByteArrayOutputStream.write
(ByteArrayOutputStream.java:140)
14101: エラー: at org.omegat.util.LFileCopy.copy(LFileCopy.java:90)
14101: エラー: at org.omegat.core.dictionaries.StarDict.readFile
(StarDict.java:193)
14101: エラー: at org.omegat.core.dictionaries.StarDict.readHeader
(StarDict.java:95)
14101: エラー: at org.omegat.core.dictionaries.DictionariesManager.fileChanged
(DictionariesManager.java:96)
14101: エラー: at org.omegat.util.DirectoryMonitor.checkChanges
(DirectoryMonitor.java:156)
14101: エラー: at org.omegat.util.DirectoryMonitor.run
(DirectoryMonitor.java:96)

こんなふうにメモリ不足エラーになってしまうからなのです。

OmegaTは、いまのところ辞書をすべてメモリー上に読みこもうとします。
英字郎のように大きな辞書を読もうとすると、既定のメモリ上限にすぐに達してしまいます。

そこで、/usr/bin/omegat/usr/local/bin/omegat(インストール方法によりパスは異なる)をエディタで開いて(スーパーユーザで編集してください)、メモリ上限を上げる必要があります。

既定では


#!/bin/bash
# readlink follows any symbolic links to get the real file
REALOMEGATPATH=`dirname "$(readlink -nf $0)"`
java -jar -Xmx512M "${REALOMEGATPATH}/OmegaT.jar" $*

こんなになっていますので


#!/bin/bash
# readlink follows any symbolic links to get the real file
REALOMEGATPATH=`dirname "$(readlink -nf $0)"`
java -jar -Xmx2048M "${REALOMEGATPATH}/OmegaT.jar" $*

のように上限設定を2GBへ変更してやります。 32ビットのWindowsなど、古いPCでは、利用可能なメモリが少な過ぎで利用できませんから、64bitのLinuxなど最新のOSと、メモリ搭載量の多い比較的新しめのPCを使ってみてください。

さて、これで辞書の利用はできるようになりますが、辞書引きが利用できるようになるために、最初にすごく時間がかかります。


37202: 情報: Loaded dictionary from '/home/miurahr/translate/dictionary/reiji-136.ifo': 6587ms
37202: FINER: File '/home/miurahr/translate/dictionary/eiji-136.dict.dz' added
37202: FINER: File '/home/miurahr/translate/dictionary/reiji-136.idx' added
37202: FINER: File '/home/miurahr/translate/dictionary/reiji-136.dict.dz' added
37202: FINER: File '/home/miurahr/translate/dictionary/waei-136.idx' added
37202: FINER: File '/home/miurahr/translate/dictionary/waei-136.ifo' added
37202: 情報: Loaded dictionary from '/home/miurahr/translate/dictionary/waei-136.ifo': 17402ms
37202: FINER: File '/home/miurahr/translate/dictionary/ryaku-136.idx' added
37202: FINER: File '/home/miurahr/translate/dictionary/eiji-136.ifo' added
37202: 情報: Loaded dictionary from '/home/miurahr/translate/dictionary/eiji-136.ifo': 45780ms
37202: FINER: File '/home/miurahr/translate/dictionary/ryaku-136.ifo' added
37202: 情報: Loaded dictionary from '/home/miurahr/translate/dictionary/ryaku-136.ifo': 5818ms
37202: FINER: File '/home/miurahr/translate/dictionary/ryaku-136.dict.dz' added

わたしの2010年ころの4コアの Core i7, SSD diskの利用でも80秒ほどかかっています。2GB分近くメモリ上にデータを読み込んで展開しているわけで、当然と思います。

このあたりは、辞書そのものをメモリーに読み込まず、一時ファイルに圧縮展開後、mmap するような作りにすべきだと思います。OmegaTはJavaで書かれているので、すこし難しいのかもしれないですね。

Trackback address for this post

Trackback URL (right click and copy shortcut/link location)

Feedback awaiting moderation

This post has 1 feedback awaiting moderation...


Form is loading...