差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
freewnn [2023/10/05 20:38] skkfreewnn [2023/11/01 01:59] (現在) skk
行 1: 行 1:
-= [[FreeWnn]]+= [[FreeWnn]] LM: [2023-11-01 01:58:45] 
 +~~NOCACHE~~
  
 ====== - 概要 [2023-10-05] ====== ====== - 概要 [2023-10-05] ======
行 7: 行 8:
 論文など,長い文章を書く際,egg/FreeWnn のペアで書いていたため,ゆっくりと文章を考えたい場合,どうしてもこのセットを使いたくなる.今はもうほとんど使ってる人いないだろうな… 論文など,長い文章を書く際,egg/FreeWnn のペアで書いていたため,ゆっくりと文章を考えたい場合,どうしてもこのセットを使いたくなる.今はもうほとんど使ってる人いないだろうな…
  
-現在,インターネット上の FreeWnn に関する情報はかなり消え去りつつあり,よしだともこさんが残してくれている,http://www.tomo.gr.jp/FreeWnn/ こちらかなりの情報が残っている状態.+現在,インターネット上の FreeWnn に関する情報はかなり消え去りつつあり,よしだともこさんが残してくれている,http://www.tomo.gr.jp/FreeWnn/ こちらかなりの情報が残っている状態.むしろ,ソースコード内の mannual ディレクトリ内の情報がとても充実しているので,参考にするべきと思われる. 
 + 
 +====== - 構造メモ [2023-10-16] ====== 
 + 
 +たまに把握した構造を書いておく場所: 
 + 
 +  * jserver は,変換をつかさどるサーバ.TCP などで複数のクライアントからの変換を受ける. 
 +  * クライアント実装はいくつか存在するっぽい. 
 +    * uum は,FreeWnn の C ライブラリを用いた変換クライアント実装っぽい.jlib 内の関数を用いて jserver に接続する. 
 +    * egg/tamago は,jlib 内の C 実装を何も使わず,全て elisp で書かれたクライアント.そう言えば,tamago v3 は C のライブラリがあって,v4 からは全て elisp と書いてある記事を見たことがある気がする. 
  
 ====== - 環境構築 [2023-10-05] ====== ====== - 環境構築 [2023-10-05] ======
  
 FreeBSD なら ports で,Linux なら少なくとも Ubuntu ではまだバイナリパッケージが提供されているので,そちらからインストールすると良い. FreeBSD なら ports で,Linux なら少なくとも Ubuntu ではまだバイナリパッケージが提供されているので,そちらからインストールすると良い.
 +
 +僕はサーバは基本的に FreeBSD を利用しているが,仕事では Windows を使わなければならず,Windows の中で Unix 的なコマンド環境を利用するなら,今は WSL1 or 2 を利用することになる.その際に Linux/Ubuntu を利用している.
  
 ソースからコンパイルする場合,以下のように打っていけば多分コンパイルされると思われる.gcc などが必要といわれたら,適宜インストールすること. ソースからコンパイルする場合,以下のように打っていけば多分コンパイルされると思われる.gcc などが必要といわれたら,適宜インストールすること.
行 20: 行 33:
 </code>  </code> 
  
-====== - 辞書 [2021-05-29======+===== - jutil の準備 (Ubuntu) [2023-10-11] ====
  
-FreeWnn デフォルトの辞書は,いまの Google IME/Mozc や MS-IME のような豊富辞書はていない.数万語程度+Ubuntu 場合,atod や dtoa などの辞書を扱うためのコマンド群がパッケージに含まれてないので,自分でコンパイルする.ただし,''make install'' でしてしまうと,パッケージで管理したい FreeWnn を上書してしまことにるので,atod どのコマンドのみ <HOME>/bin 以下におくと良い.
  
-===== - Wnn4 の辞書 =====+コンパイルをしようとすると,以下のようなエラーが出るかもしれない. 
 + 
 +<code bash> 
 +make FZK_FLAG=-DKANSAI std.fzk 
 +make[3]: ディレクトリ '/home/skk/download/freewnn/FreeWnn-1.1.1-a021/Wnn/pubdicplus' に入ります 
 +gcc -E -DKANSAI fzk.master-.c | egrep -v '^(# |#line |#pragma |$)' | ../..//Wnn/jutil/atof -h ../..//Wnn/jd/hinsi.data std.fzk 
 +Bad format near line 228 "@̿"
 +Segmentation fault 
 +</code> 
 + 
 +これは,GNU grep の仕様が昔と比べて変わったという話なので,'/usr/local/bin/ggrep -E' などに書き換えればいいのかもしれない.FreeBSD でも同じエラーが出たが,僕が GNU grep を ports で入れていたからなので,'pubdicplus/Makefile' の該当部分を '/usr/bin/egrep' に書き換えたら,すんなりコンパイルが通った.多分,Linux でも ggrep に書き換えれば通るのではないだろうか(試してない).([2023-10-18]) 
 + 
 +その際,atod/dtoa は hinsi.data ファイルを利用するようなので,ソース内の ''Wnn/jd/hinsi.data'' を利用すればよい.atod/dtoa を良く利用するならば,''LIBDIR'' で指定されている ''/usr/local/lib/wnn/ja_JP/'' 以下に hinsi.data をコピーまたはシンボリックリンクなどで読み込めるようにしておくと,コマンドを使うたびに hinsi.data を指定しなくて良くなる. 
 + 
 +man は ''Wnn/man/'' 以下に存在していて,各コマンドなどは,6.jutil の中に格納されている.ただし,man でインストールされることを前提としているため,単に less するだけだと読みにくい.man は roff とかいうフォーマットのため,整形ツールを通す必要がある.今は,UTF の時代なので,以下のようなコマンドである程度閲覧しやすくなる. 
 + 
 +<code shell> 
 +nkf -w atod.man | groff -Dutf8 -Tutf8 -mandoc -mja -E | jless -R  
 +</code> 
 + 
 +-r/-R を less につけることで,色だったり強調表示が ESC のような化けた感じになるのを抑制できる.[[https://yanor.net/wiki/?UNIX/less%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7ls%E3%82%84man%E3%82%92%E8%89%B2%E4%BB%98%E3%81%8D%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B|参考]]. 
 + 
 +====== - 辞書 [2023-11-01] [2021-05-29] ====== 
 + 
 +ソースコード内の Wnn/manual/intro の辞書の部分を見ると,FreeWnn の辞書は,登録可能形式と,固定形式,の二つに大きく分かれてるようである.登録可能形式は,最初に Wnn を利用する際に作成される ud のように,M-x egg-toroku-region などで単語を追加していける辞書のこと.固定形式は,辞書自体は変更できず,頻度情報を各ユーザ毎に保存しておく形式のこと. 
 + 
 +FreeWnn をインストールすると,pubdic(場所は以下の節参照)などに kihon.dic,computer.dic などの辞書が一緒にインストールされる.(デフォルトで有効になってない辞書も含まれているが)以下がインストールされる辞書群で,全部足して 47724 語程度(数十文字程度誤差あり)である. 
 + 
 +<code bash> 
 +% for HOGE in bio.dic chimei.dic computer.dic g-jinmei.dic jinmei.dic kihon.dic koyuu.dic setsuji.dic special.dic supplement.dic tankan.dic tankan2.dic tankan3.dic 
 +for> do 
 +for> wc -l $HOGE 
 +for> done 
 +     514 bio.dic 
 +     895 chimei.dic 
 +     698 computer.dic 
 +    1561 g-jinmei.dic 
 +     619 jinmei.dic 
 +   17892 kihon.dic 
 +      21 koyuu.dic 
 +     208 setsuji.dic 
 +      19 special.dic 
 +   19321 supplement.dic 
 +    1250 tankan.dic 
 +    1388 tankan2.dic 
 +    3338 tankan3.dic 
 +</code> 
 + 
 +===== - FreeWnn ユーザ辞書 =====
  
 Wnn の辞書データの文字コードは EUC.各種ドキュメントには UJIS と書かれている. Wnn の辞書データの文字コードは EUC.各種ドキュメントには UJIS と書かれている.
  
 インストール先: インストール先:
-  * 辞書データ+  * 標準辞書データ
     * FreeBSD: /usr/local/lib/wnn/ja_JP/dic/pubdic     * FreeBSD: /usr/local/lib/wnn/ja_JP/dic/pubdic
     * Ubuntu Linux: /usr/share/wnn/ja_JP/dic -> 実態は /var/lib/wnn 以下.     * Ubuntu Linux: /usr/share/wnn/ja_JP/dic -> 実態は /var/lib/wnn 以下.
行 35: 行 96:
     * FreeBSD: /usr/local/bin/Wnn4/      * FreeBSD: /usr/local/bin/Wnn4/ 
     * Ubuntu: atod/dtoa などはパッケージではインストールされない.ソースからコンパイルすれば良い.     * Ubuntu: atod/dtoa などはパッケージではインストールされない.ソースからコンパイルすれば良い.
 +  * ユーザ辞書
 +    * FreeBSD: /usr/local/lib/wnn/ja_JP/dic/usr/<user>/ud
 +    * Ubuntu Linux: /usr/share/wnn/ja_JP/dic/usr/<user>/ud 
 +
  
 辞書変換ツール: 辞書変換ツール:
行 132: 行 197:
 あくせっしんぐ          アクセッシング          名詞            1 あくせっしんぐ          アクセッシング          名詞            1
 </code> </code>
 +
 +[2023-11-01] ''\comment'' は,''M-x egg-toroku-region'' の際に選択する辞書に表示される情報として利用されている.
 +
 +参考:
 +  * [2023-10-06] [[https://docs.oracle.com/cd/E19455-01/806-2800/6jc09qd0b/index.html|Wnn6の辞書の説明]]
 +
 +===== - 固定辞書 の扱い [2023-11-01] =====
 +
 +ユーザ辞書は,dtoa/atod などのツールを用いて,バイナリ辞書形式とテキスト形式を相互変換できるので,別のホストにそこまで苦労せずに移行できるが,固定辞書の頻度情報をテキストに変換する方法は,[2023-11-01] 現在,見つかっていない.唯一可能なのが,固定辞書とユーザ毎の頻度情報を dtoa に両方指定し,ユーザの頻度情報を付与されたテキスト辞書データの出力である.Wnn が開発された時代は,かな漢字変換サーバを複数人で共有し,頻度情報を分離するのは効率的なリソース管理方法だったと思われるが,今でも FreeWnn を利用している人は,自分のマシンに FreeWnn をインストールし,一人だけで利用していると思われる.その場合,固定辞書を利用する必要はなく,すべての辞書をユーザ辞書として管理する方が,別の環境に移行する際に,頻度情報を含めた辞書データの移行が容易になると考えられる.
 +
 +固定辞書からユーザ辞書に変更したくなり,すでに FreeWnn で日本語入力を行なっている場合,それぞれのユーザディレクトリに各辞書の頻度情報が書かれた .h ファイルがされている.これを辞書データにマージした上でユーザ辞書にするには,以下のようにすれば良い.
 +
 +<code bash>
 +% cd /usr/local/lib/wnn/ja_JP/dic/usr/<user>
 +% /usr/local/bin/Wnn4/dtoa ../../pubdic/kihon.dic kihon.h | sudo /usr/local/bin/Wnn4/atod kihon.dic
 +</code>
 +
 +===== - FreeWnn の付属語辞書 [2023-10-18] =====
 +
 +30 年前の Wnn が作られた際にほとんど使われてなかった語尾の用法が,今となってはいくつか存在する.例えば,「僕はビールが大好きです」の語尾を「〜っす」にしてみると「僕はビールが大素キッス」と変換されてしまった.「っす」の部分を入れずに変換していけば良いのだが,急いで入力する時は入力したくなる.
 +
 +単語については前の節のように名詞・固有名詞などで登録していけばいいので単純だが,付属語については結構難しそう.そもそも,Wnn が変換時に付属語をどのように利用しているかの理解も必要になる.
 +
 +Wnn の辞書としては,.fzk という拡張子になっている.かなり詳細なデータ構造については,''Wnn/manual/2.env/wnn/fzk.u''に書かれているので,全部理解したらきっと簡単に登録できるのだろう.
 +ざっと見た感じ,助動詞と他の単語のつながりがどういうケースがあるのかを記載しているファイルのように見える.そのつながりが「接続ベクトル」というものかもしれない.''Wnn/pubdicplus/fzk.master-.c'' が接続ベクトル定義ファイルになっていて,C のマクロである.
 +
 +<code c>
 +;;; Last modified date: 8,Feb.1999
 +;;;
 +;;;
 +;
 +;               Wnn version 4 接続ベクトル定義ファイル
 +;                   Pubdic Version    1989/11/7
 +;
 +#ifdef comment
 +        このファイルは、生の定義ファイルではなく、以下のマクロの
 +        定義/未定義により、それぞれの目的に応じた接続ベクトル定義
 +        ファイルを cpp を使って生成するようになっている。
 +
 +        マクロ名        意味
 +        =======================================================
 +        KOUGO           口語で、ややくだけた表現
 +        KANSAI          主に関西地方で使われる口語表現 (KOUGO を仮定)
 +#endif
 +
 +#if KANSAI && !KOUGO
 +#define KOUGO
 +#endif
 +
 +#include "fzk.attr"
 +#include "fzk.jirattr"
 +#include "fzk.fzkattr"
 +#include "fzk.jircon"
 +#include "fzk.con"
 +#include "fzk.shuutan"
 +
 +\bye
 +</code>
 +
 +fzk データを作成する方法のドキュメントはパッと見つからなかったので,make 時に出力されるコマンド履歴を参考にした.見付けたのは以下.
 +
 +<code bash>
 +make FZK_FLAG=-DKANSAI std.fzk
 +cc -E -DKANSAI fzk.master-.c | /usr/bin/egrep -v '^(# |#line |#pragma |$)' | ../..//Wnn/jutil/atof -h ../..//Wnn/jd/hinsi.data std.fzk
 +mv -f std.fzk full.fzk
 +make FZK_FLAG=-DKOUGO std.fzk
 +cc -E -DKOUGO fzk.master-.c | /usr/bin/egrep -v '^(# |#line |#pragma |$)' | ../..//Wnn/jutil/atof -h ../..//Wnn/jd/hinsi.data std.fzk
 +mv -f std.fzk kougo.fzk
 +cc -E  fzk.master-.c | /usr/bin/egrep -v '^(# |#line |#pragma |$)' | ../..//Wnn/jutil/atof -h ../..//Wnn/jd/hinsi.data std.fzk
 +</code>
 +
 +C のコンパイル部分と,grep で不要な行を削除したデータを,atof に渡すと付属語辞書が出来上がるらしい.
 +
 +取り急ぎ,''cc -E -DKOUGO fzk.master-.c | nkf -w'' として中身を見てみると,以下のような行がいくつか見つかった.以下は「〜っす」の元の日本語の「です」を検索したもの.
 +
 +
 +<code>
 +でしょ/助動詞です未然でしょ/@助動です幹.で: :助動である,ある止体:五段さ変等止体:一段等止体:助動ます止体:
 +
 +\伝聞助動そうだ,そうです幹
 +そう/伝聞助動詞そうだ・そうです語幹/助動ます止体:助動ない止体: :形動,助動だ止:助動た,だ止体: :助動である,ある止体:五段さ
 +変等止体:一段等止体:形体止:
 +</code>
 +
 +…これを「〜っす」に関して書くのはかなり骨が折れそうな気がするので,また時間が取れる時にやってみるかな…
 +
 +[2023-10-20] 追記:上の fzk.master-.c は複数のファイルに対してマクロ展開しているので,元のデータをもうちょっと見るべきだなと思った.ざっと中身を見てみた感じ,以下のファイルに「です」が存在していて,怪しい感じ.
 +
 +  * fzk.con
 +    * ;;; 付属語に関する接続情報
 +    * 他の言葉とのつながりに関する情報か?
 +  * fzk.fzkattr
 +    * ;;; 付属語名定義 および 各付属語の属性定義
 +    * 単品での付属語の定義が書かれてる.短い.
 +  * fzk.shuutan
 +    * ;;; 終端ベクタ
 +    * 終端ベクタ,というものがまだ理解できてないけど,ここにも「です」がいる.
 +
  
  
行 168: 行 331:
 参考: 参考:
   * [[https://null-i.net/index.html?Linux/Mozc%E8%BE%9E%E6%9B%B8%E3%83%87%E3%83%BC%E3%82%BF%E3%81%A7%E6%BC%A2%E5%AD%97%E5%A4%89%E6%8F%9B|null-i.net]]さんの説明がほぼ完璧に見える.   * [[https://null-i.net/index.html?Linux/Mozc%E8%BE%9E%E6%9B%B8%E3%83%87%E3%83%BC%E3%82%BF%E3%81%A7%E6%BC%A2%E5%AD%97%E5%A4%89%E6%8F%9B|null-i.net]]さんの説明がほぼ完璧に見える.
-  * [[https://irukanobox.blogspot.com/2019/08/mecab.html|Mozcの辞書を使ってMeCabでかな漢字変換する]]+  * [[https://irukanobox.blogspot.com/2019/08/mecab.html|MeCabで固有名詞を単語として扱えるようにする]] 
 +  * [[https://qiita.com/yukinoi/items/14a07958727bef5f8e9c|Mozcの辞書を使ってMeCabでかな漢字変換する]]
  
 ===== - mozc 辞書からの変換 =====  ===== - mozc 辞書からの変換 ===== 
行 210: 行 374:
  
 <TBD> <TBD>
 +
 +参考:
 +
 +  * [[https://startide.jp/comp/im/userdic/|startide さんの辞書変換スクリプト]] ただし,Wnn についてはうまく動かなかった.
  
 ==== - Wnn 辞書へ変更 ==== ==== - Wnn 辞書へ変更 ====
行 256: 行 424:
 追ってないのだが,何故か Wnn 側の設定ファイルで辞書の登録はする必要がない.emacs から使うことだけを考えるなら,egg の ''eggrc'' という設定ファイルだけ変更すれば良い.50 行目程度のところに,以下のように追記すれば良い. 追ってないのだが,何故か Wnn 側の設定ファイルで辞書の登録はする必要がない.emacs から使うことだけを考えるなら,egg の ''eggrc'' という設定ファイルだけ変更すれば良い.50 行目程度のところに,以下のように追記すれば良い.
  
-<code>+<code lisp>
  (wnn-add-dict "mozcdic/mozc_ippan_meishi.dic" '("mozc_ippan_meishi.h") 1 nil t)  (wnn-add-dict "mozcdic/mozc_ippan_meishi.dic" '("mozc_ippan_meishi.h") 1 nil t)
  (wnn-add-dict "mozcdic/mozc_koyu_meishi.dic" '("mozc_koyu_meishi.h") 1 nil t)  (wnn-add-dict "mozcdic/mozc_koyu_meishi.dic" '("mozc_koyu_meishi.h") 1 nil t)
 +</code>
 +
 +[2023-11-01] [[https://www.sakaki.works/doku/doku.php?id=freewnn#%E5%9B%BA%E5%AE%9A%E8%BE%9E%E6%9B%B8_%E3%81%AE%E6%89%B1%E3%81%84_2023-11-01|辞書の節]]で書いたように,固定辞書をユーザ辞書に変換した場合,eggrc の記述を以下のように変更すると,例えば,kihon.dic の頻度情報が kihon.dic の中に追記されていくので,別のホストに辞書を持っていっても,頻度情報が引き継がれることになる.この時,ud を一番前に持ってきておくと,''M-x egg-toroku-region'' した時に,''ud'' が一番最初に候補に出てくるようになる.
 +
 +
 +<code lisp>
 +  (wnn-add-dict '("ud"           nil             5 t t)
 +  (wnn-add-dict '("kihon.dic"    nil             5 t t)
 +  (wnn-add-dict '("setsuji.dic"  nil             5 t t)
 +  (wnn-add-dict '("koyuu.dic"    nil             1 t t)
 +  (wnn-add-dict '("chimei.dic"   nil             1 t t)
 +  (wnn-add-dict '("jinmei.dic"   nil             1 t t)
 +  (wnn-add-dict '("special.dic"  nil             5 t t)
 +  (wnn-add-dict '("computer.dic" nil             5 t t)
 +  (wnn-add-dict '("symbol.dic"   nil             1 t t)
 +  (wnn-add-dict '("tankan.dic"   nil             1 t t)
 +  (wnn-add-dict '("bio.dic"      nil             1 t t)
 +  (wnn-add-dict '("tankan2.dic"  nil             1 t t)
 +  (wnn-add-dict '("tankan3.dic"  nil             1 t t)
 +  (wnn-add-dict '("g-jinmei.dic" nil             1 t t)
 +  (wnn-add-dict '("supplement.dic" nil             1 t t)
 </code> </code>
  
行 264: 行 453:
  
 あれ?変換した辞書って公開して良いのかな…?気が向いたらライセンスなどを確認してみるか… あれ?変換した辞書って公開して良いのかな…?気が向いたらライセンスなどを確認してみるか…
 +
 +品詞について分からなさすぎる,と思いつつ Web 眺めてたら,こんなのを見付けた.品詞を軽く説明してくれてる.今度読もう.
 +https://yukinoi.hatenablog.com/ 
  
 ====== - 現存ドキュメント ====== ====== - 現存ドキュメント ======
行 276: 行 468:
     * intro には詳細に,Wnn V4 の挙動や辞書について記述されている.     * intro には詳細に,Wnn V4 の挙動や辞書について記述されている.
  
 +----
 +このページへのアクセス
 +今日: {{counter|today}} / 昨日: {{counter|yesterday}}
 +総計: {{counter|total}}
  
freewnn.1696505892.txt.gz · 最終更新: 2023/10/05 20:38 by skk
文書の先頭へ
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0