[[ノート>ノート/ノート]]~
[[ノート/テキストマイニング]]~
訪問者数 &counter();      最終更新 &lastmod();~

**日本語のテキスト解析 [#nf688d1c]
-形態素解析
-係り受け解析

**pythonからの形態素解析 [#n9001b48]
-chasenの呼出しラッパー~
pythonから茶筅を呼出す簡単なラッパーを用意した。⇒ ラッパーについては、[[ノート/テキストマイニング/oregano2]]の 「chasenのラッパーを作ってみよう ver.0」 に説明がある~
~
サーバーoregano上に用意したので、oregano上で下記のようなpythonプログラムを用意すれば、呼び出すことが出来る ⇒ [[ノート/oregano13]]の工藤プログラムの例、 および [[ノート/テキストマイニング/oregano3]]
 #!/usr/bin/env python
 # encoding: utf-8
 # -*- coding: utf-8 -*-
 ## To run with Kanji properly, the Python default encoding should be set to utf-8.
 import sys
 import codecs
 import re
 import pycha       ## これを入れる
 sys.stdout = codecs.getwriter('utf_8')(sys.stdout) ### A magic for printing UTF-8 characters
 
 fname="input.txt"
 words = []   # wordsは語のリスト
 # ファイル読出し
 fd = open(fname, "r")
 txt = fd.read()
 
 # chasenの呼出し
 out = pycha.pycha(txt)
   # outはchasen出力に対応し、全体outは語goを要素とするリストとなっており、
   # 語goは更に語幹、読み、原形、品詞、その他の要素から成る。その他部分は品詞による。
   # 以下はそれを分解する処理の例。
 sonota1 = ''
 sonota2 = ''
 for go in out:
   gokan = go[0]
   if len(go)>=2:
     yomi = go[1]
   if len(go)>=3:
     genkei = go[2]
   if len(go)>=4:
     m = r.match(go[3])
     ##print "m.group()", m.group(), len(m.group())
     if m:
       if m.group()[len(m.group())-1]=='-':
         hinshi = m.group()[:len(m.group())-1]
       else:
         hinshi = m.group()
     else:
       hinshi = go[3]
   if len(go)>=5:
     sonota1 = go[4]
   if len(go)>=6:
     sonota2 = go[5]
   #print gokan
   if hinshi=='名詞' or hinshi=='動詞' or hinshi=='形容詞':   # たとえば名詞・動詞・形容詞の時だけwordsに追加する。
     words.append([hinshi, gokan, genkei])
 words.sort()
 print words

 # print words    ### これでは表示がまずいので以下4行に置換え(2011/04/18)
 for w in words:
   for u in w:
     print u,
   print
-

**pythonからの形態素解析の応用 [#g6846675]
***[[文書の単語ベクトルによる類似度計算と剽窃検出>ノート/テキストマイニング/剽窃1]] (2010/02/04) [#r0df45c0]
原理
-単語出現頻度分布の近さを見る 〜 一般には出現頻度ベクトルの角度を見る~
岩堀先生のページ:http://www.cvl.cs.chubu.ac.jp/lab/study/education/similar/similar.html (2002/10 岩堀 祐之,舟橋 健司,伊藤 宏隆,石井 直宏)~
2008年に書かれた(伊藤 宏隆 都築 賢二 松尾 啓志、第24回ファジィシステムシンポジウム講演論文集、FA1-3)の論文「自然言語処理によるレポート類似判定システムの開発」(リンク先に本文あり):http://www.jstage.jst.go.jp/article/fss/24/0/169/_pdf/-char/ja/

-名詞のみに限定し、各単語の出現頻度を数える。原理は http://www.cvl.cs.chubu.ac.jp/lab/study/education/similar/similar.html の通り。~
TF (Term Frequency) と IDF (Inverse Document Frequency) を求める。~
  TF: それぞれの文書中で、それぞれの単語の出現する回数~
  IDF: 全文書数Nに対する、その単語Wが出現した文書の数dfの比を、逆数にし、かつlogをとったもの。つまり、log( 1 / (df/N) ) = log( N/df )。~
文書ごとに、単語ごとの tf * idf を計算して並べたベクトルを作る。(その文書には出現しない単語も0の要素を置く)
| 文書 | 単語1 | 単語2 | 単語3 | 単語4 | ... |
| 1 | tf*idf | tf*idf | tf*idf | tf*idf | ... |
| 2 | tf*idf | tf*idf | tf*idf | tf*idf | ... |
| 3 | tf*idf | tf*idf | tf*idf | tf*idf | ... |
| ... | tf*idf | tf*idf | tf*idf | tf*idf | ... |
すべての文書対について、それぞれの文書のベクトル(表の1行)の間のなす角度を求め、それの近さが文書の類似性であるとする。~
なす角はcosineを用いて測り、それは2つのベクトル間の内積として求める。但し各ベクトルはあらかじめ長さを1に正規化しておかなければならない。~

プログラムと結果 ⇒ [[剽窃1>ノート/テキストマイニング/剽窃1]]~

**係り受け解析 [#h271adfb]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS