「国会議事堂」が単語として認識された。様々な問題があり、うまくいかないケースがある。具体的な例は後述するが、これらを解消するためのAnalyzerという機能がJanomeには用意されている。print(token)char_filtersに前処理、token_filtersに後処理をリストにして登録することで、analyze時にセットで実行してくれる。具体的にどんな前処理を行うか?Unicode正規化を行うUnicodeNormalizeCharFilter前処理として文字列の比較をしやすいようにUnicode正規化をする。char_filters.append(UnicodeNormalizeCharFilter())正規化形式は「form」オプションで指定する。デフォルトは「NFKC」。分析がうまくいかないケースがある。同じ「ファックス」について記載しているのに・ファックス・ファクス・ファクシミリ・fax・Fax・FAXなど、書き方が違う。このまま出現頻度をカウントするとそれぞれ別にカウントされてしまう。そこで単語を置換し、表記ゆれを抑える。"fax"))実際にはCSVファイルにして読み込ませることで、簡単に追加できるようにしておく。他にも電話番号にマスクかけたりするのもRegexReplaceCharFilterでできる。"000-0000-0000"))品詞を絞り込むPOSStopFilter解析の仕方によっては、余計な品詞を取り除きたい場合がある。何について文章かを掴むだけなら、名詞と動詞を抜き出せばいいし、ネガティブ/ポジティブ判定をしたいなら助動詞も必要になる。なんでそうなるかについてはこちらのサイトがわかりやすかった。自然言語処理の必要最低限の知識だけ簡単にまとめる(1)/前処理としての形態素解析+pythonサンプル理由はさておき、品詞を絞り込むにはPOSStopFilterにリスト形式で出力したくない品詞を指定する。token_filters.append(RegexReplaceCharFilter(POSStopFilter(["記号","助詞","接頭詞"]))ストップワードを除外するため、Filterを自作する分析に邪魔な単語を解析結果から除外するためFilterを自作してみる。RegexReplaceCharFilterと同様に、正規表現と置換後の文字列をパラメータに分割したtokenを置換する。置換した結果が空文字になった場合は返却しないようにすることで、ストップワードを除外している。"))その他のFilterその他のFilterについては以下のサイトが参考になる。本家からもリンクされてた。上記を踏まえ、クラス化する実際に解析する時は、データをファイルから読み込んで、1行ずつ形態素解析する感じになる。使いやすいようにクラス化しておきたいところ。print(word.surface)これで解析の下準備ができた感じ。次回は実際に解析してみよう。関連記事25Word2Vecでベクトル分析してみる前回の続き。Janomeで単語に分割した文章を使って分析してみる。前回紹介したAnalyzerでも調べられる。Word2Vecこの投稿へのコメントコメントはありません。コメントをキャンセルメールアドレスが公開されることはありません。*サイト上に表示された文字を入力してください。コメントデータの処理方法の詳細はこちらをご覧ください。この投稿へのトラックバックトラックバックはありません。