sileのブログsileのブログ読者になるsileのブログこの広告は、90日以上更新していないブログに表示しています。algorithm形態素解析器作成の2。前回で必要なデータの準備は終わったので、今回からは解析器の実装に入る。この実装では、形態素解析はおおまかに次の二つの段階に分けられる。入力テキストを形態素列に分割する。一般に、入力テキストは複数の形態素列に変換可能なので、その全てのパターンを列挙するそれらの分割にコスト(優先順位)を付与する。コストが最小の形態素列が、入力テキストの最適な形態素解析結果となる。今回はこの内の1の段階を扱う。入力テキストの形態素列への分割とあるが、実際にはこの段階では、入力テキストを元に形態素をノードとするグラフを生成する。「目玉焼きを食べる」という文章(入力テキスト)は、次のようなグラフに変換される。各ノードは、"形態素名#ID[テキスト中の開始位置-終了位置]"という形式になっている。「目」などの形態素が複数同時に表れているのは、それらがIPA辞書内で、同じ単語名でも違う品詞として複数登録されているため(多品詞語)-このような形のグラフは、形態素解析の用語では(?)ラティス構造と呼ばれるらしい。graph)と云われた方がしっくりくる。このグラフのBOSノードを始点として(一般的なグラフの)探索を開始し、EOSノードへの到達毎に探索パスを出力するようにすれば、入力テキストの可能な形態素分割結果が全て得られる。上の例では、10816通り(多分)今回は、このグラフを入力テキストから得るのが目的な訳だが、そのためには前回用意したIPA辞書の単語セットを使って、入力テキストの全ての部分文字列に対してマッチングをかければ良い。これはcommon-prefix-searchを使えば簡単に実現でき、基本的なロジックは以下のように数行+αで書くことができる。EOSはここにくるまだ(上の※3に書かれている)多品詞語*1の存在を考慮に入れていないため、上に載せた図のそれとは若干異なるが、グラフを作成するのに必要な情報はほとんど得られている。概要は上に書いた通りなのだが、実際には後続の処理のために、いろいろやらなければいけないことがある。以降は、そのためのコードを載せていく。普通は、品詞や読みなど。NIL}1の段階で必要な関数は以上で終了。あと、おまけとして、最初の方に載せた図を作成する関数の定義も書いておく。GoogleAppEngineで形態素解析サーバIgoをGoogleAppEngine上で動かしてみた。ID付け最初に前回作成したtrie2dawg関数を使って、DAWGとして表現した...2009-11-22形態素解析器(4)形態素解析器の4。今回は未知語処理+αを扱う。前回までで作...2009-11-15形態素解析器(3)形態素解析器作成の3。6最新記事RustでMD5ハッシュを計算するRustとSBCLでのDAWG構築性能の比較メモEmacsのファイル保存時に自動的にrustfmtが適用されるようにする現在時刻をUNIXタイムスタンプ形式で取得するloglevelとseverityの使い分けメモ注目記事ブクログqiitasileのtips人気エントリーはてなブログをはじめよう!sileさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。