perl+win7でMecabを使う方法について

このQ&Aのポイント
  • perl+win7でMecabを使う方法についての要約文1
  • perl+win7でMecabを使う方法についての要約文2
  • perl+win7でMecabを使う方法についての要約文3
回答を見る
  • ベストアンサー

perl+win7でMecabを使う方法について

Mecab http://mecab.googlecode.com/svn/trunk/mecab/doc/index.html ---perl script[UTF-8]-------- # my $cmd = `"C:/Program Files (x86)/MeCab/bin/mecab.exe" "C:/Program Files (x86)/MeCab/bin/test.txt"`; my $cmd = `"C:/Program Files (x86)/MeCab/bin/mecab.exe" "今日は晴れだ。"`; open(F,">test_out.txt"); print F $cmd; close F; ------------------- 1行目の方法で行うと成功しますが、2行目の方法で行うとファイルの読み込みを行っているようで失敗します。 直接文字を入れることで動作させたいのですが方法はありますでしょうか? また、様々なプログラムの知識をネットで拾い読みする感じで付けてきて、あまり体系的に勉強していません。こういった、事の分かる書籍などあれば教えて頂ければ幸いです。 宜しくお願い致します。

  • Perl
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

mecabには詳しくはないのですが そこのマニュアル見る限り、 > "C:/Program Files (x86)/MeCab/bin/mecab.exe" "今日は晴れだ。" のように、「引数に指定した文字列を解析する」という機能は無く、指定したものはファイル名と解釈されるようです。 標準入力には対応しているようなので `echo "今日は晴れだ。" | mecab` とか open2を使う必要がありそうです。 # パスとか文字コードとは適宜変更する

その他の回答 (2)

  • N60-BASIC
  • ベストアンサー率80% (17/21)
回答No.3
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「ファイルの読み込みを行っているようで失敗します」ってどういうことだろう. あと, UTF-8 な文字列をそのままファイル名に使えるんだっけ?

tanaka_meio
質問者

お礼

回答いただきありがとうございます。 その通りです。読み込み失敗したとでます。 今のままですと一度中間ファイルを作らないと動作させられないため、改良したく思っています。この実行ファイルには文字を直接変換する機能がないのでしょうか? また、ファイル名については、半角英数字しか使っていないので気にしたことがなかったです。言われてみるとそうですね。

関連するQ&A

  • MeCab(和布蕪)をPerlで使うには

    MeCabをPerlから使おうと思い、MeCab本体であるmecab-0.93.exeと mecab-perl-0.93.tar.gzをダウンロードしました。 mecab-perl-0.93ディレクトリにあるtest.plをWindowsのコマンドプロンプトにて実行してみたのですが、エラーがでてしまいます。プログラムとエラーは以下の通りです。どういったエラーなのか良く分かりません。アドバイスお願いします。 <プログラム> #!c:/perl/bin/perl use lib $ENV{PWD} . "/blib/lib"; use lib $ENV{PWD} . "/blib/arch"; use MeCab; print $MeCab::VERSION, "\n"; my $sentence = "太郎はこの本を二郎を見た女性に渡した。"; my $c = new MeCab::Tagger (join " ", @ARGV); print $c->parse($sentence); for (my $m = $c->parseToNode ($sentence); $m; $m = $m->{next}) { printf ("%s\t%s\n", $m->{surface}, $m->{feature}); } <エラー内容> % test.pl Can't locate loadable object for module MeCab in @INC (@INC contains: /blib/arch /blib/lib C:/Perl/lib C:/Perl/site/lib .) at MeCab.pm line 8 Compilation failed in require at C:\Program Files\MeCab\mecab-perl-0.93\test.pl line5 BEGIN failes--compilation aborted at C:\Program Files\MeCab\mecab-perl-0.93\test.pl line5 以上です。

  • system()関数の使い方について

    PHPのsystem()関数を使ってWindowsのアプリケーション(C:\Program Files\MeCab\bin\mecab.exe)を実行しようと試行錯誤しています。 試行錯誤しながら以下のようなコードを書いたのですが、何も結果が返ってきません。 <?php $msg = system('C:\Program Files\MeCab\bin\mecab.exe C:\Program Files\MeCab\test-sjis.txt'); echo $msg; ?> 実験環境は、Windows XPにApacheを立ててPHP5をインストールしています。 動かなかった原因についてご指摘をいただけますと大変助かります。どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • Runtime.getRuntime().execの使い方

    Javaプログラムを実行するだけで、コマンドプロンプトを起動させ、 Mecabを動かしています。 try { String[] command = new String[8];  command[0] = "cmd.exe";  command[1] = "/c";  command[2] = "C:\\Program Files\\mecab\\bin\\mecab.exe";  command[3] = "-F";  command[4] = "\"%m,%f[0]\"";  command[5] = "result.txt";  command[6] = ">";  command[7] = "output.txt";  process = Runtime.getRuntime().exec(command);  以下省略 上のようにすると、output.txtにうまく出力してくれません。 ちなみに、  command[3] = "-F";  command[4] = "\"%m,%f[0]\""; の部分を省くとうまくoutput.txtに書き込まれます。 出力フォーマットを指定する方法はありますでしょうか。 またMecab単体を起動させて mecab -F "%m,%f[0]" result.txt > output.txt …(1) (1)のように入力するとうまくいきます。 Javaプログラムで(1)を実行させたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • perl MeCab 和布蕪 エラー

    perlで、テキストを形態素解析し、専門用語を抽出するコードを書いています。 Text::MeCab と TermExtract::MeCab; を利用しているのですが、 よくわからないエラーがでます。 以下 ソースとエラー文になります。 <ソース> #! /usr/bin/perl use Text::MeCab; use TermExtract::MeCab; my $text = "私はももが好きです。"; my $mtext = getMecabText($text); sub getMecabText{ my ($text) = shift @_; my @arg = ($0,"Ochasen"); my $mecab = new Text::MeCab::Tagger(\@arg); my $exdata = new TermExtract::MeCab; $text = $mecab->parse($text); return $text; } printKeyWord($mtext); sub printKeyWord{ my ($mtext) = shift @_; my $data = new TermExtract::MeCab; my $output_mode = 1; $data->use_TF; my @noun_list = $data->get_imp_word($mtext,'var'); foreach (@noun_list) { next if $_->[0] =~ /^(昭和)*(平成)*(\d+年)*(\d+月)*(\d+日)*(午前)*(午後)*(\d+時)*(\d+分)*(\d+秒)*$/; next if $_->[0] =~ /^\d+$/; printf "%-60s %16.2f\n", $_->[0], $_->[1] if $output_mode == 1; printf "%s\n", $_->[0] if $output_mode == 2; printf "%s,", $_->[0] if $output_mode == 3; } } <エラー文> Can't locate loadable object for module Text::MeCab in @INC (@INC contains: C:/usr/site/lib C:/usr/lib .) at C:/usr/lib/DynaLoader.pm line 21 BEGIN failed--compilation aborted at C:/usr/lib/Text/MeCab.pm line 21. Compilation failed in require at ./lab/a.cgi line 2. BEGIN failed--compilation aborted at ./lab/a.cgi line 2. C:/usr/site/lib と C:/usr/lib の中に MeCab.pmファイルを置いても同じエラーがでます。 DynaLoader.pm line 21 や MeCab.pm line 21 は改行のみでした。 MeCab.pm は http://search.cpan.org/~dmaki/Text-MeCab-0.20013/lib/Text/MeCab.pm の Source にあるものをコピペして設置しています。 いろいろと格闘したのですが、お手上げ状態です。 原因がわかる方いらっしゃれば教えていただきたいです。 よろしくお願いしいたします。

  • PerlをWinで使いたい。

    当方のパソコンのOSはWin XP SP2 です。 Perlの勉強を始めようと思いまして、 PerlがWinで使えるということなので、 Perl for Win32 Base Build 316 の日本語対応版をダウンロードしました。 C:\Perl\bin\フォルダの中のファイルは以下の通りです。 Jperl.exe Perl300.dll PerlGlob.exe XPerl.exe XPerlGlob.exe 別に中身が以下のようなtest.txtファイルを作りました。 $name = "KENT"; print "my name is $name", "\n"; print 'my name is $name', "\n"; それで、test.txtをJperlのアイコンにドラッグしました。 ms-dosの画面は出るのですが、何も表示されません。 お助け下さい。・・・m(_ _)m

  • mecabというアプリケーションをvisual studio 2010

    mecabというアプリケーションをvisual studio 2010を用いてC言語で実行したいのですが、どのようにすればいいのか分からず困ってます。 mecabの中にあるヘッダファイルは C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include に入れたらincludeしてくれたのですが、実行してみると 未解決の外部シンボル __imp__mecab_destroy が関数 _main で参照されました。 となってしまいうまくコンパイルできません。 ヘッダファイルのほかにどのファイルをどこに入れたらいいのか もしわかる方がいれば教えていただけますか?

  • 【DOSコマンド】for の デリミタにダブルクォーテーションを使うには

    下記のような1行だけ書かれたテキストファイルがあり、その中からダブルクォーテーションで囲まれた部分を抜き出そうとしています。 --【abc.txt】----------------------------------------------------------- Command Line: "C:\Program Files\test\test.exe" ---ここまで------------------------------------------------------------- (C:\Program Files\test\test.exe を抜き出したい) DOSコマンドのfor文を使って抜き出そうとしたのですがダブルクォーテーションをどうやってデリミタに指定したらいいのかわかりません。   for /f 'delims=" tokens=2' %i in (test.txt) do @echo %i  とか   for /f "delims="" tokens=2" %i in (test.txt) do @echo %i など いろいろやってみたのですがエラーが出ました。 試しにテキストファイルのダブルクォーテーションを”+”に置き換えて試したところうまく出来たので、デリミタの指定の仕方だけだと思うのですが、どうしてもわかりません。 Command Line: +C:\Program Files\test\test.exe+   に対して for /f "delims=+ tokens=2" %i in (test.txt) do @echo %i はうまく出来ました。 どなたかご享受願えませんでしょうか。 よろしくお願いします。

  • mecab-pythonのインストールに失敗しまし

    先ほどmecabのインストールに成功して、今度はmecab-pythonをインストールしようとしたら、失敗したようです。 参考にしたサイトは以下です http://tatsuyaoiw.hatenablog.com/entry/20120414/1334405065 ●mecabのインストール直後 root@debian:/usr/local# mecab 参考までに、私がインストールした手順を下に書きます。 参考 名詞,サ変接続,*,*,*,*,参考,サンコウ,サンコー まで 助詞,副助詞,*,*,*,*,まで,マデ,マデ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 、 記号,読点,*,*,*,*,、,、,、 私 名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ が 助詞,格助詞,一般,*,*,*,が,ガ,ガ インストール 名詞,一般,*,*,*,*,インストール,インストール,インストール し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 手順 名詞,一般,*,*,*,*,手順,テジュン,テジュン を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ 下 名詞,一般,*,*,*,*,下,シタ,シタ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 書き 動詞,自立,*,*,五段・カ行イ音便,連用形,書く,カキ,カキ ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス 。 記号,句点,*,*,*,*,。,。,。 EOS ^Z ●ここからmecab-pythonインストール開始 root@debian:/usr/local# wget *ttp://mecab.googlecode.com/files/mecab-python-0.993.tar.gz --2015-01-08 06:05:07-- *ttp://mecab.googlecode.com/files/mecab-python-0.993.tar.gz mecab.googlecode.com (mecab.googlecode.com) をDNSに問いあわせています... 173.194.72.82 mecab.googlecode.com (mecab.googlecode.com)|173.194.72.82|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 63267 (62K) [application/x-gzip] `mecab-python-0.993.tar.gz' に保存中 100%[======================================>] 63,267 147K/s 時間 0.4s 2015-01-08 06:05:09 (147 KB/s) - `mecab-python-0.993.tar.gz' へ保存完了 [63267/63267] root@debian:/usr/local# tar zxvf mecab-python-0.993.tar.gz mecab-python-0.993/ mecab-python-0.993/MeCab.pyc mecab-python-0.993/LGPL mecab-python-0.993/BSD mecab-python-0.993/COPYING mecab-python-0.993/setup.py mecab-python-0.993/test.py mecab-python-0.993/MeCab.py mecab-python-0.993/GPL mecab-python-0.993/bindings.html mecab-python-0.993/README mecab-python-0.993/MeCab_wrap.cxx mecab-python-0.993/AUTHORS root@debian:/usr/local# cd mecab-python-0.993 root@debian:/usr/local/mecab-python-0.993# python setup.py build running build running build_py creating build creating build/lib.linux-x86_64-2.7 copying MeCab.py -> build/lib.linux-x86_64-2.7 running build_ext building '_MeCab' extension creating build/temp.linux-x86_64-2.7 gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/local/include -I/usr/include/python2.7 -c MeCab_wrap.cxx -o build/temp.linux-x86_64-2.7/MeCab_wrap.o cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++ [enabled by default] g++ -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro build/temp.linux-x86_64-2.7/MeCab_wrap.o -L/usr/local/lib -lmecab -lstdc++ -o build/lib.linux-x86_64-2.7/_MeCab.so root@debian:/usr/local/mecab-python-0.993# sudo python setup.py install running install running build running build_py running build_ext running install_lib copying build/lib.linux-x86_64-2.7/_MeCab.so -> /usr/local/lib/python2.7/dist-packages copying build/lib.linux-x86_64-2.7/MeCab.py -> /usr/local/lib/python2.7/dist-packages byte-compiling /usr/local/lib/python2.7/dist-packages/MeCab.py to MeCab.pyc running install_egg_info Writing /usr/local/lib/python2.7/dist-packages/mecab_python-0.996.egg-info ●ここからmecab-python試験 root@debian:/usr/local/mecab-python-0.993# python Python 2.7.3 (default, Jan 2 2013, 13:56:14) [GCC 4.7.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import MeCab Traceback (most recent call last): File "<stdin>", line 1, in <module> File "MeCab.py", line 25, in <module> _MeCab = swig_import_helper() File "MeCab.py", line 17, in swig_import_helper import _MeCab ImportError: libmecab.so.2: cannot open shared object file: No such file or directory >>> import sys >>> import MeCab Traceback (most recent call last): File "<stdin>", line 1, in <module> File "MeCab.py", line 25, in <module> _MeCab = swig_import_helper() File "MeCab.py", line 17, in swig_import_helper import _MeCab ImportError: libmecab.so.2: cannot open shared object file: No such file or directory このOSにはipythonというものがあり、いわゆるインテリセンスがコンソールから使えるのですが、"MeCab"を補完しません。 どうすれば良いのでしょうか Linux未熟者は手を出さないほうが良かったかも

  • バッチファイルで2行にわたるコマンドを入力したいのですが

    バッチファイルで複数行にわたるコマンドを打ちたいのですが、方法がわからなくて困っています。 for /f "tokens=1,2,3 delims=/ " %%a in ('date /t') do ( set hinichi=%%a%%b ) "C:\Program Files\Lhaca\Lhaca.exe" "test%hinichi%01.txt" "test%hinichi%02.txt" ・・・・・・・ と31個のファイルを圧縮するバッチです。 体裁の問題ですが、 for /f "tokens=1,2,3 delims=/ " %%a in ('date /t') do ( set hinichi=%%a%%b ) "C:\Program Files\Lhaca\Lhaca.exe" ? "test%hinichi%01.txt" ? "test%hinichi%02.txt" ・・・ としたいのですが各行のつなぎの記号?がわかりません。 ご存知の方、よろしくお願いいたします。

  • perlでコマンドプロンプト実行

    いつもお世話になります。 現在、jperlを使用し、 あるフォルダ内の中にあるサブフォルダをlaplusを使用し コマンドラインから圧縮をかけるというスクリプトを作成しております。 そこで、下記ロジックを実行するとエラーになります。 【ロジック】  $cmd = "\"c:\\Program Files\\Lhaplus\\Lhaplus.exe\" /c:lzh   o:\"C:\\Users\\testtaro\\Documents\\LAPLUS_TEST\"   \"C:\\Users\\testtaro\\Documents\\LAPLUS_TEST\\2011-03-11(0100)\"";  system($cmd); 【エラーメッセージ】  'c:\Program' は、内部コマンドまたは外部コマンド、  操作可能なプログラムまたはバッチ ファイルとして認識されていません。 「$cmd 」の内容をデバック出力しそれを直接コマンドプロンプトで実行すると 正常に圧縮されます。 おそらく「Program Files」の半角スペース内で切れてしまっているのだと思いますが、 ダブルクォテーションでくくるやり方が間違っているのでしょうか。 超初心者の質問で大変申し訳ありませんが宜しくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう