--(2007/05/12)(yusuke) 単語自体のような出現頻度の低い素性を扱う方法を検討中 --(2007/05/09)(yusuke) 例文から変換結果を得てパラメータを更新すると、別の変換結果が得られる これを繰り返すことで様々な誤変換を得ることができる。 ->make update_params2を使う --(2007/04/25)(yusuke) 「運転席|側」のように接尾辞は別文節にする --(2007/02/28)(yusuke) 「忙し」(せわし)のように形容詞の語幹だけ使うことがまれにある anthy-8700 released recordの単語をtextdicに移すコードを削除 --(2007/02/23)(yusuke) 頻度関係の誤変換が目立つようになってきた --(2007/01/28)(yusuke) hmmじゃなくなったので、変数名等の変更中。->done 次はiisを変更する->done --(2007/01/27)(yusuke) utf8化は完了 MEMMは止めて経験的確率をハードコードすることにした 当面の間はコーパスの量を増やすことで性能向上を図る 例文を増やすと自然なコードで性能が稼げる 素性を増やすときは正誤の識別に貢献しているかで順位を付け,高い物のみを用いる 文節の素性,連接の素性を分離して複数の分布から確率を計算するという手も考えられる --(2006/11/17)(yusuke) 10と10では接尾辞の付き方が違う←修正済み --(2006/11/5)(yusuke) anthy-8700は下記のコードを併存させる *PRIVATEDICセクション(次のリリースで消すかも) *texttrie EUC-JPセクション *texttrie UTF8セクション その後で、EUCセクションからUTF8セクションへ単語を 移動するコードを追加する 現時点ではEUC-JPモードで登録された単語はEUC-JPのセクションに 登録される --(2006/11/4)(yusuke) 個人辞書のストレージをEUC-JPとUTF8の両方を使うようにした --(2006/10/22)(yusuke) コーパスを増やしながらチューニングすると、コーパスの量に応じた いろいろな現象が発生してる。 --(2006/10/21)(yusuke) last-recordのUTF8化 既存のEUCのファイルがあれば、そのまま使う なければ、.utf8というsuffixを付けて新規作成 --(2006/09/29)(yusuke) 文節X, Yと連続する確率は P = 1/z * exp (f_c・λ) ここでcはXのクラス λはXの付属語とYのクラスを含むベクトル --(2006/09/16)(yusuke) 文節X, Yと連続する確率は P = 1/z * exp (f_c・λ_x) ここでcはYのクラス --(2006/04/14)(yusuke) 久々の更新 テスト機構をつけた --(2004/07/22)(yusuke) recordを全部読むと遅いので、必要な時だけ読むsectionも作ろうと思う --(2004/06/16)(yusuke) *名詞化動詞の後続に来るのは名詞のあと+名詞35のあと --(2004/05/30)(yusuke) 「(」「)」などの一文字で単独の文節になって欲しいものに 新しい品詞を割り振る --(2004/04/26)(yusuke) 履歴による候補の順序変更が動いた、要チューニング anthy-azik.elを追加したが、ロードが遅い --(2004/04/18)(yusuke) 履歴による候補の順序変更 --(2004/04/13)(yusuke) anthy.elでauto-fill-modeが効かないらしい->修正できた --(2004/03/17)(yusuke) 文節の学習は、語幹+文節クラスをベースにしよう --(2004/03/09)(yusuke) 「ありませんし」みたいなのは、文末フラグが欲しい --(2004/02/11)(yusuke) 単語の関係はhashを引いてから検索を実際に行う。これをdiclibのレイヤで行う。 --(2004/02/07)(yusuke) 用例辞書を復活させた --(12/26)(yusuke) 修飾語は被修飾語の前の方を修飾する場合と後ろを修飾する場合がありそうな気がする --(12/16)(yusuke) 「みぶんるい」の一つめの文節を「み」まで縮めると何故か「未|文|類」になる --(11/9)(yusuke) ユニコード化した時のエンコーディング 辞書ソース EUC-JP 辞書ファイル UTF-8 xchar UCS4 cstr EUC-JP --(10/16)(yusuke) サ変名詞の接尾辞を新設 --(9/21)(yusuke) 上一段活用の動詞の語幹 + "" = 連用形 というように0文字のパートが存在する --(9/17)(yusuke) #RTは処理できてるかな --(9/2)(yusuke) metawordの結合のためには、文節の最後の要素の品詞を知らないといけない。 ユニコード化 内部 UTF-32 外部 とりあえずEUCのまま 辞書エンコーディング UTF16 --(8/7)(yusuke) 付属語グラフの終端に属性を付ける。 未然、連用、終止、連体、仮定、命令、主格、所有格、、 --(8/1)(yusuke) 活用はconjugateじゃなくてinflectionらしい --(7/31)(yusuke) anthy_get_nth_dic_ent_strでコピーした 文字列を返す必要があるのか要検討 --(7/26)(yusuke) word_list->part[].{from,len}が それぞれまともか要チェック --(6/30)(yusuke) struct_ratioを文節の評価に入れたい --(6/28)(yusuke) 区切りの検索を幅優先に変更した --(6/21)(yusuke) 付属語の辞書を自作しようかしら 活用表の先頭のマッチングを書き換えないと 「サ変未然形」が「サ変」にもマッチする --(6/15)(yusuke) 「する」の扱いがまずい --(6/10)(yusuke) 何故か残っていたmkanthydic/struct.txtを消した 候補を一個ずつ進めるモードの実装は少しずつ進めている --(6/7)(yusuke) dic_ent中に品詞の名前を追加したが、wtypeの 中にいれるのも良いかもしれない --(6/2)(yusuke) idからdic_entを得るためのhashを作った。 --(6/1)(yusuke) 用例辞書のデザインのメモ 単語のid,読みのidを作成する(読みについては未実装) id間の関係には複数の種類がある。たとえば、 近所に出現した、主語述語の関係で使用されるなど。 anthy-isearch.elの作成を開始 todo: seq_nodeをseq_entにマージしたので、関数名などを 見直す --(5/10)(yusuke) anthy.elでカナモード用のAPIを追加 --(5/2)(yusuke) 動詞の名詞化を正しく処理できていない、語幹のみで足している 直した --(5/1)(yusuke) セーブされた用例データは(読み、単語、品詞)の形式をとる idからそれらを求める関数を書かないといけない --(4/28)(yusuke) ochaire学習の文節数を2から3に上げた --(4/27)(yusuke) 用例の学習の数の上限を付ける、セーブする --(4/21)(yusuke) 単語の内部表現から外部表現への変換はできそう。 逆を考えないと、、ochaire学習は付属語のパターンの 学習に縮退させようと思うです。 「背中に書く」「背中を掻く」とかむずかしいなあ --(4/20)(yusuke) 用例辞書が候補交換に負けるのをなんとかしないと、、 --(4/17)(yusuke) 用例辞書が引けるようになった --(4/12)(yusuke) sdicからfile_dicへの名前変更中 お茶入れ学習の端の文節の処理をなんとかしたい --(4/7)(yusuke) カタカナ候補を先頭か最後にもってくるようにした qで最後の候補を選べるようにしようと思う --(4/5)(yusuke) 用例辞書を作るためにコードの整理 UCS4対応するためには、 辞書、内部、外部のエンコーディングを正しく扱わないと いけない。とりあえず、内部だけUCS4ができるか検討する。 --(4/1)(yusuke) X5rのrを忘れてた。活用形とかの情報をそのままにした名詞を追加。 --(3/19)(yusuke) 「満てるとき」>「見てるとき」というのは接続の強さの設定がまずい。 お茶入れ学習ききすぎ --(3/4)(yusuke) カ変、サ変は直した ドキュメントも直さないと、、 --(3/2)(yusuke) カ変、サ変は壊れてます。 seginfo中の情報が活用語尾を含んでいません --(3/1)(yusuke) K2T15 done Cannaを読んで、活用語尾の処理を付属語グラフに回しても よさそうな気がしたが、活用形の情報を付属語グラフに埋めるのが 面倒だとも思った。 未然(MZ)、連用(RY)、終止(SS)、連体(RT)、仮定(KT)、命令(MR)、語幹(GK) 形容詞はなんとかなったけど、compose.cに anthy_wtype_set_ct(&ce->si->word_info[n].wt, CT_NONE);がいる 理由をあきらかにすること。 活用語尾を付属語送りにしたせいで、struct_ratioがめいっぱい下がった 「動きやすい」とかにするとcoreの品詞が動詞で、活用形が終止形になってしまう。 --(2/27)(yusuke) Cannaの付属語グラフは main.code 品詞の名前の定義のみ gram.code 付属語のクラスわけ gram.goto 遷移の定義 マクロの定義が興味深い 「@〜詞語幹」というノードをそのうち作ろう JSmonoとK2T16、K2T35をコピーしてきた とりあえず [-]演算子は無視 この取り込み作業は当分続けるつもり 数詞を数詞と認識できてない --(2/25)(yusuke) 接続助詞の整理 --(2/20)(yusuke) static関数のプロトタイプをいちいち先頭に書くのはやめた src-util/*.c以外 --(2/15)(yusuke) 2chの78の二つめの要望を実現すべくanthy.elの候補レイアウトを簡単化 --(2/12)(yusuke) 辞書生成の時に一度全部メモリに読むようにした。 --(1/28)(yusuke) 辞書中に同じ単語は一ヶ所しか現れないことを保証するようにした。 --(1/25)(yusuke) anthy_ddic_push_back_dic_ent()に単語のidを付加した --(1/20)(yusuke) 微妙なパラメータの調整のみ --(12/30)(yusuke) anthy modeでの候補選択をclean up中 (参照: anthyスレ78番) #OKX (動詞丁寧表現語幹)を #T30: 名詞(する,語幹,格助接続) と同じにした。 --(12/8)(yusuke) 姓と名をマージするのが変 src-splitter/metaword.c::try_combine_name() --(11/29)(yusuke) Doxygenを導入した。anthy/ でdoxygenを実行するよろし --(11/23)(yusuke) 候補の構造でスコアをいじるところで分母と分子をまちがえてたので直した --(11/18)(yusuke) 括弧の開きを後ろの文節に付けたい --(11/16)(yusuke) 文節の最後の文字が助詞ならば,そこまでをカタカナにした候補を 生成するようにした.次は評価をいじる 「書いて」が出ない.付属語の長さでstruct_rationを引き過ぎ(直した) --(11/9)(yusuke) ヤマケンさんから頂いたメモリリーク修正のパッチを当てた 2chで頂いたローマ字にバックスペースでアルファベットに分割する パッチをあてたが,メモリリークがあるっぽい.(直した) --(11/7)(yusuke) anthy.el のバッファごとのコンテキスト分離をやった minibufferが絡むと依然バグる --(11/6)(yusuke) 2chで指摘された問題の一部に対応 あとはanthyinputのclean upが必要 input.hの構造体を見せないようにするためのAPIを足した --(11/2)(yusuke) 主語(subj) 述語(pred) 修飾語(mod) 独立語(dep) 接続語(conn) --(10/23)(yusuke) > #KJ > などのエントリを追加しているところ 「かお」で顔文字も欲しい --(10/22)(yusuke) 文の成分は主語,述語,修飾語,独立語,接続語というモデルで 行こうかしら SKKの辞書を取り込めるようにしたい --(10/3)(yusuke) 自立語のみの学習を追加した.TODO(Done 10/22) *文節ごとの学習とのコードとの統合をする *動作チェック --(9/28)(yusuke) スコアがオーバーフローしてた intで256を掛けることがあるので,よくチェックすべし. --(9/21)(yusuke) candswapで候補を入れ換えるのは変で 旧候補は2位に落とすだけで十分直した --(9/19)(yusuke) 〜する,〜おく,〜べき --(9/14)(yusuke) seg_infoのstruct_ratioとbase_scoreをそのうち統合したい --(9/8)(yusuke) 文節の長さをバランスするために, (Σ(文節長^2))/文節数をスコアから引くようにした 負の評価値を割ると大きくなるという恥ずかしいバグ --(8/22)(yusuke) 右に隣接するextentの様子でそのextentも変わるようにしようと思った cannadicから消えてた #D2KYを復活させて 「動き易い」などの変換を復活 --(8/4)(yusuke) 右から検索に変わる方法が難しい --(7/28)(yusuke) 「生み出す華麗な」が「生み出すか礼な」で後ろから マッチングすればよいでしょうけど件の特許が邪魔. でけた.検索時に文の右端か2つめ以降のextentは加点することにした. しかし,右端に句読点などがあると困る. --(7/25)(yusuke) 単語登録のバグを修正 品詞の名前に#をつけるのを忘れていた recordを読んだときに個人辞書を更新しないといけない --(7/15)(yusuke) 付属語グラフに属性を追加する準備開始 --(7/13)(yusuke) charをsignedだと思ってた.はずかしいなぁ --(7/11)(yusuke) include/segclass.h を追加 --(6/28)(yusuke) anthyinputのドキュメントupdateしないといけない --(6/26)(yusuke) splitterで文節(seginfo)に属性をあたえて,relationで 前後をみながらソートするって感じ --(6/15)(yusuke) 「放送中し」「〜し」で生成してるけど、「放送中」は 「する名詞」ではないので減点を十分にしとかんといかん --(6/12)(yusuke) 名詞に接頭辞をつけないようにした。 次は(a)接頭辞だけで文節になるようにする、 (b)接頭辞を含むmetawordを作る 「いれたて」が変換できないregression --(6/11)(yusuke) よくわからん文節は、全部カタカナの候補を 先頭に出すようにした。次にはこれを学習できるようにするかも --(6/8)(yusuke) 無理矢理くさい候補は減点して、カタカナのみの名詞にしよう --(6/4)(yusuke) metawordの生成されていない一文字extentを生成するようにして ダミーのmetawordをそこでは使わないようにした. --(6/3)(yusuke) extentが片付いたら,接頭辞,接尾辞を整理しようと思う --(6/1)(yusuke) 付属語グラフの強化をやった --(5/30)(yusuke) extentへの移行はとりあえずできたかな NF_NAME = NF_FAMNAME | NF_FSTNAMEはまずい 名前っぽいシーケンスを二つ結合してしまう --(5/28)(yusuke) 一文字の文節のスコアを下げた 後ろの文節のスコアをあげようと思った 右から検索するというのは例の特許がかかってるので やめようと思う. 「いまの^にnほんが」を「いまのに」で文節を構成して しまうという問題がある --(5/25)(yusuke) extentへの変更を実行中 --(5/23)(yusuke) splitterにmetawordよりも上のレイヤのextentを 導入することを決意.失敗したらまた全部除去する. --(5/22)(yusuke) MAP_CLEARを2回するとcoreはく 直した --(5/21)(yusuke) カナ入力のためにLHSが複数文字のときに 設定できるようにしつつある. --(5/19)(yusuke)2周年! カナ入力をしようとすると最初のローマ字の設定を クリアしないといけないのが面倒. --(5/18)(yusuke) rkconvの設定を改善する 付属語グラフの改善 接頭辞、接尾辞の学習 ILIBのドキュメントの改善 rkconv.c::rk_sort_rule()を始めた --(5/16)(yusuke) anthy_input_edit_config() を anthy_input_edit_rk_symbol_config() anthy_input_edit_rk_edit_config() に分割した --(5/15)(yusuke) src-splitter/wordborder.h のword_info_cache中の meta_word,word_listをポインタの配列にした. --(5/12)(yusuke) anthy_input_free_config()でconfigをリファレンスカウント方式にする? --(5/11)(yusuke) static void *ここに改行をいれて回る日々*hoge() テストプログラムが誤変換を学習するので困るが, 直すのは手間っぽい. テスト用の匿名パーソナリティを作らんとダメっぽいです. 匿名パーソナリティを""にして,デフォルトを"default"に することを検討中 --(5/9)(yusuke) lock_record()でロックしてたのでまずい はやくflockに切替えるべし.きりかえた ochaireのnegativeがおかしい --(4/30)(yusuke) testのプログラムをelispに変更しつつある 無理っぽいseginfoだけで候補を生成してしまった場合にはもっと短くて 適切なseginfoも探すようにすべし. --(4/28)(yusuke) anthy-agentをテスト環境でも動作できるようにコマンドラインオプションを いくつか追加した. 「ー」を変換してスペース4回目に列挙モードになるのは変 --(4/21)(yusuke) src-splitter/evalborder.c の検索で右端に到達したら より深い検索に切替えるようにした --(4/20)(yusuke) anthy_get_ext_seq_ent_wtypeがいい加減過ぎ 自立語部の長さを取り出すとき,動詞は語幹だけで数えるか 「名詞する」の「する」まで数えるかどちらかにすべき. --(4/14)(yusuke) agent.cにコメントを追加 --(4/7)(yusuke) 未知付属語学習の追加中 --(3/29)(yusuke) src-splitter/metaword.c::make_dummy_metawordのスコアの計算が適当 --(3/27)(yusuke) #OKXの候補が出ない anthy_commit_border()にseginfoが渡って来ない --(3/24)(yusuke) wtypecmpの返り値が変 --(3/21)(yusuke) wl->conn_score, si->tail_biasを分母256の固定小数に変えた si->tail_bias を si->tail_ratioに改名した --(3/4)(yusuke) 「私達」を学習しない お茶入れの評価を越える点数になっている? --(2/26)(yusuke) fprintf -> anthy_log に切替え中なので、メッセージ中の "Anthy: "はもう要らない。不要なinclude も消す --(2/25)(yusuke) 「へんこうもと」の候補に「変更も」がでてくる ->昔ばぐったのを学習させたからでした --(2/17)(yusuke) 付属語グラフによるバイアス(done)と 接頭辞接尾辞のバイアスを復活させる 必要がある。 --(2/16)(yusuke) seg_infoをmetawordのレイヤに移動した エラーなどをエラー出力にはくのはまずいので、出力するための機能が必要 src-main/personality.cを消した --(2/15)(yusuke) ネームスペースの汚染を避ける必要があるので徐々に改善していく予定 --(2/10)(yusuke) 今ごろallocatorにバグがあったにょ --(2/7)(yusuke) src-diclib/dic_personality.h を消す --(2/5)(yusuke) 「ー」は名詞の付属語! --(1/30)(yusuke) *segexpand.hを消す --(1/26)(yusuke) commitの際にseg_infoを構成するのをやめないといけない contextのreset時にseg_info_atorを作りなおす 無変換の候補にseg_infoがない --(1/25)(yusuke) *seg_info中の単語の情報を配列にする *presonalityの除去はできた --(1/24)(yusuke) 今日からDIARYには名前を書く *ソースツリーの外でビルドするとbase.tとextra.tがくみこまれない。 *seg_infoに複雑な情報を持たせる -in progress *personalityの除去 -in progress *付属語の情報の更新(foosen) *バージョンを返すAPI -planning --(1/20) 「しょうがない」の候補に「しょうがい」がでる --(1/15) *src-diclib/record.c でfseekに失敗したらというところが あるがfseekは失敗しない(fixed 1/18) *候補の交換が作動していないっぽい。ループのところを要チェック(fixed 1/18) --(1/14) 辞書ライブラリでsdicから同じ品詞を付けた単語を取り出す時に 先に取り出された物には頻度を高くするようにして、 辞書中に先に出現した単語に若干高いスコアを与えるようにした (いままででもqsortの実装によってその順序になっていた) cannadic-0.93aへの更新 --(1/12) cannadic-0.93への対応と辞書ディレクトリの移動 --(1/2) xemacs対応? --(1/1) 候補の評価のチューニング --(12/27) βフリーズ(これはその後に書かれた) --(12/21) mule対応のelispを統合 --(12/18) ドキュメントの整理 --(12/17) 単語登録はできたが、登録した際にはキャッシュ中の 既存のエントリーをパージする必要がある --(12/11) メモリリークはほぼ解決、でも変換一回ごとに1K弱ほど 候補生成でリークしてる --(12/10) 形容動詞の処理が怪しい 一日中メモリリークとの格闘 辞書ライブラリっぽい --(12/9) メモリリークの追跡 pageはリークしてないようだ --(12/8) 「下さい」がでない ど -> ° をなんとかする --(12/1) 個人辞書に活用するエントリが入ってると厄介 --(11/30) 〜子(生成子) 両〜、〜こと、だろう、まで --(11/29) ソース中のドキュメント追加 --(11/26) splitterでグローバル変数を一個消した --(11/23) record.cからsaveするときに'"'をescapeし忘れている 数字を全角/半角に変換できるようにした --(11/18) XCT_PARTのバグ取り、単漢字の修正 --(11/16) 長音、母音の小さいもの、促音 metaword生成時に含むようにした 濁点、そのたの小さいもの XCT_PARTをつくった metaword生成を整理した 「あaaaaaaaaaaaaaaaaaaaaaaaaaあ」とか変換すると遅くなる ->get_seq_entが遅いand 呼び過ぎ ext_entのソースコードを整理した --(11/13) 「゛」などの処理を記述中 「゛」はその前までで候補生成するのはまずいが「ぁ」はOK 「痛ぁ」など。splitterとsegcompose両方で対応すべし。 --(11/7) リリースワーク、リリースノートを書いたり --(11/6) ドキュメントの追加 --(11/2) αリリースまでのクリティカルバグは *ダブルクォートの処理 *候補選択画面 --(10/31) '(' ')'のanthy-agentの対応がまずいような気がする。 --(10/29) 得(う、え)る「うらない」とかでてきてしまう。 「行きたい」が変換できない(直した) --(10/26) カ変動詞の処理をとりあえず実装した。 --(10/24) elispでモードラインへの表示を追加した。 *カ変の対応と同時に外来語の「ー」の対応をやろう --(10/23) config.h --(10/22) 全角の数字も数字になるようにした --(10/21) xchar APIを整理した --(10/20) anthy-confを etc に格納するようにした --(10/18) printf() -> fprintf(stderr,) --(10/17) 開きかっこはMS-IMEにならって一つの文節にしようと思う に"ゃあとのSync待ち --(10/16) *takによるMakefile.amの修正 *に"ゃあによるお茶いれパッチ *kaoru君さんによるelispの修正 *agent.cの修正 など --(10/14) 開きかっこがmetawordの左にあったら、それを含むmetawordを作るようにした elispでanthy-minor-modeをbuffer localにした --(10/13) 〜してる 帰る --(10/12) 始めてのanthyの使用がanthy-agentの起動だった場合辞書ファイルを作成する とかいった内容が標準出力にでてくるので対策をとらんといかん。 カーソルの色で状態がわかるようにしたい 「死ぬ」が変換できん? 文末のnをなんとかしたい / でバックスペースをおせない --(10/11) alignment of sections in dictionaly file. --(10/10) anthy.elにminibufferの対応を書いた --(10/8) emacs lispのコーディングを継続中です、変な入力にも対応できると思う。 --(10/6) anthy-agentが使い物になってきた --(10/5) elispで[う゛]を変換すると点と分かれてしまうのがまずい --(10/3) 変換前の候補をanthy_get_segmentで取り出せるようにした ドキュメントやコミットの部分の整合性をとらんといかん。 emacs lispをすこし書いた --(10/2) agentのマージ第1弾、ここからemacs lispを書こう --(10/1) 文節の伸縮の学習ができたっぽい。 もうすこし細い点を見直すべし --(9/30) splitterから文節の情報を取り出す際に自立語の 品詞の名前を取り出せるようにしつつある。 --(9/28) splitter cacheを必ず作るようにした。 cacheじゃなくなったので名前を変えよう。 --(9/23) 文節を拡大するときに、文節が短かかった時の候補もでるようにしたいけど 文節の拡大が学習されて次回に長い文節が最初に出てきたときに その候補が出せない。 学習機構は可逆にしよう。 --(9/22) anthy_quit()を実装するためにメモリ確保をallocatorに移動中 終了時にメモリを解放するためには、allocatorモジュールが 用意するdestructorで一気に解放するのだが。 参照する先の情報が先に解放されてしまってからunref_Xとかやると まずそう。 *メモリ以外の解放はdtorには書かない *dtorの引数にメモリのみの解放であることを示す *参照される側のデータのモジュールで不当な解放をハネる *データを参照するモジュールのメモリは先に明示的に解放する(9/23) --(9/19) 最初の分割時に出した隣接する文節が結合されてコミットされたら それを学習すれば良いような気がした。 --(9/14) 副詞の分類を開始した mkanthydic/av.depword を追加 anthy.elのコーディングを進行中 ひらがな数字は A := (X千)?(X百)?(X十)?X? までにするか B:= (A億)?(A万)?A? までかだけど、とりあえずAだけやってみよう。 --(9/12) 「書い易い」とか出てきてしまう。 ctab.h に CST_V_RENYOU_{TA,DA} を付けてなかった場所を直した 動詞連用形 -> 動詞連用形{5,D} に制約を強くした 「嗅い易い」ってなんだ? --(9/11) 〜まくる、〜しまう は Cannadicでは対応されていない。 mkanthydic/extra.t の助詞、助動詞は消した src-splitter/evalborder.c に境界の検索は移した 「動き易い」などが候補として出てくるようにした --(9/9) 辞書のインデックスにEUCの2バイト文字とASCII文字を混在する ようにしよう。辞書ライブラリ側での対応は終了 --(9/8) 「いれる」に「要れる」が出てくるのは変 辞書ファイルのindex中にでてくる文字の巻き戻しの数を ASCII文字ではなく キャラクタコードの1-31を使うことにした。 か変、さ変が正しく処理できていない。 「する」は直した 候補の評価はどうしよう? --(9/6) 候補生成を2系統にするのはできた --(9/5) ドキュメントを追加した --(9/4) metawordの生成数が多すぎるような気がする。 splitterからの情報の取得をword_listからではなく、 metawordからやるようにした。 --(9/3) metawordでカバーされていない領域を埋める方法を検討中(とりあえず実装) 検索の際には同じところをカバーするmetawordでscoreの低い方は無視 することができるような気がする。(done 9/4) --(9/2) #OKX の 「御存知」に「御存知ない」と付くのはどういうパターンで 処理しよう。他の#OKXにはない。 --(9/1) segcomposeから接続のスコアもsplitterから取ってくるようにした。 そのうちsplitter/metaword.c::make_unkseq_metaword()をもうすこし 賢くしたい。 動詞連用形 + 名詞化接尾語を処理できるようにした 「入れたてのお茶」は入力できる。 #OKXの対応がまだ *候補交換のループ対策にバグがあるっぽい *「する」の処理ができてない。 --(8/31) dic_sessionの数を増やすのはちょっと面倒そうなので 遅延生成で逃げることにした。anthy_set_strでセッションを作り anthy_{reset or release}_contextでセッションを解放するので 32個までの並列入力には耐えれる。 形容詞化接尾辞 形容動詞化接尾語 名詞化接尾語の対処ができるような気がする record.cのsectionを解放する部分のコードをミスってたので直した これで辞書管理ツールが動く --(8/29) 辞書管理ツールを書きすすめた、SEGVが発生するので もうすこし、デバッグが必要。 --(8/28) ディスク破損により2日分の作業が飛んだ。 辞書をBigEndianにそろえた record.cに にゃあの修正をとりこんだ --(8/23) 可能動詞の命令形を適当にやってしまっている。 自立語の品詞を見てから付属語を付けるべきで、 その前に付属語を付けてしまってる。 --(8/22) 辞書のエントリをシェアードライブラリから外に出した mkanthydicで辞書ファイルの各部を作って別のコマンドか 何かでリンクしようと検討中。 辞書ファイルのシェアードライブラリをやめた --(8/20) 可能動詞は普通の動詞と助動詞の接続が違うっぽい 「書け(「書く」の可能動詞形の未然形)させる」とは言わない src-diclib/ctab.h wtab.h を作った --(8/19) rpmのspecファイルを書いた 自立語部の長い文節はスコアが高いようにしよう 「する」がきちんと出てこない splitterからの構成の取り出しはとりあえずできた struct.txtから簡単なものをとりのぞこう --(8/18) wordsplitterに接続によるスコアをつけた。 splitterからの情報による候補の生成を実装したが 若干バグがあるっぽいので、直したらstruct.txtの 中から簡単な物は消す。 --(8/17) agentコマンドを書き進めた --(8/16) リークは候補の割り当て以前のところで発生しているようだ。 A*サーチのところでA*のノードを解放し忘れていた。 依然としてリークが発生しているみたいだ。 --(8/15) メモリアロケータを効率化した 確保されたメモリが300KB弱まで下がった。 メモリリークしているみたいだ、要調査 --(8/14) に"ゃあのtrieのデバッグを取り込んだ splitterの作った情報を使って文節の構成を取り出せるように しつつある。コミット時にもその情報を使えるようにしたいと 思う。 --(8/13) 名詞の細分化が終了した テスト入力を全部入れた時には400KBほどアロケートしていた --(8/12) 名詞の分類をcannadicに存在するものではなく、 辞書管理ツールの中に分類が存在するものの方にそろえた。 --(8/10) 郵便番号辞書を使いたいと思った --(8/9) 辞書制御コマンドを作成中 --(8/8) emacsからAnthyを使うためにはIIIMPじゃなくて サブプロセスを起動してそこに対してパイプでコマンドを 送受信する方式を使うことにしようと思う。 (start-process)を見れ --(8/6) current task *trieの修正(done 8/14) *閉括弧の自立語化 *辞書ファイルの非シェアードライブラリ化(done 8/22) *連体形のあとに来る文節のmetaword化 *単語登録の品詞の扱い(done 8/31) *allocatorをshrinkするタイミングの決定 ruleparser中の\include を \\include に変更した ruleparserの整理(続) segdef中の構造体にallocatorを使うようにした。 --(8/2) ruleparser.c を整理した 書きこみを行わない匿名のpersonalityを作ろうと考えてる。 副詞0 から 副詞14を追加した。 それぞれに対して語幹だけという名前を作らんといかん --(8/1) 名詞のあとに「せる」「させる」のどっちが来るんだろう? --(7/30) 昨日のエンバグをフィックスした 括弧の閉じは名詞で独立語とすると良いという意見をに"ゃあから もらった。is_close()を追加。 --(7/29) *名詞の使ってないタイプ(SCOS_T*の一部)の削除 *wordseqに接続のスコアの導入 --(7/28) 名詞の辞書の強化など --(7/21) 名詞1 から 名詞39までを作成 --(7/19) cannadicの名詞の分類に対応を開始。てはじめにT35に対応する 名詞35 SCOS_T35を作成した。 --(7/18) splitterでグローバル変数に現在処理中のデータを必ずセットするのを 忘れていて落ちるバグを直した。 辞書のインデックス中に'\' '"'を許すようにした。 小文字アルファベットはだめっす。 metawordとword_listをallocatorを使うようにした。 --(7/11) personalityの名前が '/' を含むとまずいので、その場合は ""を 使うようにした。record(個人データ)のファイル名を ~/.anthy/last-record:{name of personality} から ~/.anthy/last-record_{name of personality} にした。 : はパスの区切とかストリームの識別とかに使われるから。 candswap(候補の交換)のエントリのagingを追加した。 --(7/10) allocatorのキャッシュをsizeごとに共有するようにした。 ディレクトリsrc-utilを作成した。 --(7/9) 文節末の構造を若干追加 一部の接尾辞は接続グラフに埋めておける。 --(6/27) ソースのセミコロン、カンマなどの後に空白を開けるようにし変更中 に"ゃあによるtrieを利用したrecordをとりこんだ。 --(6/15) ddicのノードもアロケータを使うようにした。 連用形の名詞化で連用形以外も名詞になってしまってる? ->5段の連用形には2パターンあって、名詞化しないほうも名詞化してた。 「とる」が変換できない --(6/10) RExだけallocatorを使うようにした。 splitterでパラメータを使うようにしはじめた。 --(6/9) 副詞は活用しないので、副詞語幹にCT_HEADを付けるのは間違いだった。 --(6/7) 「だらけ」を名詞の後につくようにした。 allocatorを書いた、destructor付きの構造体アロケータにした。 Linuxのslab allocatorみたいな感じだす。 --(6/6) 可能動詞のルールがよくわからん、5段以外のでも可能動詞になりそうな 気がする。 「もっとも」が変換できん。(できる 6/16) 「こぴー」を変換するとルール番号が変。 (「ー」を平仮名に入れて解決 6/27 ルール番号はどうしましょう?) 副詞が辞書から取り出せない。 dictiona[l]y というスペルミスをしていた、はずかしいなぁ、もお。 --(6/4) LISPを使って意味解析の部分を記述するというideaはどうだろうか? もし、意味解析のために沢山のモジュールが必要ならその方が楽だろう。 CT_MEISIはやっぱり除去する。名詞化の有無は品詞のところに書いてある。 連用形が名詞になる動詞を実装した。 次は可能動詞だす。 recordにpersistentでないデータを格納する方法と検索を高速化する方法を 追加した。 --(6/3) splitterの初期化のコードをsplitterに移動した。 struct.txt中のマクロが後方参照できないのがいたい。 可能動詞が面倒。 CT_MEISIは追加したが、その後をまだやってない。 --(6/2) ソースコードの整理をした。 src-main/ src-splitter/ src-diclib/ にわけた。 --(5/30) *必要なallocatorの種類を列挙し、実装する。 *動詞の名詞形を活用表に追加する。 -動詞には足した。 *wordsplitterのソースを分離して、遺伝的アルゴリズムの枠組を作る。 *ruleparserに '\' の改行エスケープを追加する。(done) --(5/29) 動詞の連用形は動詞の名詞的な使いかたをされることがあるが、 そのままルール化するのはどうだろうか?CT_NOUNを作ることにする。 --(5/27) そのうち文節分割のチューニングのためにlibanthysplitter.soとか作って そこに関係するファイルをかためようと思う。 しばらくは変換効率には取り組まずに関連のユーティリティにいそしもう。 個人辞書のデータ構造はmapだと思ってたが、実はマルチマップだった。やべぇ。 メモリallocatorの設計をどうしよう?次のようなのが考えられる。 *固定サイズで回収可能なやつ seq_entなど。 *可変サイズで最後に回収するやつ RExやNewStateなど。 *可変サイズで回収可能なやつ、 malloc/freeよりも効率が悪い。 --(5/26) シェアードライブラリとして作られる辞書はアーキテクチャ依存なので、 mkanthydic/Makefile.amをいじって、anthy.dic.so を share/anthy/では なくて lib/anthy/にインストールするようにした。 --(5/25) dic_utilの関数を書きはじめた。 --(5/24) にゃあ"の書いてくれたsegdefのオートマトンの変形ルーチンをマージした。 これから理解していこう。 recordの部分には大量の蟲さんたちがいた。 個人辞書はおおかたできたが、設定ファイルには #XYZ の方の品詞しか書けん。 --(5/23) 「さっさと #F12」 「とっとと」は無い 辞書のマルチユーザ化はできたっぽい。あとは設定ファイルのみだす。 単語切りの点数のデノミが必要な気がする。 --(5/22) 「いいます」->「行います」とか出てきた。(5/23)活用表を直した 「せっせ #F14」が変 --(5/21) libanthydic/dic_util.cを進行中 --(5/20) 辞書のパーソナリティの実装がそろそろなので、切り替える前に 一度リリースしたい。 --(5/19) 今日はAnthy一周年! 辞書のパーソナリティの実現はかなり面倒。 文法定義ファイル中のリテラルのseq_entと 各ユーザのseq_entを同一にすることはできないことに気がついた。 比較関数を作ろう。 userAのseq_ent -> globalなseq_ent <- useBのseq_ent という参照関係があるとuserAのseq_entとglobalなseq_entは等しい。 ポインタのからseq_ent_cmp()への書換えをする。 個人辞書メンテナンスプログラム用のヘッダファイルdicutil.hを追加。 --(5/12) dic_sessionへのパーソナリティの実装中 --(5/5) wordsplitで自立語一つをword_listとして登録するところで 変数の初期化忘れをしていた。 dic_sessionが複数のpersonalityに対応しとらん。 personalityの実装とかutenaの完成度の向上とかもやりたいけど やっぱ変換効率の向上を図りたい。 libanthydic/のヘッダを若干整理。 --(5/4) 「ら抜きことば」を追加。 「このほんを」が一文節になってしまう。 --(5/2) 辞書へのpersonalityの追加は面倒だ、文法定義ファイル中 の文字列に対するseq_entは誰の辞書に入れるとよい? --(5/1) wordsplitに若干のコメント追加など。 数字でもないのに数接尾辞がつく。 --(4/30) personalityの実装中 recordはpersonality対応完了。 --(4/29) 変換結果の候補の構造体cand_entに何番のルールで構成されたかを 記録するフィールドを追加した。 動詞の「する」がでてこない。dic_cache.c::fill_sv_conjugated_entを 追加中。 wtypecmpよりも厳密な比較をするやつが必要っぽい 数詞 = 名詞 では困る。 wtypecmp -> wtypematch に変更して(done) wtypecmp が包含関係をチェックするようにする。(done) wtypecmp はいらんのでは?けした(done) personalityの実装進行中。 recordにpersonalityを実装中、初期化が変。 --(4/28) src/personality.cを追加 libanthydic/alloc.cを追加 --(4/27) 途中でパーソナリティを切り替えれるようにしたい、 一度にfreeできるアロケータを書いて、コンテキストごとに 用意することにする。 include/alloc.hを作った APIは考慮中。 personalityを追加するのに、recordとdic_cacheが要作業 contextはなんとかなる。 personalityはいつでも変更できるようにする。 コンテキストはカレントpersonalityに対して作られる。 --(4/20) uid一つに対して1ユーザというのは柔軟性に欠くので anthy_set_personality()を追加した。 --(4/17) 文節ルールに番号をつけた。デバッグしやすくなるかも。 struct word_entとstruct cand_elmが似ている。ここにもう一つ 追加するとわけわからん。候補のなかのどれが同じルールで作られたか のリンクを作ろうと考えている。 --(4/15) 北斗の拳辞書を追加した。 アラビア数字の品詞の問題は直した 「35号」「三十五号」の両方の候補がでるようになった。 次は優先順位をなんとかしよう。 --(4/14) セキュリティに関するドキュメントを追加した。 --(4/13) base.dic.txtに助動詞を一通り追加した。 次はstructだ。 libcとかがあるので単純に議論できないけれど、 プログラムサイズはmobile Wnn V2より若干小さいらしい。 --(4/12) base.dic.txtに未然、連用、終止、連体接続の助動詞を追加 --(4/11) 助動詞をbase.dic.txtに若干追加、要作業。 --(4/10) ST_なんとかを整理してコメントを書いた。 --(4/9) アラビア数字などが絡むときの品詞の扱いとかが変。 --(4/6) 名詞の付属語はオプショナルなものと考えられるが、 いくつかの活用の動詞に付属語は必須なものであるということを 活かした評価関数を付けよう。 Wnn,Cannaを使ってみたところ、未知の文節末のシーケンスに 強いような気がした。 --(4/4) 文末の問題は直したにょ。 数字の問題も直したにょ。 --(4/3) metawordのスコアを文字数じゃなくて文節数で割るのに戻した。 賢さが復活した。かなりロバストな感じ。 文末の処理の弱さを完全に解決するという当初の目的は果たしてないが * A*を用いたことによる計算量の減少、上限の保証 * metawordによる構造の処理 + 文節学習の利用 が実現できるのでまぁよろしい。 *アラビア数字の処理がバギー *文末の文節分割がバギー なのを直すと次のstableになるかにょ。 --(4/2) metaseg -> metawordへ変更。 --(4/1) チューニング中 metasegはmetawordの方が良いかも。 --(3/31) ドキュメントの整理中。 パラメータの調整についてはもうすこし考える。 なぜか「せっかくだから、、」だけは正しく変換できてる… --(3/30) A*のヒープはきちんと処理できているようだ。 切り替えを行う! かなりヘキョくなったがそんなに悪くもない。 --(3/29) アラビア数字からの変換は1億未満の正整数に限ることにする。 record中のPRIVDICの形式 読み 単語 品詞 頻度 ddicのカスケード接続を実装すべし。 metasegのsplitterは動き出したが、動作が怪しい。 ただのパラメータのチューニング不足かも。 あと、属性文法によるmeta文節のマージと、数詞の連続などの処理を設計する。 --(3/28) A*のheapの構成のバグとりをした。 数字からの変換を書き進めた。 もうちょっと各桁の扱いに配列を使うなどする必要がある。(やった) 億までいけるようにするか?悪ノリしてもっといくか?「壱弐参…」はやるか? --(3/27) megasegのA*の検索コアを書いた。 --(3/26) A*のヒープの再構成の遅延は面倒なのでやめる。(普通のコードにした) --(3/25) A*のheapのrebalanceのコードを書いた。 nr_単数形 -> nr_複数形 にした。 include/anthy.hはまだ、そのうちに。 --(3/22) xchar.hに漢数字のエントリを足した (atollというライブラリ関数があるらしい。) --(3/21) 文節あたりの平均点ではなくて、文字あたりの平均点を用いる。 libanthydic/num_ent.c -> ext_ent.cに変更 「Linux業界に全角英数を持ち込むべからず」とか言って手抜きしよう。 --(3/20) 以前、書き忘れていたけど、COS(Class Of Speech)を細分したSCOSを導入 品詞 「人名」「人名接尾辞」を追加 meta segment splitterを実装開始、2種類のwordsplitterがしばらくは並存することになる。 未知文字列のmetasegの中に文節境界を設定された時の対処を考えるべし。 「、、|、」とか 単純なmetasegは作れた、次はA*サーチ。 --(3/19) コードのクリーンアップsegcompose.hを除去 depwordルールのチェックの追加 --(3/16) recordの特定のセクションのデータを全て取り出すための関数 select_frist_columnとselect_next_columnを追加した。 wordlistを複数持つ構造体(meta segmentと呼ぼうかな) を導入してwordsplitの性能を稼ごうと思う。 これとA*サーチを同時に実装するブランチを近日中に。 --(3/14) 「〜してみると」ってやっかいですな。 文節の後部が長いと加点というのは以前失敗した 接尾辞が複数の種類で構成されると加点というのをやってみようと思う。 「〜する と(動詞 助詞)」 「〜ない とき は(形容詞 名詞 助詞)」 ひらがなのコード表 libanthydic/xchar.hに間違いがあった (2/8)の「書こう」が変換できない件は解決 --(3/13) 文節構造のルールのレベルを実装し終えた。 --(3/11) 文節構造のルールにレベルを追加した。 単純なルールで文節の構造が決定できる時は複雑なルールを使わない。 --(3/7) 近日中にwordsplitをA*サーチをするようにする。 文節の学習の実装を開始した、 segment(struct seg_ent)にresizedという要素を追加した。 libanthydic/num_ent.cを追加した。数字関係を扱う。 --(3/5) 他の変換エンジンの「AI塔載」に対抗して「IT塔載」にしよう^^; その実体はオプショナルな辞書をダウンロードしてくる機能。 文節関係の処理の実装を検討中 形容詞 名詞 「あついふろ」「ふろがあつい」のように順序の逆転がある 副詞 動詞 副詞によって動詞が変化するパターンはあんまり思い付かない 動詞 名詞 「嘘をつく」「鐘を撞く」「槍で突く」順序の逆転は少い 「(本日)開店のカフェ」動詞の形をしていない --(2/28) 今日は単語の追加しかしていない。 --(2/26) segdefの中のバグを修正 近場のTODO *RExの回収 *record検索の高速化 *ruleparserへの '\'記号の追加 *頻度バイアスの実装 --(2/25) wordseqの若干のクリーンアップ --(2/24) libanthydic/dic_main.c::get_seq_ent_from_xstr() 辞書にない文字列で意味を持つもの「123」「ABC」のような ものを引く関数を整理した。 文節間の関係の処理の一手法として文節の隣合う文節の master/slave関係を設定しようと思った。 「〜する」「〜するもの」「〜ため」とかを処理できそうな気がする。 隣接しないやつは難しそう A Bが意味をなす場合に A X B も意味をなす場合が多い。 例「きれいな 花」 「きれいな あかい 花」 --(2/22) 人名の場合POS = POS_NOUN , COS = COS_JN になるのでcannadic中の 姓か名の情報が利用できない。 なんかwordsplitterのexhaustive modeにバグが残ってるっぽい。 形容詞、形容動詞の部分が甘い。 wordsplitterで参照する頻度が256を越えると256で抑えることにした --(2/20) 名詞のflagのコーディング中。 --(2/18) 名詞だけはもうちょっときちんと分類して、 各範疇ごとの付属語のパターンを利用すべし。 文節の分割のパラメータをチューニングした。 「回答開始の合図が、、」が最後の読点の有無によって 変換結果が変化する、要調査。 --(2/17) 普通の名詞は辞書に入っている時点で接頭辞や接尾辞が ついているが、数詞だけは接頭辞と接尾辞の両方が付く ことができるようにする。 --(2/13) cannadic-0.92へ更新 get_seq_ent_wtype を get_seq_ent_wtype_freqとして、 その品詞としての頻度を得るようにした。 その他のget_seq_ent_系関数もそうすべきかもしれない。 get_nr_dic_ent()とget_nth_dic_ent_str()に 変換前の文字列も引数として渡すようにした。 --(2/12) 文節の評価が負の値になってはマズいので (割り算した時に大きくなる) 適当な数を足しておいた。 --(2/10) じゃっかんのバグ修正 --(2/9) 時計のAPIを追加しはじめた。 LANG=ja_JPのもとではsortコマンドが予想外の動作をするので LANGを無設定で動くようにした。 文節境界の評価を若干いじった。 main.hにいくつかのヘッダファイルを追加した。 --(2/8) 「今日中」が無い。 追加した。 文法を少し追加。 「かわれねこ」の場合、文節境界の検出のときに 未然形 + 名詞というルールを使うことができるかも。 「書こう」が変換できない。 「まさるさん」が変換できない。 (2/6)の文節の切り落しコードを有効にした。 --(2/6) 文節の後部の句読点などを切りおとすコードを書いたが、 is_??の類が正しく動作していないのでoffにしてある。 時間を計る内部のAPIを考慮中。 --(2/4) 英数字の列を名詞として扱うようにした。 --(2/3) 昨日のバグ修正として、文節定義の構文解析をシンプルにした。 ?演算子(POSCLOS Positive Closure)を作った。 --(2/2) ?演算子(NEGCLOS Negative Closure)を作っているが、うまくうごかない。 文節構造の解析の部分をに"ゃあに説明したので、簡約の部分をやってくれる かもしれない。 --(1/30) 接頭辞 + 名詞 + 接尾辞のパターンを消した。 たいがいの名詞は、辞書に入っている時点で 接頭辞、接尾辞が付いている。 segstruct.c の 文節の構造の定義の解析 オートマトンの作成 オートマトンによるマッチング のうちマッチングをsegstruct.c 残りをsegdef.cに 分離した。 segstruct.hはオートマトン関係のもののみにした。 --(1/29) L5活用は(いらっしゃる ござる) は 「い」で命令形になる他に 連用形にもなる。 そろそろ形容詞も扱う? 形容動詞語幹 、形容詞語幹+"み" --(1/28) segstructのtraverse_statがマッチングの途中で リターンしていた。 これで、正規表現関係のバグはほとんど無くなった? 次は ? 演算子をやろう。 --(1/27) ここ数日追いかけていたバグの一部は構文木の表示関数の バグだった。(#*><) 構文解析はできたけども、状態グラフが正しく動作していない ような気がする。 --(1/26) か変の活用を書いた。若干間違えているような気がする。 正規表現パーザがおかしい。 --(1/25) ST_NUMを除去した。数は品詞として扱うことにする。 バグの原因発見 A | B -> or(A,B) の書きかえの際にこのリストを指す ポインタは以前として Aのノードを指している。 カ変動詞の仮定形と未然形を書いた。 --(1/21) 12/31に書いた、wordsplitterの検索の部分を書いたが うまく動かない。バグなのかパラメータの間違いなのか わからんのでしばらく放置。 IIIMPサーバUTENAのコードを取りこんだ。 segstructのマクロの展開にバグがあるっぽい --(1/20) 頻度が0のものの頻度は1にして、 そうでないものは8倍するようにした。 --(1/17) segstructのところに、 '|' 演算子を実装し終わった。 次は'*'かな。 ε遷移は一回までにした、これで無限ループにはならない。 --(1/15) open_fileなどの仕様が変なので適当な機会にクリーンアップするつもり。 open_in_.. とか --(1/13) 変な候補を出しすぎ。 --(1/10) ε遷移の解決、ε遷移が2回以上連続する場合には一回で到達する ε遷移を追加する。マッチング時にはε遷移は2回以上連続でやらない ようにする。 同音異義語の問題 「高井」「高い」のような品詞の違うやつと 「貴社」「記者」のようなやつがある前者のほうは 割と簡単に解決できるのでは? ST_なんとかをもっとシンプル化すべきかな? 詳しい場合分けは候補の生成時にやるとして、 「2001年」は変換できても「199X年」は変換できない。 「このほん」が一つの文節になる。 --(1/8) か変の「来る」がやっかい。 ルール定義ファイルに \eof と書くとそこで読み込みを打ち切るようにした デバッグ用なり。 「りくぐん」 「陸軍」 < 「陸群」はおかしい。 やっぱり、「名詞」で候補を生成したら 「名詞 + 接尾辞」で 候補を出さないようにすべきである。 文節構造の定義のシンタクスエラーのハンドリングを書いた。 --(1/7) 昨日のε遷移の問題は解決。 --(1/6) 正規表現のマッチングをするときに、入力が尽きても ε遷移なら遷移ができる。 「つかって」が変換できなかった。 --(1/3) 文節構造を定義するところにオプションをつけて 大きなお世話様を変換できるようにした。 セッションの保存の作業を進めた。 --(1/2) 変換候補の交換は一回しかやらないので A->B B->C という関係があっても A->Cにならないのを修正 12/17の議論で「freeなんとか」はメモリ領域の解放を意味し 「releaseなんとか」はその構造の解放を意味するということで どうでしょうか? 「ーだけ」 「ーしか」 が cannadicに無いように見えるのですが 変換はうまくいけるようです。 ダブルクウォートを文字として扱うときは '"' でいいんですよね。 --(1/1) 「おおきな」は連体詞 文節構造定義ファイルには ".." リテラル、品詞、 #op オプションの3要素を書けるようにしているところ。 リテラルと品詞の両方があれば、リテラルの方がマッチする条件に使われる。 オプションは#で始まり、単語のバイアスなどを決める。 --(12/31) 文節構造の定義に '(' ')' を使いだすと落ちるようなので(直した) バグとり中 ε遷移のループ問題を無視していたのを思いだした wordsplitterの検索の最後の一段は検索をあらかじめ行っておくことが できるっぽい。たとえば 「わ わた わたし わたしの」 の中でベストなスコアを 「わ」のところに 記録しておく、文節境界の制約があるので最初の変換時でなくて wordsplit開始時に情報をセットする。 *プログレッシヴな変換をサポートする準備をしたい。 update_contextというようなAPIを追加するかな --(12/30) *おれの名前が変換できん。 候補の交換による学習ができた、あとは保存する機能だす。 文節構造の定義の文法を拡張する。 リテラルや品詞を書いたあとにオプションを追加することができるようにしたい たとえば 動詞未然形 "ない".形容詞 みたいな感じ *未益田 :69 > みました:1 --(12/29) 文節境界の検出に接頭辞の処理をつけたけど、 すると候補の評価のところがおかしくて おビール < 尾ビール とかいう謎なことになった。 *「あさんかびーる(亜酸化ビール)」を変換すると落ちた。 ->直した、配列の範囲外への書き込みをやっていた。 接尾辞も追加した。 --(12/28) 辞書セッションのanonymousセッションを追加した。 anonymousセッションの元で確保された辞書エントリは解放されない。 文節構造定義ファイル中のリテラルなどのseq_entを取るときに使う。 文節境界検出で読み切りモードで時間がかかりすぎるので 適切な枝刈りをすべき。 *文節候補の中に同じものがある場合はスコアが低い方を除去したら 通常5秒のところが4秒になった。 *展開するノード数に制限をつけたところ、上手くいっているようだった。 理想的にはA*の類いを使うべきかも。 接頭辞は一個までになってるけど、さしあたって放置。 --(12/25) ST_NONE 0 は単語にならない文字列に相当 seq_ent = null ST_WORD 1 は全てのseq_entにある ST_UNKSEQ 2 は名詞などになりそうな文字列 ST_SEP 4 句読点など ST_NUM 8 数字の列 get_seq_ent_wtype中から呼ばれるget_extra_seq_ent_wtypeを 書かんといかんにゃあ 数字を名詞として扱うことができた --(12/24) test_anthyを若干改良、テスト入力を外部のファイルにした。 文節構造の定義(struct.txt)中のリテラルを読むとき、 辞書のセッションが無いので忘れられるというバグがある。 --(12/22) testディレクトリを作成してテストプログラムを移動した。 付属語グラフに若干追加 --(12/21) Ancy->Anthy の書換え完了! 文節解析でルールに文字列リテラルを書くことができるように なっているが、このリテラルにマッチすると品詞がwt_noneになってしまう。 「"ない".形容詞」というようなリテラルを書けるようにしようかな? 付属語グラフに若干追加 --(12/20) 付属語ファイルの名前を変えた *.depword.txt -> depword.* anthyへの改名開始ファイル名などはほぼ完了、 これからソースやドキュメント中の名前を変更する。 --(12/19) キャッシュのshrinkはできた。 文節候補のscore = 10 * (文節coreの長さ)^3 * log_2 (freq(core)) となっている。 これでは「すうじ」が「すう じ」になってしまう。 *coreの頻度を見ているが、coreが複数の品詞になる時には 文節構成のルールで使われたcoreの品詞の頻度を使うべきだ。 --(12/17) 現在xcharにはEUCが入っているが、そのうち 「ぴゃ」「あっ」「う゛」のような不可分な文字列を文字として 扱うことも考えてみた。 文節の関係を扱うようなメカニズムが必要かな? Wnnみたいな大文節、小文節みたいなover killなやつはいらん。 キャッシュのshrinkの作業を進めた。 「freeなんとか」と「releaseなんとか」が混在していることに気がついた。 --(12/16) doc/DEPWORDに仕様書を若干追加、、仕様書を書くのは面倒 candswapを若干書いた、ループの検出について考えないといけない。 文節末尾の処理を書いた。 --(12/12) Anthyが正しいらしい。 malloc.h をstdlib.hに書きかえた --(12/10) segmentのリスト化のバグを修正 --(12/7) doc/DEPWORDを追加 doc/POSの副品詞の説明を詳細にした --(12/3) 11/30に書いた問題は解決した、次は何を解決しようかな? *辞書キャッシュのシュリンク(作業を若干進めた ddic_shrink()を定義) *学習機構(Jmode待ち) *助動詞助詞の追加と整理 *ゼロ頻度問題 (頻度0のものは頻度1に格上げしているので、 頻度1のものは10ぐらいに上げるとよい?) *ソースのEUC化(done 12/17) --(12/2) get_nthなんとか という関数では 0番目からカウントが始まっている 統一しとけば問題ないかな、、0は自然数だし。 get_nth_segment()という関数を作ってsegmentの配列への直接 アクセスから移行中。 --(11/30) context中に存在するsegmentを配列にしているがこれを double linked listにする。(done 12/3) segcompose.c::push_back_noconv_candidate()を xstr_hira_to_kata()を使うようにする。(done 12/2) xstrtoi()の中身を書く(done) ancylibを解放する関数を書く(?) --(11/27) 数字の変換のメカニズムを考えないといけない。 ライブラリを解放する関数を作らんといけないか考えること。 「つま」 を 変換して 「積ま」 がでてくる原因を究明すること。 ->文節が一個の時の処理を間違えていた。 --(11/26) Wnn7に対抗して、ancy-kurumiを29日にリリース予定 HekeIMはjmodeに改名する予定 *カ変動詞(来る)の扱いが面倒 - カ変は活用によって漢字の部分の読みかたも変わるのでやっかい *「ある(有る、在る)」が #aruという品詞になっている -ラ行5段としてbase.dic.txtに追加して#aruは無視 「来りゃ」とかcannadicに入っているがなんでだろう? --(11/18) 文節境界検出のアルゴリズムの変更のせいでwordsplitが よくわからんことになっている。要修正 文節の後を無視して境界を付けるようにしたが、今度は 前の方だけに品詞を当てる部分がおかしい。 split_entが2つあるのは気色悪い。(fixed 12/10) --(11/15) 動詞から助動詞原形は完成 助動詞「た」の音便の「だ」「読んだ」 断定の助動詞「だ」 を区別すべし。 geromagnonは11/14リリース --(11/14) recordを若干書いた --(11/11) dic_cannaというのを見付けた。cannadicよりもデカいみたい 動詞未然形と助動詞の接続を書いた 動詞連体と助動詞の接続を書いた「ようだ」のみ --(11/9) プロトタイプ宣言に変数名も書くことにする --(11/8) record管理APIを決めんといかん。 *histroyファイルにはいくつかのセクションがある *セクションはカラムからなる *カラムは文字列をキーにして選択される *カラムは複数のデータを持つ *(時間的に)長いトランザクションはない トランザクションは一瞬 --(11/6) 動詞未然形の分類 *5段デフォルト 5 *5段 う U *サ変 SI SE SA *上下一カ変 D libancydic/record.cが意味も無くopendirを使っている fstatに書き直すべし。(直した 11/8) --(11/5) Cannaは文節の構成を複数作ることができないようである。 だから「早く」と「端役」が同時に候補として出現することはない。 \include ファイル名 と書けばルール定義ファイルの中でインクルード ができるようになった。 *助動詞をきちんと処理する *名詞をきちんと処理する *mallocの返り値をチェックする *cacheのシュリンクをする *学習機構 セッション、ヒストリ、レコード管理(名前をどれにしようか?)の アルゴリズム試案 起動時に ~/.ancy/last-record から前回のレコードを読む 現在のレコードは ~/.ancy/??(適当にユニークな名前)に保存して アトミックに ~/.ancy/last-recordにmvする。 レコードは2つのセクション *候補の交換 *候補のバイアス --(11/4) segexpandから品詞の割り付けを呼出すときに、割り付けに失敗したら 最後の一単語を無視してリトライするようにした。 動詞連用形は 5段「(書き)ます」デフォルト CST_V_RENYOU_5 5段「(書い)た」 CST_RENYOU_TA 5段「(死ん)だ」 CST_RENYOU_DA デフォルト(上下一段カ、サ変) CST_DEFAULT ruleparser.cを若干クリーンアップした。 次はinclude文の実装だす。 --(11/3) 文節の展開をして、品詞の割当てに失敗したら文節の後の方を 無視して再び展開し直すということにするが、この度合がよくわからん。 --(11/1) 書い て O た O ます X 書き て X た X ます O 見 て O た O ます O 動詞連用形の分類をもうちょっと見直すべし 「にょ」「にゅ」は終助詞 wordsplitterとsegsplitterの統合をした、 このせいでかなり、ちぐはぐな部分がある。 --(10/28) 付属語列の定義ファイルの形式を変更した。 付属語の定義能力は基本的にはこれで十分なハズ。 次にすべきことは、 *wordsplitの情報segsplitが利用するようにする *学習機構&セッション管理 *複雑な構造の文節をどうやって処理するか考える wordsplitterとsegsplitterを統合したので、wordsplit情報は context中には不要になったと思う。 --(10/27) とりあえず、segsplitをwordsplitから呼び出されるようにする。 名前やコメントに若干のずれがあるので、徐々に直す。 wordseq.txt をindepword.txtにした --(10/26) 活用表の同じセル中に複数あるときどちらをデフォルトととしたのかを どっかに書いとかんといけない。dic_cache.cを見ればわかるけど。 --(10/25) 「食べまくる」「走りまわる」みたいな動詞の接尾辞みたいなやつは どうしたら良いんでしょうか?cannadicにはそんな単語は無い。 そもそも動詞の接尾辞の概念は無いみたい。 「まずいまくる」とかは当然、無視ね。 --(10/24) segexpandやsegstructにおいても、 文節の後の方を無視することができるようにする必要がある。 自立語の活用の影響を受けるのは直後の付属語のみなので、 *活用する自立語 + 付属語1つ *それに続きうる付属語の列 という二つの表を構成するといいかも。 wordborderは消した --(10/23) wordborderの内容をwordsplitterに移す必要がある。 そののち、wordsplitterとsegsplitterを統合する。 wordborder中で「私の」と「渡志野」の両方に対応する wordlistに対して検索しているが、スコアの高い方だけで 良いはずである。 stinkerの次はgeromagnon --(10/22) 名詞などの活用しない単語の活用形 は CT_NONE か CT_SYUSIかを きちんと決めてない。 「使え る(KS)」は「使 う(W5r)」の可能動詞化したもの、 正しく処理しできていない。->問題無し、「使え る(KS)」の 辞書での頻度が0だっただけ。 セッション管理のところに辞書ファイルの操作をする部分を若干書き始めた。 次のような分類をする。 動詞未然形 動詞未然形ならば全て 動詞未然形* 同上 動詞未然形D デフォルトの活用形 動詞未然形U 「う」に接続する活用形 --(10/21) 品詞を表すwtype_tを 4バイトから8バイトにして、 フラグ(自立語 or 付属語)と活用形のサブタイプを追加した。 --(10/17) たとえば動詞には未然形で 「書か」と「書こ」 がある。 どちらも未然形で区別する方法を考えてなかった。 活用形 (CT_XX)はビットマスクをやめて、ただの値にした。 --(10/15) stinker branchをリリース(1012) 動詞の処理をする。 今、単語境界検出のスコアに長さの3乗を使っているけど、 ちょっとまずい。 --(10/14) 昨日の続き wordsplitterで各文字から出ているリストの内容を スコアの順にソートすれば良いのでは? /bin/bash -> /bin/sh stinkerリリース後のプラン *wordsplitterの定義/文法の強化によって文節の末尾への対応の強化 *接頭辞の処理 *学習機構(辞書セッションの拡張) *segstructの文法定義の強化 *segsplitとwordsplitの統合? 単純学習は 読み 変更元 変更先(例 きしゃの 気車の 貴社の) という組で表わされる。 ほかにも単語のバイアスや単語のコロケーションによる 学習を考えている。 --(10/13) SEGVは直した 遅いのは検索の深さを2に下げて対処したけど、 適切な枝刈りをすればもっといけるはず。 --(10/12) N-gira アルゴリズムはなんとかなった。 *2回目以降の変換でSEGVる *。が最後に来る文節を処理できない *「私の名前は中野です」が遅い --(10/11) wordsplitterのバグ修正など --(10/9) wordsplitterの側にも正規表現エンジンが必要かな? もうちょっと強化すれば平仮名で書かれた数字とか処理することが できそうなんだけど、、 IIIMなんとかの説明とFreeWnnのソースを読もうとしたけど、 わけわからん。Ancyはきちんとドキュメントを付けるべし。 新しいwordsplitterにバグが残っているけど、古い方は除去した。 --(10/8) 新しいwordsplitterを書いている。 --(10/7) wordborderの内容をwordsplitに移す、その間やっかいですぞ! --(10/6) ループを構成する状態は全てマージすれば良い! wordborderを若干クリーンアップ --(10/4) 下手をすると、もっと色々なところでε遷移のループができることが わかった。要検討 --(10/3) segstructではε遷移のループが無いことを保証しようとするが、 (a?)* はε遷移のループがありますね、やべぇ。 wordborderパターンマッチの部分を若干書いた。 --(10/2) 今はwordseq中のルールの数だけそれに対応する構造体を作っているが、 将来的にはツリーを作ってルールを統合したりする。 たとえば、 *動詞連用形 くださ る *動詞連用形 くださ ら ない の前半は共有できる。 --(10/1) wordborderで、そのコンテキストの文字列中に含まれる 自立語の検索をやるようにしている。 このデータは最初のwordsplitが呼ばれた時のみに行なうようにする。 wordseq部のパーザを若干書いた。 --(9/28) wordborderを執筆中、そのうちwordsplitの検索はいらなくなる。 --(9/27) セッション管理を若干書いた。 --(9/25) sdicに単語長ごとの単語の存在の有無を表わすビットマップを 付けた、内部ではヒストグラムと書いている。 --(9/24) ハッシュのコードを今度こそマージした。 動作が遅いという指摘を受けた、対策は色々思いつくが 適当にやるのは危険である。 cannadicの単語の文字数と出現頻度のヒストグラム 1 111 2 2322 3 13834 4 26920 5 14470 6 10063 7 5714 8 3041 9 1409 10 554 11 310 12 143 13 74 14 32 15 14 16 7 17 3 18 4 19 0 20 1 --(9/23) (9/21)にディスクを忘れたせいで、hashのマージをもう一度やるべし。 どの活用形でも同じ頻度なのはおかしい。(直したつもり) wordborderで左右のスコアを同時につけずに、片方を先にやって もう片方をそれによって決めるというのを検討する。 単語の接続は 接頭語 自立語 接尾語 付属語(助動詞、助詞) として、wordboderでは自立語を中心に左右を見ていく 付属語のパートは定義ファイルに書いておかないといけないが、 その他はハードコードでよいかも? --(9/22) 辞書の作成をMakefile.am中に書いた INSTALLを更新した。 ~/.ancyをいらなくした。 単語境界の検出のアルゴリズム(通称 N-gira モデル(改))の説明 文字列 A_1 A_2 A_3 .. に対して R_1 R_2 R_3 .... L_1 L_2 L_3 .... の2つの列を考える。 A_nに対して、R_nはA_nの左が単語の右の境界である度合を評価し L_nはA_nの左が単語の左の境界である度合を評価する。 文字数をスコアとした場合には 「わたしのなまえは」に対して 「わたし」、「なまえ」を評価した場合 「わたしのなまえは」 R 0 0 0 3 0 0 0 3 L 3 0 0 0 3 0 0 0 「わたしの(地名)」を評価すると R 0 0 0 0 4 0 0 0 L 4 0 0 0 0 0 0 0 「わた」「たし」「しの」「なま」「まえ」 R 0 0 2 2 2 0 2 2 L 2 2 2 0 2 2 0 0 一文字の単語 R 0 1 1 1 1 1 1 1 L 1 1 1 1 1 1 1 1 RLそれぞれのトータル R 0 1 3 6 7 1 3 6 L 10 3 3 1 6 3 1 1 積をとると R*L 0 3 9 6 42 3 3 6 ここからどう切るかは考えていないが、最長一致すると。 「わたしの,なまえ,は」になる。 wordseqを除去した、wordsplit中に冗長な部分がたくさん有りそうな 気がする(splitのエントリや左の単語を見る部分)、 それから文節境界の制約条件を使っていない。 --(9/21) 部室にディスクを忘れたにゃあ 部室での開発分をマージした。 r氏のhashをマージした。 --(9/20) 単漢字の候補としての評価が間違ってるような気がするけど、 別にいいかな? wordborder.cを作った、ある程度機能が追加できたらwordseq.c を除去する。 自立語 助詞と助動詞以外、「単独で意味がある」 この定義によると動詞の未然形とかは自立語である。 自立語は文節の先頭につく、接頭辞がつくとそれは一つの単語。 Ancyでは当然上記の定義は使ってない。 --(9/19) wordborder.cを作るかな? --(9/18) 変更点などをChangeLogに書かない理由は、僕はChangeLogは ソースの変更を記述するもんだと思ってて、 方針(気持ち)の変更は書きづらいからです。 文節が一単語で構成されている場合は、 あらゆる品詞が候補となりうるようにする。 「あ」という文節に対しては(あ)と読むすべての単語が入っているが、 「あ、」に対しては入ってないのでまずい。 でも単漢字以外の全ての品詞を文節の構成要素として登録しとけば問題ない。 辞書モジュールへ存在しない単語を引きにいったときに無駄な処理をしていないか 要チェック。 「ゃ」とかが「。」とかと同じ扱いになっているので、それらを 単語として扱うようにした。 --(9/17) 単語境界の検出の新しいアルゴリズムを考えた。 文字列 A_1 A_2 A_3 .. A_n があるとして、 それぞれの間が単語境界になるかどうかという評価を行なう、 A_i と A_i+1 の間の境界になりやすさを B_iとする。 各B_iは0で初期化される。 A_i A_i+1 .. A_i+j が単語になれば、 B_i-1 と B_i+jは 加算される、このスコアは単語の長さや頻度で決定される。 B_i .. B_i+j-1に対して減点してもよい。 「わたしのなまえは」を例とする。 「0わ0た0し0の0な0ま0え0は0」 「4+3わ0た0し3の4+3な0ま0え3は0」わたしの、わたし、なまえ を加点 「7+2わ0+2た0+2+2し3+2の7+2+2な0+2ま0+2え3+2は0」わた、しの、なま、まえ 「9わ2た4し5の11な2ま2え5は0」 「なかのです」 「0な0か0の0で0す」 「3+2な0+2か0+2の3+2+2で0す+2」なかの、なか、かの、です 「5な2か2の7で0す2」 句読点や数に対しては両サイドに十分高いスコアを付けると良い。 そんで、これをどういうふうに実装しましょうか? に,ょ(促音の前で切っている) とか 猫ー(ーの前で切っている)とかも そのうちなおす。 --(9/15) バグは直した、ルールパーザではなくて、ただの初期化忘れ。 この手の不規則なバグはつらいにゃあ。 次はトークンのリストから正規表現のツリーを作る。 でけたにゃあ。でも連接しか処理できない。マクロ展開によって生じる 括弧ぐらいは処理できるようにする予定。(したはず、要チェック) トークンリストから構文木を作る際に | (縦棒)は一つのトークンとして 扱い、構文木の構成のパスのあとでこっそりリストを繋ぎかえて 形を合わす、これをpostprocessと呼ぶことにする。 それからsegstruct中では初期化時にいろんなものがリークする 良いものと悪いものの基準を作らんといけない、 あとから使わないものは解放すべしという方針でも別に構わんかな? 5000行到達 RAY'S RULE OF PRECISION Measure with a micrometer. Mark with chalk. Cut with an axe. 文法ファイルなどもインストールするようにした。 .ancyの記述が楽になる。 なんか単語境界の検出部の機能が貧弱すぎるような気がする。 問題点を列挙してw氏に検討してもらおう。 --(9/14) ルールパーザにバグがあるっぽい。 一行を長くすると落ちる。 --(9/13) 文節の関係のうちもっともシンプルなものを処理しようと考えている。 〜ものである。 〜してみる。 〜するとき。 などの漢字にならない従属する文節を前の文節とくっつけてみよう。 そもそも、文節間の関係のサーチは可能性が膨大でヤバそうだけど、 この手のやつは前後の一文節しか見ないで良いから得だ。 cannadicには「だい10かん」などの数字入りのエントリがある、これは mkdicの時点で除去する。 cannadic 0.91の「えおじん」のエントリがダブっている上に片方が変で ある、そもそも「エオジン」ってなんだ? 先送りしとるけど、正規表現のツリーの構成を決めないと進めない。 トークンの列 -- マクロの展開 -> 内部表現の列 -> 構文ツリー -> オートマトン てな感じかな? 構文要素は アトム 、 ( ) 、* 、 ( | ) ちょっとマクロの部分を書いたけども、マクロの再定義や マクロ定義中に別のマクロを使うことなどを考えないといけない。 TODO r氏の辞書エントリのハッシュのコードを取りこむ、 その後に辞書キャッシュから辞書セッションの情報を使うようにする。 --(9/12) candswap.cとcandswap.hを追加した。 しばらくemacs clientを作ろうと思う。 --(9/10) dic_session.cとdic_session.hを作った。 --(9/9) そろそろ、文法定義ファイルのドキュメントを書かないといけない。 それから、正規表現のパーザの停止性は入力を確実に消費することによって 保証する方針とする。このためにはε遷移のみのループを排除することが できれば良い。 当面の課題はsegstruct中の正規表現のパーザを構文解析とツリー構築の 2パスに分離することと、候補の優先順位を付ける良いメカニズムを 設計することである。 候補の評価は だから > 田から 私の > 渡志野 中野 > 中の ? となるべきである。 --(9/6) 候補の列挙を書いている最中なので、候補がほとんど出ない。 AncyはAncy Never Comfort You.らしい(shin先輩ありがとう) 候補生成がバグってる、直前で決定した品詞が使われてない| 品詞が決定されてない。 POS_NONEはワイルドカードで、POS_なんとかの未定義な品詞 がマッチしていたのでPOS_INVALを作って逃げた。 --(9/5) 昨日の「。」は直した。 正規表現の文法について考察中。 *,.,+などは後に付くんですね。 --(9/4) データの流れを整理しておく、 a segsplitで文節の境界が検出されsegcomposeに送られる b ->segcomposeはsegexpandを呼出す c ->segexpandは分割のパターンを列挙してからsegstructを呼ぶ。 d ->segstructは文節の構造が適していれば品詞情報を付加して segcomposeのcommit_split_entを呼びだす。 「動詞 助詞 。」というパターンは「。」があるために文節の形式であると 認識できていない。dのところで左右の記号を除去しないといけない。 --(9/3) 文節の構造の正規表現の部分が動き出した. --(9/1) パーザは分離した。 これから文節の構造のevaluatorを作るが、 文節の構造は正則言語であると仮定する。 正規表現は正則じゃないんですねぇ、これが。 --(8/31) 文法定義ファイルのパーザを分離する。 --(8/27) 副品詞はCOS(Class Of Speech)と命名した。 --(8/26) bigramのクラス定義ができるようにした。 segexpandの構造を変えようと思った。 今はA*で分割の候補を出して、それをすぐにコミットしていたが、 出した候補をもういちど並び換えるようにする。 A* -> depth firstへ書換える。枠組はA*の方がでかいので、 構造を変える必要は無いのだが、だからといって変えずにいては某ソフトの ようにわけのわからんことになる。 候補の入れ替えはcandswapというソース名にすることにした。 segexpandは一定の個数で切るか、一定のスコアで切るか、はたまた両方か? 今は正のスコアを持つもののみをコミットする。 --(8/25) 連体詞は名詞にした。 --(8/24) 「回す」はさ行5段、(「まわる」はら行5段こっちはcannadicにはのってないので base.dicに追加) カーソルキーを使わないでいけるようにすべしとのおことば、 しかし文節の伸縮じたいそうしょっちゅうあってはならんです。 「う゛」->「ヴ」は書いたが、「鵜゛ぁいおりん」は無いでしょう、、 --(8/23) 昨日書いたあとの品詞を固定することを「バインドする」と呼ぶことにする。 wordseq.cの関数名を整頓した。 形容動詞「あほだ」に対して「あほ」も形容動詞詞終止形になってしまっている。 これは原形CT_NONEと終止形CT_SYUSIが内部で同一だからだ。 (直したけど、「あほ」は形容動詞原形という扱いになって、名詞ではない。) 直した、sdic.c中に形容動詞原形は名詞原形にすると書いた。 ほかの場所に書いても良いかもしれない、辞書の種類が増えたら要検討。 片仮名の候補が出るようにしたが、「う゛」には未対応。 学習のフレームワークとして。 1,短期的な候補のいれかえ 2,長期的な頻度の更新 3,長期的な結合情報の取得 (4,ユーザ単語辞書) を考えている。 --(8/22) Ancyの組込みができた。 wordseqで純粋なbigramのみをやっているが、 「なかのです」という入力に対して 名詞+"の"で「なか」+「の」がマッチして、「の」が助詞になっているにも かかわらず、 名詞+"です"で「の」+「です」がマッチしてしまうのはおかしいので、 マッチした際に後の品詞を固定するような演算子を付けるといいかも。 この手では 「しろいはな」 は「白井」の方が先に名詞+"は"でマッチすれば「は」は助詞になってしまい、 「白い」がマッチすればそうならない、これは単語の優先順位によって 「白い」の方をとるようにすればよいと思う。 形容動詞の語幹という活用形を作る? --(8/21) wordseq.cのコメント/ドキュメントを書かないといかん。 --(8/20) しょうもないバグをとった。 品詞クラスの定義ファイルの形式を決定しないといけない。 たとえば定義を代入にするか束縛にするか? @C = @A & @B @C = @A | @B などの定義文が考えられる。 --(8/19) ソース内のグローバル変数にstaticを付けるのを忘れていた。 そのうちソースをEUCにする。 --(8/18) 昨日書いたbi-gramというのは、ある単語と次の単語という組の 出現する確率を評価するものである。 例えば 「名詞 + 'の'」 とか 「終助詞 + バリア 」とかである。 カテゴリーとしては .単語 "の" など .品詞 名詞 数詞 形容動詞*連用形 など .クラス 上の2つのカテゴリーおよびクラスに対して 和積差などをやったもの。 wordsplitのget_left_seq_begin()を書くこと、 全検索モードのところにも取りこむ。(Done) アルゴリズムのドキュメントを書く。 dic_sessionの意味とAPIを再検討する必要がある。 「この」-「あか」 で +1000にすると この、あ、か になってしまう、これは「この」を決定する時にはこのルールは 使用されるが、「あ、、」を決定する際には使用されないからである。 --(8/17) bi-gramによって単語の接続を評価する。src/wordseq.[ch]の追加。 その前に品詞の分類を決定しないといけない。 テーブルには 品詞 * 品詞 単語 * 品詞 品詞 * 単語 このテーブルはとりあえず、ソースの中に埋め込むことにする。 単語を扱うためには単語のグループ化が必要。 --(8/15) 活用表をlibancydic/dic_cache.cからどっかに移すべきかな? 書きおわるまで保留。 か変活用は保留 cannadicの「うてな」のエントリは不十分だ。 句読点および文末をあらわすバリアを作らんといかん。 活用表は書ききった(か変活用以外)。 ~/.ancyを読むようにした。 cannaは接続詞と感動詞を同一にしている。 --(8/14) 文節間の評価の調整は単語の結合だけではなくて、文節の格(みたいなもの) の相関によっても行える。 「私の」 の次に 「名前は」があると、「渡志野」の場合よりもスコアが高い。 wtype_tをポインタ渡しするかどうかにバラつきがあるが、 この決定はしばらく保留する。 動詞の活用クラスを書いた。いくつか変な特例になっている部分があるので 要調査。 CC_AJも音便型などを要調査 CC_AV(形容動詞)は名詞でもあるのでやっかい Cannaは助詞、助動詞を辞書に持ってない。 か行5段の活用表を作った。 が行5段の活用表を作った。 Canna辞書には#N01が無い?「千」が変換できない? --(8/12) 同音異義語の多い単語は頻度よりも結合情報に従い、 そうでない単語は頻度に従う。 「あ、、、」というような単語でない文字列が右に付随するようなものを segsplitで処理するようにした。 基本辞書の形式が古かった、ついでにJISだった。 get_nth_dic_ent_freq()の中身を書くこと。(書いた) 評価を行わないといけないところは、 .単語境界の設定。 .文節境界の設定。 .候補の評価(文節内と文節間)。 「あかい」を検索する際には「あかい」のエントリを確保する。 「あか」 という形容詞活用の語幹があればそのエントリに追加する。 TODO cache_get_seq_entでsdic_fill_seq_ent_by_xstrで一つもエントリが 追加されなければddic中のエントリも削除して、NULLを返さないといけない。(done) --(8/11) 品詞 .動詞 .名詞 .接続詞 .形容詞 .副詞 助詞、形容動詞 活用形の列挙をする。 活用のことを英語でconjugationというらしい。 環境変数を使うといろいろとわけのわからんことになるので、 環境変数を使うことはあんまり考えず、 ~/.ancyを設定ファイルとする。 conf.cとconf.hを作った。 --(8/10) wtype_tの構造の草案。 .その文字列の活用形 .原形の活用 .品詞 .品詞サブタイプ ddicのtrieは無駄に複雑なので、線型探索にした。 ハッシュぐらいは追加する。 xchar.hはEUCにした。 --(8/9) xchar.hを作成、TODO EUCにする。(した8/10) --(8/7) サン=テグジュペリの「夜間飛行」を読みながら文節の構成を考えた。 括弧開きの類は後の文節の一部として扱い、括弧閉じや句読点の類は 前の文節の一部として扱う。 「なんとか会社」は音便が入って「なんとかがいしゃ」になる。 「じま」島 じゅっ 「10」 など。 cannadicは「かいしゃ」と「がいしゃ」のエントリを持つ 「がいしゃにのる」とか変換して「会社に乗る」と間抜けだが、 しかたないです。MS-IMEも「がいしゃ」->「会社」を候補に出してきた。 --(8/6) split_ent(文節の単語への切り分けの入った構造体)中の 単語のボーダーのmarkは文字の右側についているが、 contextの場合は左にmarkをつけている、これは一貫性が無い。(直した8/10) --(8/5) xstrcatを追加、 --(8/1) 候補の列挙部を若干書き足した。 --(7/31) WnnとCannaを読んでみたが、意味不明な部分が多すぎだが それ以上に略語が多い、Ancyはそんなことが無いように プログラムのドキュメントを十分に追加するつもり。 --(7/30) 文節とその中の単語境界を与えられた時の候補の列挙の戦略。 主要な単語を決定するその単語の全候補に対して前後の単語を 決定する。 --(7/24) メモ 「わたしのなまえはなかのです」を変換した際に 辞書キャッシュへのhitは300回missは100回ほど。 --(7/22) 辞書エントリの番号と単語の番号のずれは直した。 なんか辞書のエントリの部分が冗長かつparseが面倒そうだが まあ良いか、、 libancydicのTODOを書いておく ,活用形の処理(a) ,複数セッションの同時処理の効率化(a) ,学習機能(b) ,設定ファイルの処理(a) ,相関辞書(b) ,辞書ファイルのコンパクト化(b) a,bの2段階で強化する予定。 --(7/21) segment(文節)関係のモジュールの構成を整理した。 今のsegexpandは a,短い文節はきちんと処理できる b,長くて意味不明な文節は適切に処理を切り上げる ということになっているが、 長い数字などの文節をきちんとやる保証をする必要がある。 composeの際には単語ボーダーを設定されたsegmentが渡されるが、 この単語の一つをkeywordとして、全候補を出力する。 それ以外の単語については適当。 辞書エントリの番号と単語の番号がずれとる。 --(7/17) segcompose.c、segcompose.h、segment.hを追加した context.cからcompose_segmentが呼び出され、 compose_segmentからexpand_segmentを呼ぶことにより 分割候補が出力され、その候補それぞれに対して変換 候補を割当てる。 --(7/14) segcompose.cをsegexpand.cに名前を変えた。 A*みたいな凝った方法を使う必要は無いのかもしれない、 あるのかもしれない、わからんので使っている。 とりあえず、文節の分割っぽいことはできるようになった。 次には候補の割り当てをするので、辞書ライブラリに 辞書エントリを書く必要がある。 --(7/13) ST_WORDPARTを除去、あるひらがな文字列を与えた際にそれが なんらかの単語の部分であるかどうかを得る手段はなくなった。 新形式の辞書の検索を書き終った、次はこれを組込む。組み込んだ。 次はsputxchar,sputxstrを書く。 --(7/12) 新形式の辞書の読み込みをコーディング中、、 --(7/11) segmentのリサイズを書いた。 word_splitterの未知の文字に対する処理にバグ発見。 --(7/10) 旧形式のsdicを作る部分を消した。 次はsdicの読み込みを新しい形式に対応させる。 sdicの読み込みを作業中。 --(7/9) 新しいmkancydicを少し書いた、indexは約400kと以前の1/6まで小さくなった。 あとは辞書エントリとかを書く。 segcomposeを少し書いた。 --(7/8) 候補情報中にその候補の字面だけではなくどの辞書エントリを使用したの かというような情報を持つ必要がある。このためには今の辞書のロックの方法は まずい。 、、ので直した。 それからcannadic-0.91で辞書の形式が変更されたので、この機会に辞書の 書き直しのwork aroundを開始する。 --(7/7) 変換エンジンのパイプラインが見えてきたので、全貌をメモしておく。 1,単語の境界を設定する wordsplit 2,設定された単語の境界から文節の境界を設定する segsplit 3,設定された文節から候補を作り出す segcompose この際には1で設定した単語の境界は無視して再び単語境界の 候補を列挙する。 (4),前後を見て、候補の評価値を変動させる。 5,候補をソートする。 --(7/6) lock_dict,unlock_dictを辞書ライブラリに追加した。 segmentのリサイズを若干書いた --(6/29) 「なまえはなかのです」は 「なまえ、はなか、の、、」もしくは 「なま、えはな、かの」の2通りがある 1単語目の長さにバイアスをかけると前者を選択できる。 --(6/28) まったく適当な文節切りを書いた、 それから文節の伸縮のインターフェースを書き始めている。 --(6/25) 少し基本辞書を書いた --(6/24) adverb副詞 aj形容詞 cj接続詞 etcその他? kk団体名 name人名 noun名詞 pre接頭語 suc接尾語 tankan漢字 verb動詞 --(6/23) とりあえず 助詞+助詞というシーケンスは減点 ははは (母は) はは (歯は) がきちんと区別できるかな? fill_dic_entを少し書き足した。 --(6/21) sdic.cを若干クリーンアップした、次は辞書のエントリを実際に読みこむ部分 fill_dic_entを書く。 --(6/20) sdicの構造は以下の3つに分類できる。 trie tree 辞書にある文字列をすべてtrie treeのノードとしている index table trie treeのノードから辞書エントリを引くためのテーブル dic entry 辞書エントリ、現時点では変換後の文字列、頻度、品詞が入っている --(6/19) 辞書のキャッシュを書きはじめた。 --(6/18) それから、昨日書いていた。テーブルを書いた。 あるシーケンスはテーブルのインデックスといくつの辞書エントリを 持つかという情報を保持し、そのインデックスをもとにテーブルを引くと 辞書エントリ中のインデックスが獲得できるというしかけになっている。 これで活用とかも扱える。 cannaの辞書には助詞が無い。 --(6/17) 品詞情報の出力以外は書き終ったが、辞書には語幹しか書いてないので ちょっと困った。 ツリーのノードと辞書のエントリの間に一段テーブルを入れようと思う。 その前にフロントエンドをなんとか書こうと思う。 INSTALLを少し書いた。 記念すべき初の単語切り せっかく、だから、おれ、はこ、のあ、かの、とびら、を、えらぶ、ぜ --(6/14) sdicのファイル構造を悩んだりしていたけど、シェアードライブラリ(DLL)に するという手でごまかした、先日書いたmmapとかは抹殺してdlopenとか を使うことにする。 あいかわらずsdicとddicの関係は決めれないが、最初は学習無しの変換 エンジンでいいでしょう。 --(6/11) mmapの最初の方を書いた。 sdicとddicの関係について悩んでいるが、プロセスの単一の インスタンスで複数のユーザの要求に応えるのは面倒かつ あんまり必要そうでは無いのでやめる。 いざとなればlibancydic全面書きかえをする。 TODO sdic_node::nr_dicentを書く --(6/8) 昨日付けわすれていた頻度情報の読み込みを書きました。 ddicのセーブの部分を大体書きました。あとは読みエントリに 辞書エントリのオフセットを書くだけです。現時点でファイルサイズは 4MBぐらいになってそのうち1.5ぐらいがインデックスです。 --(6/7) 今日は辞書のテキストファイルから一行をパーズしてddicに追加する関数を 書きました。 さて、include以下にあるヘッダファイルの説明をします。 include以外に置かれたヘッダと違ってこれらのヘッダは ライブラリのユーザ,libancy,libancydicの3つのうちいずれか 2つによって使用されます。 ancy.h ライブラリのユーザ IMEなどが使うインターフェースを定義しています。 ancy_context_tによって変換途中の内容をあらわしていて、文字列のセット、 変換結果の取得などが可能です。 dic.h ひらがな(あるいは変換もとの文字、数字などを含む)の列から内部の構造体を 取りだすために使用します。 wtype.h 単語の品詞を意味するwtype_tを定義しています。 xstr.h Cの普通の文字列の扱いでは、文字ごとにバイト数が変ったりしてやっかいなので すべての文字をxcharという型として扱い、文字列はxcharの列へのポインタと 文字列の長さを持った構造体を用意しています。 xstr.hではこれらに関わるデータを定義しています。 --(6/3) nr_はNumbeRofのつもりです、Linuxのカーネルの慣習のようです。 ものの数を表現する変数の名前などにつかっています。 今日はddicをsdicとしてsaveするためのプログラムを若干書きはじめました。 今のところは辞書形式がddicとsdicの二通りなのですが、もし 3種以上に増えることがあるならば、オブジェクト指向的なディスパッチを 書かないといけないかもしれません、とりあえず、現在のところはsdicなんとか という関数はsdicの関数というように関数の名前で分けています。 --(6/2) *わかりにくいかもしれませんが、グローバル変数にはg_という プレフィクスを付けるようにしています。 *ヘッダファイルの話 ヘッダファイルは同じモジュール間で情報を共有するためのものと、 モジュールの外に公開する情報を示すためのものがあります 現在のancyの実装では1モジュールはたいがい1ソースに収まっているので 後者のヘッダファイルしかありません。 どうやって切り替え、共存していくのでしょうか? *スレッドの話 ancyはリエントラントには作ってないので、ライブラリのエントリでは ロックをかけるようなコードを書いた方が良いけど、それはまだ先 それからヘッダはC++からでもリンクできるようなお馴染の文を 追加しないといけない。 *wordsplitとsegsplitのメモリ解放の話。 はいったときにすべきか出る時にすべきか? *(5/31)にwordsplitterの後半と前半のやりかたを統合すべし と書いたが、それはすでにやった。 別の問題としてsegsplitterではモジュールの分離性を高めるために 処理をする前にcontextのデータを全部ローカルにコピーするように したがwordsplitterにも同様のことが必要 --(6/1) 「にわににわにわとりがいる」を単語で切った時には 「庭」「二羽」というように異なる単語の切り方の候補がでる。 単語の切り方を一通りに仮定するとこのような問題が発生するので 現実的な解決策としては、変換処理を次のような流れでやるとよい 1,単語の区切を探す 2,それを利用して文節の区切を探す 3,単語の区切を削除して、各文節内で単語の境界を切り直す --(5/31) wordsplitterを最後まで書いた、 wordsplitterは前半は3単語先まで 後半は全部の可能な切り方を列挙するという方法で 最大の評価のものを選ぶようにした。 次にすべきことは前半の評価法を後半のやりかたに統合すること である。 libancydic/に ancymakedic というコマンドを作るようになっている 今はテキスト形式の辞書ファイルを食わせて、 そのtrie treeを表示するコマンドであるが、近日中に読んだファイルを sdicとして出力するコマンドにする予定である。 --(5/30) 辞書のスケーラビリティ向上のために、複数の辞書ファイルを持つようにした。 いままでのdicなんとかをddicという名前に変えた。 ddic dynamic dictionary メモリを多く使う、検索が速い、書換えることができる sdic static dictionary ファイルイメージをmmapして使う(未実装) libancydic/にancymakedicというコマンドを作ることにした。 これはテキスト形式の辞書をddicとして読み込み、sdicとして出力する プログラムである。 --(5/28) ワードスプリッタ(単語に切るやつ)を半分ぐらい書いた、 今のところ、単語の長さの和を最大にするような切り方を するようにしている(単語の数を最小)。 --(5/28) シェアードライブラリにした、 実行する際には $ cd src $ ./test_ancy とやってください。 --(5/26) src/以下のファイル src/main.c このライブラリを使う人が呼び出した関数を内部の形式に 変換して実行する。例えばancy.hで定義されたancy_context_t は実は内部ではstruct ancy_contextであるといったような ものである。 src/context.c contextはある文字列に対して単語、文節の区切り、候補などの情報を もつ。 src/wordsplit.c ひらがなの文字列を単語に切る src/test_main.c ライブラリの試しなど(このソースはライブラリには含まれない) --(5/26) ancyのバージョンは例えば今日ならば526というように 日付を利用している。 --(5/19) ancyには以下のディレクトリがある。 src/ 辞書管理以外のプログラムおよびtest_main.c include/ ancy.hはancyを使用するユーザのプログラムによってインクルードされる その他は辞書ライブラリとのインターフェース libancydic/ 辞書の管理を行う。