AI,AIととても騒がしくなり、AIの新刊書が次々と出ているが、その殆どがディープラーニングが対象で、とりわけ画像処理系の本が多い。考えると、画像処理関連だけではなく、人間を人間たらしめている言葉、テキストを扱わないわけにはいかない。自然言語処理、テキストマイニングなどのタイトルの本も、多くはないが、それなりに増えている。それで、Pythonでテキスト処理の説明をしている本として、本書を入手し、読んでみた。テキストマイニングの様々な処理例となっているのだが、第3章までは、Pythonの基本的な説明が中心である。最後の第5章だけがテキストマイニングになっているのだ。それでも、統計のために、形態素解析ソフトMeCabを使った例があった。いうことで、テキストマイニング自体の説明は、全体の1/3程度、70ページ位しかないのだった。第5章の最後に一応Word2Vecの節が設けられており、簡単な説明がされていた。話が始まったと思ったら、本が終わってしまったのだ。巷にはPythonの本が溢れているのだから、Pythonの基本や統計の基本的なことまで載せる必要はないと思う。それに、ちょこちょこっと載せるだけになるので、とても中途半端なものになってしまう。いうことで、Pythonに慣れていて、統計の基礎も知っていれば、本書は一気に読み飛ばしてしまえる。入門書だからそれで良いのかもしれないが、同じページ数で、テキストマイニングについてもっと丁寧な本にして欲しいところだ。Tweetまず、以下の文字を見てみよう。通常はありえない場合がいっぱいである。)を付けることができるようだ。やったらこんな文字(?)を表示できるかを説明する前に、なぜこういうことを調べることになったかの経緯を説明しよう。自然言語処理の練習をするのに、サンプルデータがいろいろあった方が良いので、このところ流行のWebスクレイピングでサンプル集めをした。集めた文章を、PythonのGUIであるTkinterのTextウィジェットに表示してみたら、こんな状況になってしまった。ブラウザ上やエディタ上では(a)のように見えていたのが、TkinterのTextウィジェット上では(b)の表示になってしまった。半濁点が1つの文字として、1文字分の文字幅を確保して表示されてしまった。「パ」が1文字ではなく、「ハ」+「濁点文字」の2文字になっていたからだ。それでも、多くのブラウザやエディタでは、直前の文字に重ねて濁点・半濁点を表示していたのだが、一部の文字表示ソフトでは、何も考えず、別の文字として表示処理をしているということだ。これは、Mac系でよく見られる現象であり、こういう状態のWebページに出会ってしまったのである。(b)を(a)に変換する問題に取り組む前に、Pythonでの文字の扱いをちょっと練習しておこう。Tweet今回は突然だが、文字コードの話をする。いうのは、ちょっとPythonでAI日本語処理らしきことをやっていたら、引っかかってしまったからである。図に、3つの土を、そのUTF-8のコードと共に示す。引っかかった文字は土の異体字の一つの下図の右端の字である。今では多くのソフトがUTF-8を標準として採用し、たとえ英語圏で開発されたソフトでも日本語処理に困らないことが多い。」は扱えないことに出くわすことが多い。最近、世のブームに引きずられてという訳ではないのだが、AI、言語処理系の何かをするとき、Pythonはツールが揃っているので使うことが多い。Python自体は、4バイトの漢字も扱えるのだが、Pythonに非常にたくさんあるパッケージの中には扱えないものもある。Pythonで文字処理をしていたのだが、GUIを用意しないと不便だなと思い、PythonのGUIツールキットのTkinterを使って簡単なGUIを作りつつあるところだ。それで、用意してあるテキストファイルを処理しようとしたら、「土屋(異体字)」さんの情報を処理しようとしたところで止まってしまった。実際には、長いテキストをTextウィジェットに貼り付けるメソッドを呼び出しただけなのだが、エラーが出てしまった。Textウィジェットに、「????」を挿入したらとりあえず文字は表示されたのだが、その後テキストを編集してみたら、消去やカーソル移動が発狂してしまった。要するに、UTF-8の4バイトコードに対応できていない。整理などをしようとすると、UTF-8の4バイト文字に必ず遭遇してしまう。UTF-8は、4バイトどころか、6バイト文字までサポートしているので、完全サポートというなら、そこまでちゃんとやらないとダメなのだが、ASCII文字だけで暮らしているエンジニアが多国語対応すると、こういうことになっているので、気をつける必要がある。このあたり、東アジアの漢字圏のエンジニアが対処しないときちんとしたものにならないようだ。昔は、データベースの対応もボロボロだったが、今は良くなっているのかな。Tweet自然言語処理をやろうとすると、日本語の場合全ての文字がベタッとくっついているため意味のある最小単位の形態素(単語)に区切ってから処理する必要がある。そのために、最初に日本語文字列の形態素解析を行う。あるが、今はMeCabを使うことが多いのではと思う。フリーで使え、よく利用されているMeCabを紹介しようと思う。インストールついては、環境によって違うので、MeCab公式サイトを参考にして欲しい。いうことで、さっそく使ってみよう。実行例はUbuntu上である。吾輩は人工知能である。名詞,一般,*,*,*,*,知能,チノウ,チノーで助動詞,*,*,*,特殊・ダ,連用形,だ,デ,デある助動詞,*,*,*,五段・ラ行アル,基本形,ある,アル,アル。記号,句点,*,*,*,*,。