形態素解析を使わずに適当に文を分けてみる。

シェアする

ぼけっとニュースサイト見てたら、形態素解析使わなくても文字の種類だけ見たら大体それっぽく分けれるんじゃね?っと思ってさくっと作ってみた。作った結果、形態素解析エンジンはすごい!という事はわかった。(あたりまえだ)

いちいちAPI叩いたりソフトウェアをインストールする必要が無いので楽といえば楽か。

以下ソース

# -*-coding:utf-8-*-
import re
# http://www.is.oit.ac.jp/~osato/server/~osato/links/SteveJobs20050612.html
teststr = u'ありがとう。世界有数の最高学府を卒業される皆さんと、本日こうして晴れの門出に同席でき大変光栄です。実を言うと私は大学を出たことがないので、これが今までで最も大学卒業に近い経験ということになります。'
# http://slashdot.org/comments.pl?sid=152625&cid=12810404
#teststr = u"Thank you. I'm honored to be with you today for your commencement from one of the finest universities in the world. Truth be told, I never graduated from college and this is the closest I've ever gotten to a college graduation."

putstr = u''
flg = 0
ret = []
THRESHOLD = 2

pattern = [
		{'re':u'[ぁ-ん]',            'flg':0},
		{'re':u'[ァ-ヶー]',          'flg':1},
		{'re':u'[一-龠]',            'flg':2},
		{'re':u'[a-zA-Za-zA-Z]', 'flg':3},
		{'re':u'[0-90-9]',         'flg':4}
		]

for c in teststr:
	other_flg = False
	for p in pattern:
		if re.match(p['re'],c) is not None:
			if flg is not p['flg']:
				flg = p['flg']
				if len(putstr) >= THRESHOLD:
					ret.append(putstr)
				putstr = ''
			putstr += c
			other_flg = True
	if other_flg is False:
		flg = None
		if len(putstr) >= THRESHOLD:
			ret.append(putstr)
		putstr = ''

for i in ret:
	print i.encode('cp932')

どうせ必要無いので一文字の箇所は飛ばしてみた。

以下実行結果。tstrの文章は Steve Jobs のスピーチから。

ありがとう
世界有数
最高学府
卒業
される
さんと
本日
こうして
れの
門出
同席
でき
大変光栄
です
うと
大学
たことがないので
これが
までで
大学卒業
経験
ということになります

文字種でわけてるので、「皆さん」とかが別々の語になってしまう。

ちなみに同じ文章を MeCab で解析すると以下の様になる。

$ python test_mecab.py

ありがとう
。
世界
有数
の
最高
学府
を
卒業
さ
れる
皆さん
と
、
本日
こうして
晴れ
の
門出
に
同席

でき
大変
光栄
です
。
実
を
言う
と
私
は
大学
を
出
た
こと
が
ない
ので
、
これ
が
今
まで
で
最も
大学
卒業
に
近い
経験
という
こと
に
なり
ます
。

大体単語毎にわかれてる。「近い」とか「言う」とかは辞書持ってないと判別出来ないかな。。

Sponsored Link

シェアする

フォローする

コメント

  1. フジノ より:

    今、人口無能をつくりたいと思っているので非常に興味深い記事でした!
    WinsowsXP、IEやGCでも正常に記事をみることができているんでしょうか?

  2. Ryo Matsufuji より:

    ありがとうございます。
    古い端末/ブラウザは私が所有してないため正常に記事が見れるかはわかりませんね…。IEは最新版であれば表示されるかと思います。