「SWIG」を含む日記 RSS

はてなキーワード: SWIGとは

2009-03-30

自然言語処理Python がいちばん」について

http://d.hatena.ne.jp/mamoruk/20090327/p1

「いちばん」かどうかはわかりませんが、うちの会社製品ではpythonを主力に使った自然言語処理を含む製品を販売しているので、実際の感想を。

うちでは、pythonを元データの整備のための運用バッチ処理から、客が最終的に手にする情報の生成、実際に客が使うWEBインターフェースまで、pythonを主力にしています。

別のチームが作った別の製品ではS2Struts(JAVAね。)でWEBを作っている部分もありますが。

自然言語処理ぶっちゃけどの言語でも可能だとは思います。

mecabが使えて、Unicodeが使えて、正規表現が使えれば、まあ、どの言語を使ってもそんなに大差はないのではないでしょうか。

あとはsennaのような日本語用の全文検索エンジンなども使いますが、そこらへんに近い部分は基本的にC++で書きます。

pythonとは言っても、速度を重視する部分はやはり迷わずC++です。

C++で書いたものはswigを使うか、又はC言語で手書きのbindingを使ってpython接続します。

もこないだswigでつないで製品リリースしたら、WEBからの並列アクセスswigがうまく対応できず、リリースした日に急いで手書きbindingを書いた経験があります。swigの使い方はきちんと理解していないので非常に難しい。

nltkとか、wordnetの話はたしかに使えそうかもと思ったことはありますが、nltkはうちでは使っていません。

うちの会社では自然言語処理研究段階から自社で行っているので、nltkにあるようなできあいのルーチンを実戦投入する事はなく、基本的に地味に自分達でpythonで書いています。

自然言語処理と言っても、核心の処理はやはり泥臭い個別事例への対処が多いです。不要語処理とか。

自然言語処理アルゴリズムは8割程度の精度を出すのは簡単で、すぐに思いつきで書けるものですが、残り2割の精度をいかに埋めて行くかが、頭のいい人とそうでない人の差が現れる部分だと思います。

どうしてもいいアルゴリズムを思いつかない場合は、泥臭い個別事例処理がうねうねと並んだプログラムになります。学術的なものではなく商売になればいいので、うちはとりあえずそれで十分。(これは自然言語処理に使う機械学習アルゴリズムたちも同様。というか自然言語処理機械学習て、区分けがあいまいな部分が多いですよね。)

そういう感じなので、pythonの可読性の高さは非常に有効。

また、変数名や関数名などをexplicitに書く文化も業務で使うのに適していると思います。(他の言語でもexplicitに書けばいいだけですが、それを言語開発者自身が推奨するほど強調はしていないですよね。)

英文の処理で、wordnet辞書データの一部を研究に使った記憶はある。

しかし、あそこまで精緻辞書データを使う程高度な処理は今の所必要ない。

うちで自作した不要英単語辞書と、特別扱いする英単語辞書で間に合わせていたと思います。(その辺記憶あいまい。)

WEBユーザーインターフェースdjangoで。

djangoは非常に明快で、快適。

画面の機能を追加するのに、例えばS2Strutsアクション定義の煩雑さに比較すると、天と地との差ほどにdjangoは簡単。

あと、pythonを使える開発者日本には少ないとの事ですが、うちでもそれは同様です。

しかし、自分の隣の席の同僚はperlに非常に熟達していて、彼はすぐにpythonの達人に変わりました。

優秀な方にとっては言語なんて何をつかってもあまり変わらないみたい。

でも、彼も自分自然言語処理JAVAC++のようなまわりくどい言語は使ってられないという点では同意しています。

2008-12-30

http://anond.hatelabo.jp/20081230060518

とはいえ、参照や配列を理解するのにポインタは必須ではない、というか別概念だよね。

Cでは参照や配列を扱うときにポインタという生の実装がむき出しになってしまうけど。

OCamlSML (もしくはHaskell) のような、ぜーんぶ値渡し+必要なところだけ陽に参照(ref)型を使う、という言語を最初に使ってれば、ポインタを理解してなくてもJavaC#の参照もまあすんなり理解できると思う。

なまじ中途半端に参照と値渡しが構文的に区別されずに存在していたり、Rubyのように参照しかない(と思ってるんだけど)世界からはじめると、後々苦労するような。

CはもはやゲームとかOSとか組込みとか、リソース制約のきついソフトウェアを書くための言語にすぎないと思う。やっておくに越した事はないし、低レベルレイヤを理解しておくべきだし、言語間の関数呼び出しみたいなことをするのにも知っておいた方がいいけど(とはいえSWIGみたいなものもある)、より抽象度の高いところから手をつけるアプローチもあっていいんじゃないかなー。

# トラバ先を誤爆

2008-03-15

[][]PythonからSWIG経由でVisual Studio 2005を使って困ったこと

以上のような組み合わせで出くわした困ったことと、その解決策をメモしておきます。

setup.py を実行するとエラーが表示された!

Python was built with Visual Studio 2003;

extensions must be built with a compiler than can generate compatible binaries.

Visual Studio 2003 was not found on this system. If you have Cygwin installed,

you can try compiling with MingW32, by passing "-c mingw32" to setup.py.

setup.pyに.iファイルとか.cppファイルを記述して実行すると、こんな感じのエラーメッセージが表示されました。うーん、困った!

http://labs.cybozu.co.jp/blog/mitsunari/2007/08/vc2005boostpython.html

上記のページを参考にして、"%Pythonインストールしたフォルダ%/Lib/distutils/msvcompiler.py"を以下のように修正してみたら解決できました。ありがとうありがとう

--- msvccompiler.py    2007-04-04 17:17:12.000000000 +0900
+++ 
@@ -126,7 +126,7 @@
         self.set_macro("FrameworkDir", net, "installroot")
         try:
             if version > 7.0:
-                self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv1.1")
+                self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv2.0")
             else:
                 self.set_macro("FrameworkSDKDir", net, "sdkinstallroot")
         except KeyError, exc: #
@@ -252,7 +252,10 @@

     def initialize(self):
         self.__paths = []
-        if os.environ.has_key("DISTUTILS_USE_SDK") and os.environ.has_key("MSSdk") and self.find_exe("cl.exe"):
+        if self.__version >= 7.1 or (
+            os.environ.has_key("DISTUTILS_USE_SDK") and
+            os.environ.has_key("MSSdk") and
+            self.find_exe("cl.exe")):
             # Assume that the SDK set up everything alright; don't try to be
             # smarter
             self.cc = "cl.exe"
@@ -288,10 +291,16 @@

         self.preprocess_options = None
         if self.__arch == "Intel":
-            self.compile_options = [ '/nologo', '/Ox', '/MD', '/W3', '/GX' ,
-                                     '/DNDEBUG']
-            self.compile_options_debug = ['/nologo', '/Od', '/MDd', '/W3', '/GX',
-                                          '/Z7', '/D_DEBUG']
+            if self.__version >= 7.1:
+                self.compile_options = [
+                    '/nologo', '/Ox', '/MD',  '/W3', '/EHsc', '/DNDEBUG']
+                self.compile_options_debug = [
+                    '/nologo', '/Od', '/MDd', '/W3', '/EHsc', '/Z7', '/D_DEBUG']
+            else:
+                self.compile_options = [
+                    '/nologo', '/Ox', '/MD',  '/W3', '/GX',  '/DNDEBUG']
+                self.compile_options_debug = [
+                    '/nologo', '/Od', '/MDd', '/W3', '/GX', '/Z7', '/D_DEBUG']
         else:
             # Win64

cl.exeが見つからないと言われた!

setup.pyを実行するとcl.exeが見つからないみたいなエラーが表示されました。これは、アレだ。「パス通せ!」ということですね。bashを起動するときのバッチファイル(たぶん"cygwin.bat"とか)で、以下のような行を入れてやれば解決しました。

call "%VS80COMNTOOLS%vsvars32.bat"

setup.pyを実行したときに"basetsd.h"が開けないと言われた!

d:\python25\include\pyconfig.h(189) : fatal error C1083: include ファイルを開けません。'basetsd.h': No such file or directory

error: command 'cl.exe' failed with exit status 2

setup.pyを実行すると、上のようなエラーが表示されました。

http://d.hatena.ne.jp/ousttrue/20070531/1180556273

上記のサイトを見るとインクルードパスが通っていない場所に"basetsd.h"があるのが原因なので、"cygwin.bat"にインクルードパスの設定をしておきました。

call "%VS80COMNTOOLS%vsvars32.bat"
set INCLUDE=C:\Program Files\Microsoft Platform SDK\Include;%INCLUDE%

setup.pyを実行したときのリンク時にエラーが発生した!

link: extra operand `/INCREMENTAL:NO'

詳しくは `link --help' を実行して下さい.

error: command 'link.exe' failed with exit status 1

これは、cygwinのほうのlink.exeが実行されてるのが原因でした。スマートな解決策ではありませんが、cygwinのほうのlink.exeをリネームして解決。パスの設定順序とかでどうにかできるといいんだけど、どうすればいいんかな。

MSVCR80.dllが見つからないと言われた!

MSVCR80.dllが見つからなかったため、このアプリケーションを開始できませんでした。アプリケーションインストールし直すとこの問題は解決される場合があります。

SWIGが生成した.pyファイルをimportしたら、こんな感じのエラーダイアログが表示されたよ。うーん、困った!

http://d.hatena.ne.jp/moriyoshi/20070525

上記のページを参考にして、"%Pythonインストールしたフォルダ%/python.exe.manifest"として以下のようなファイルを新しく作ったら、解決できました。ありがとうありがとう

あとこれ、bashから実行したらエラーダイアログが表示されず、importするモジュールが見つからないみたいなエラーメッセージが出力されるだけだったよ。

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
</assembly>
 
アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん