[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[ノート>ノート/ノート]]~
[[ノート/テキストマイニング]]~
訪問者数 &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 ### これでは表示がまずいので以下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]
終了行:
[[ノート>ノート/ノート]]~
[[ノート/テキストマイニング]]~
訪問者数 &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 ### これでは表示がまずいので以下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]
ページ名: