とりあえず旧サイトよりコピペ。
書式を統一するのはまた今度・・・いや、いつか・・・(--;
2010年に「入門 自然言語処理」が出ましたね。英名が「Natural Language Processing with Python」。Pythonって書いちゃってますよね。
とりあえず、12章の日本語についての記述がある部分はネットでも公開されてる。んで、同じコトしてみたいときはコピペで出来るから便利w http://nltk.googlecode.com/svn/trunk/doc/book-jp/ch12.html ま、1、2章って真面目に読んで疲れて、3、4章辺りは流し読み。そして12章を読むと。あれ?真面目に読んだの3/12章だけ?しかも12章もWordNetと形態素解析以外は流し読み…(--; ページ数で言うと約100/約520ページ……20%も超えてないだろうな……あはは☆(^^; programing
ソースの書き方 1行目:#!/usr/local/bin/python 2行目:# coding: sjis または # cording = sjis
windowsだとsjisだし、linux・unixだとeuc-jpですかねぇ。
chasenとかの出力ファイルはmbcsだったw
今まで文字コードをわざわざ変えて使ってたのバカみたいww
プログラムのメモ
保存時の文字コードに注意!!!!!!
たまにリストのレンジ足りないって怒られる。で、なんで怒られるのかずっとわからずに悩んでたというw a=[""] ↓ IndexError: list assignment index out of range ↓ a=[""] * 100 でも、100個より多くなったときは対応できないのが難点だよね。今はコレでいいことにしといてください…(--; del(a[i:]) で、i以下を消せるんで、今はwhile文を回して、回し終わってaに入った要素数(i)を数えといてそれを使って消去してます。 #全て半角英数字か? #Pythonの正規表現で、渡された文字列が全て半角英数字かチェックします。(UTF-8向け) import re regexp = re.compile(r'^[0-9A-Za-z]+$') result = regexp.search("aiueoあいうえお") #ココの(カッコ)内にチェックしたいものを入れると。 if result != None : print(u"すべてが半角英数字である".encode('shift_jis')) else : print(u"すべてが半角英数字ではない".encode('shift_jis')) #↓ #"全て半角英数字である" reを使った正規表現のプログラムなんて考えたこともなかった私w 演習問題初級単語マッチング1テキストファイル(何でもよい)を読み込んで、(例えば)「事件」という単語が含まれる行だけを画面に出力せよ。 #!/usr/local/bin/python # coding: sjis import codecs uf=codecs.open("example_1-1.txt") for uline in uf.readlines(): if uline.find("事件")!=-1: print uline
ファイル名は絶対パスまたは相対パスで。ソースと同じ場所にあればそのままで可。 引用表現抽出テキストファイルを読み込んで、「...」で括られている部分(引用表現)を抽出、表示せよ。 #!/usr/local/bin/python # coding: sjis import codecs uf=codecs.open("example_1-2.txt") for uline in uf.readlines(): if uline.find("...")!=-1: c=uline.split("...") print c[1]
中級名詞連続1. 入力ファイル中から、NのN(Nは任意の名詞、例えば「私の本」)及びNN(=名詞連続、例えば「参考図書」)の形式になっている表現すべてを出力せよ。 #!/usr/local/bin/python # coding: sjis a=0 b=[] import codecs uf=codecs.open("example_2-1.txt") for uline in uf.readlines(): if a==0: if uline.find("名詞")!=-1: a=a+1 c=uline.split("\t") b.append(c[0]) if a==1: if uline.find("の")!=-1: a=a+1 c=uline.split("\t") b.append(c[0]) if a==2: if uline.find("名詞")!=-1: c=uline.split("\t") b.append(c[0]) print "".join(b) b=[] a=0
活用一覧作成テキストファイルからそこに出現した動詞をすべて抽出し、使われていた活用だけを一覧表にまとめよ。
#!/usr/local/bin/python # coding: sjis import codecs uf=codecs.open("example_2-2.txt") for uline in uf.readlines(): b=[] if uline.find("\t"+"動詞")!=-1: c=uline.split("\t") b.append(c[2]+"\t") if uline.find("未然形")!=-1: b.append(c[0]) elif uline.find("連用形")!=-1: b.append("\t"+c[0]) elif uline.find("終止形")!=-1: b.append("\t"+"\t"+c[0]) elif uline.find("連体形")!=-1: b.append("\t"+"\t"+"\t"+c[0]) elif uline.find("仮定形")!=-1: b.append("\t"+"\t"+"\t"+"\t"+c[0]) elif uline.find("命令形")!=-1: b.append("\t"+"\t"+"\t"+"\t"+"\t"+c[0]) print "".join(b)
install and download
nltk (Natural Language ToolKit)自然言語処理入門に書いてあったからやってみた。英語の公式ページ→http://www.nltk.org/ めも。
コマンドプロンプト(場所が基本位置以外)でpythonを起動。そしてimport nltkをやると…できないw WordNet真嘉比さんに助けてもらって、やっとフロントエンドのプログラムが理解でき"始めた"っぽい。 日本語WordNet→ http://nlpwww.nict.go.jp/wn-ja/ wnjpn-0.9.dbというデータベースファイル(.db)を元にしたプログラムを書いていて、それも上記のサイトで落とせるはず。 あ!これにはwn.pyというプログラムが必要。英語のWordNetと一緒にあるはずなので、探すべし。 やってみたがあったから、つないでみた。http://www.nal.ie.u-ryukyu.ac.jp/note/note_detail/1471/ 真嘉比さんに解説してもらった結果わかったものを以下にあげてみよう。(私は全く使えないダメ子なので;)↓ SQLite3dbファイルを読み込むために必要なライブラリ。 あれ?なんでdbの勉強に…?(;_;) executeレコードの取得? c = con.execute(u"select * from 社員") for row in c: print row[0], row[1], row[2] ↓ 橋本 26 広報部 小泉 35 営業部 亀井 40 営業部 select * from ○○ where ××
cur = conn.execute("select * from word where lemma=?",(lemma,)) ※lemmaはプログラムの前の方で見出し語が入ってるよ。 例でわからなくて、「自分、KYだ…」って思う方は下の参照を読むべし。…私にとってはよくわからないが、知っている人にとってはわかりやすいんだろう…たぶん。 fetchone残りのレコードを取得? c = con.execute(u"select * from 社員") row = c.fetchone() print row[0], row[1], row[2] print "---" for row in c.fetchall(): print row[0], row[1], row[2] ↓ 橋本 26 広報部 --- 小泉 35 営業部 亀井 40 営業部 …問題は、どんな入力によりどんな出力が返ってくるかをわかることであって、その間のブラックボックスなファンクションは置いとけばいいと思う! namedtuple名前付けれて、それを使ってアクセスできる良い子。 Word = namedtuple('Word','wordid lang lemma pron pos') http://d.hatena.ne.jp/mopemope/20081128/p3 with chasenなんかchasen.pyってのがネット上に上がってる。これも「入門 自然言語処理」からぽ。 ○chasen.pyがあるトコ http://code.google.com/p/nltk/source/browse/trunk/nltk/nltk/corpus/reader/chasen.py ○日本語nltk??ブログの名前がUnNatural Language Processingなとこが好き☆w(楽天の萩原さんって方) http://lilyx.net/nltk-japanese-corpus/ ○chasen.pyで検索かけると一番にでてきたブログw http://d.hatena.ne.jp/yassuo_s/20110307/1299497846
拡張モジュールあり!ただし、Visual Cのvcvarsall.batさんが必要?
どうやらchasenを使うためのプログラムがC言語のため、Cを使うためのベースが必要だったらしい!
さらに久保木さんからのご協力により、def chasenのプログラムを提供していただきました!
○現在、何回か書き換えを試し中…
getstatusoutputさんを使用して、茶筌を実行しようとしているのですが、unixさん限定… ↑現在、諦め中☆ |