• ベストアンサー

Perlによる形態素解析について

こんにちは。 いつもお世話になっております。 早速ですが表題にもあるように、Perlを用いて形態素解析ツールを作成することは可能でしょうか? 質問文が簡潔すぎるので経緯を。 複数の文字列から自動的に意味のある単語を抽出したい考えたときに、形態素解析というものに辿り着きました。 これを使って文字列の処理が出来ないかと考えました。 マッシュアップも検討中ですが、まずは自らが組めるプログラムなのかどうかをお尋ねしたいと思います。 何か不明な点がございましたら、随時対応致します。 宜しくお願いします。

noname#97332
noname#97332
  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • zxcv0000
  • ベストアンサー率56% (111/196)
回答No.1

日本語の文章をソフトウェアで処理するには「わかち書き化」等の処理が必要で、その為のライブラリをお探しという事ですね? 有名なものだけでも以下があります。 他にも、きっといろいろあると思います。 それぞれの特徴や Perl用ライブラリの有無はご自身で確認なさってください。 ChaSen 形態素解析器 http://chasen-legacy.sourceforge.jp/ MeCab 形態素解析エンジン http://mecab.sourceforge.net/ KAKASI 漢字→かな(ローマ字)変換プログラム http://kakasi.namazu.org/index.html.ja

noname#97332
質問者

お礼

回答ありがとうございます. 紹介していただいたURLを参考にしてみたいと思います. ありがとうございました.

関連するQ&A

  • phpで形態素解析エンジンであるmecabを利用したいと考えていますが

    phpで形態素解析エンジンであるmecabを利用したいと考えていますがうまくいきません。 やりたいことは、ある文字列を形態素解析して配列として返すことを考えています。 やり方を知っている方、教えていただけないでしょか。 お手数をおかけします。 何卒、宜しくお願いします。

    • 締切済み
    • PHP
  • 【Perlでaccess.logの解析をしたいです】

    自分のホームページに訪れる人は、 どんな検索ワードなのか知りたくて、 access.logの解析スクリプトをperlで作成しようと思っています。 そこで何点かご教授いただきたい事があります。 1.apacheのログフォーマット   標準の状態では私の行いたいことができないと思うのですが、   以下の指定で行えるようになるでしょうか?     LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 2.文字列の分割   例えばGoogleの場合、「q=」以降が検索ワードだと思いますので、   そこから単語を分割したいのですが良い方法がわかりません。   以下のように単語の区切りに全角と半角のスペースが混在している場合、   スマートに処理するにはどうしたらよいのでしょうか?      よろしくお願いいたします。

  • 形態素解析とtfidf計算処理のjavaプログラム

    二つのプログラムを作成しようと思っています。 1、一行に「単語<tab>数字列(132:1,83:2,........)」という形のデータが存在するファイルを読み込んで、単語の部分(殆ど名詞)だけ抽出し形態素解析(cmecabを使用)して名詞の何の種類かによって値を与え、一行に「単語<tab>値」という形でテキストファイルに出力するプログラム 値について 一般名詞、固有名詞の場合:2 形容動詞語幹の場合:1 サ変接続、副詞可能、ナイ形容詞語幹、接尾、非自立の場合:0.5 代名詞、数詞、その他(動詞や副詞、接頭詞)の場合:0 例:読み込むファイルの中身(単語<tab>文書番号:その文書での単語の出現回数,.........) 小学校 76:1,167:1,254:1,395:1,400:1,488:1 旦那 183:1 委員 275:1 最終 401:1 月曜日 376:1 以下のプログラムはCmecabでテキストファイルを読み込んで形態素解析し出力するプログラム。これを改造すればいけると思っています。 // 引数に解析したいファイルを指定 // 結果は"cmecab-output.txt"に出力 // コンパイル方法"javac -encoding utf8 cmecab.java" // 入力ファイルの文字コードはUTF8で保存しておく // 出力ファイルの文字コードもUTF8で出力されるので注意 // Mecabの辞書はUTF8でコンパイルしておくこと import net.moraleboost.mecab.Tagger; import net.moraleboost.mecab.impl.StandardTagger; import net.moraleboost.mecab.Node; import java.io.*; import java.util.*; import java.lang.*; public class cmecab{ public static void main(String[] args) throws Exception{ // 引数が無い場合はヘルプを表示 if (args.length == 0) { System.out.println("使用方法: java cmecab [入力テキストファイル名]"); return; } // バージョン文字列を取得 System.out.println("MeCab version: " + StandardTagger.version()); // 入出力ファイルの設定 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(args[0]), "UTF-8")); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("cmecab-output.txt"), "UTF-8")); String text = ""; while((text = br.readLine()) != null){ // Taggerを構築。 // 第一引数には、MeCabの辞書の文字コードを与える。 // 第二引数には、MeCabのcreateTagger()関数に与える引数を与える。              Tagger tagger = new StandardTagger("UTF-8", ""); // tagger.parse()を呼び出して、文字列を形態素解析する。 // 返されるオブジェクトは、Iterator<String>を実装している。 Node node = tagger.parse(text); // 一つずつ形態素をたどりながら、表層形と素性を出力 while (node.hasNext()) { String surface = node.next(); String feature = node.feature(); bw.write(surface + "\t" + feature +"\n"); } // taggerをクローズ tagger.close(); } br.close(); bw.close(); } } 例:形態素解析して出力される形(「単語<tab>品詞,名詞の形」において「名詞の形」の部分を抽出して上記に書いた値に振り分けたいと思っている。) 70 名詞,数,*,*,*,*,* : 名詞,サ変接続,*,*,*,*,* 1 名詞,数,*,*,*,*,* 何処 名詞,代名詞,一般,*,*,*,何処,ドコ,ドコ 2、1で読み込んだ「単語<tab>文書番号:その文書での単語の出現回数,.........」という形のファイルを読み込んでtfidf値を求め、一行に「単語<tab>tfidf値」という形でテキストファイルに出力していくプログラム tfidfの定義 tf=文書番号Yにおける単語Xの出現確率(出現確率の分母はその文書における単語の合計数) idf=log(文書の合計数/単語Xを含む文書数) よろしくお願いいたします。

  • [初心者]perlで文字列抽出

    perlの超初心者です. 標準出力された文字の中から任意の文字列をperlで抽出したいのですが... 例えば, 1 lsコマンドでファイル一覧を表示 2 表示された中から任意の文字列とマッチするものを抽出 3 マッチした文字列の後ろの文字を知る(拡張子とか) 4 さらに,1~3を'perl hoge.pl'とコマンド打つだけのワンアクションでやりたい. という感じなのですが... 勉強を始めたばかりなので,どういったキーワードを勉強すればよいのか,見当つかない状態です... おそらく,私がしょうもない質問をしているのだろうとは思いますが, 何かヒントでも教えていただければ幸いです. 周りに詳しい人物もいないので,なんとか頑張って習得したいと思っています. よろしくお願いしますm(><)m

    • ベストアンサー
    • Perl
  • perlでの文字列抽出

    perlの文字列抽出と集計について教えてください。 ファイルAにある文字列をファイルBから探し、その単語の前後の5単語を集計したいと考えています。 fileA(ただの単語列です) たまねぎ かぼちゃ にんじん fileB(|で区切られています) ピラミッド|を|築く|労働者|に|は|たまねぎ|を|食べ|させた|と|いう|記録|も|あり たまねぎ|は|野菜|の|中|で|最|も|糖質|が|多く| ほくほく|した|西洋|かぼちゃ|は|、|料理|野菜|の|中|で|も にんじん|は|、|根|を|食べ|る|野菜|の|中|で|は|珍しく|緑黄色野菜|です 上記のようなファイルがあった場合に、「|」で区切られた前後5単語をとれるだけ取得すると以下のようになり たまねぎ を,築く,労働者,に,は,を,食べ,させた,と,いう,は,野菜,の,中,で かぼちゃ ほくほく,した,西洋,は,、,料理,野菜,の にんじん は,、,根,を,食べ,る 以下のように出現を集計して、一つのマトリックスにまとめたいと考えています。      を 築く 労働者 に は 食べ させた と いう 野菜... たまねぎ 2  1  1    1 2  1  1    1  1  1 かぼちゃ            1              1 にんじん 1           1  1 ... ... 初心者のためなかなかうまいやり方がみつけることができず ご教示いただけると助かります。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • perl 正規表現 抽出

    perl の正規表現を用いて、文字列の抽出を行いたいのですがどのように 書けばいいのかわかりません。 実現したいことは 「Y:/フォルダ名/フォルダ名/ファイル名.拡張子」 というテキストに対して 「拡張子」のみを抽出することと 「ファイル名」のみを抽出することです。 パターンマッチや変換はなんとなくわかるのですが 抽出の仕方がよくわかりません。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • Perlの正規表現で文字の抽出

    Perlを勉強しているのですが正規表現についてよくわからないので教えてください。 $text="【件名】本文" とあるときに、【】で囲まれた文字列(【】も含む)を抽出し、$textに戻したいのですがどうすればいいのでしょうか? ($textの中身を【件名】としたいのです) よろしくお願いします。

    • ベストアンサー
    • Perl
  • Windows版Perlでの行の抽出の問題

    Windowsのバッチファイルで、Perlを使って特定の文字列を含む行を抽出する処理を行っているのですが、うまくいかないケースがあります。 例えば、以下の線内のようなテキストがあって、 ---------------------- 〔a 〔A ゜a ゜A ---------------------- 大文字/小文字を問わず、「〔a」を含む行を抽出し、 以下の線内のような結果を得たいとします。 ---------------------- 〔a 〔A ---------------------- 検索対象ファイルの文字コードが「Shift-JIS」で、 「print if ( /〔a/i );」という構文で行を抽出すると、 以下の結果になってしまいます。 ---------------------- 〔a 〔A ゜a ゜A ---------------------- 「print if ( /〔a/ );」なら以下の結果になってしまいます。 ---------------------- 〔a ---------------------- 検索対象ファイルの文字コードを「UTF-8」にし、 「print if ( /〔a/ );」という構文で、 「〔a」を含む行を抽出しようとすると、何も行が抽出されません。 他のコマンドでの大文字/小文字問わない「〔a」を含む行の抽出は、 findstrでは得たい結果が得られ、 grep、AWKでは、Perl同様、「゜a」を含む行が抽出されてしまいます。 しかし、私が行いたい処理は、数百~数千程度の単語が書かれた単語のリストがあり、そのリストをスクリプト形式に置換して行を検索するので、スクリプトファイルに対応していないfindstrコマンドでは不便なのです。 上記の問題の原因が分かる方がおられましたら、お教え頂けないでしょうか。

    • ベストアンサー
    • Perl
  • perlでテキストから顔文字を抽出するプログラム

    テキストファイルから顔文字を抽出するプログラムを作りたいのですが、行き詰まっています。 一応、正規表現の内容としては、 半角と全角の括弧と前後の記号っぽいものを抽出し、 括弧の中身が「3文字以上半角英数字/全角文字列が続かないもの」という条件で、 抽出すれば上手くいくのかなぁと考えているのですが、上手くperlで表現できていない状態です。 どなたかプログラムに詳しい方で、ソースを記述できる方がいれば、よろしくお願いいたします。

  • SEOアクセス解析を実施した時にタイトル不明とメッセージが出てしまうどうしてでしょうか?

    貴社のSEOアクセス解析ツールによりHP解析を実施した時に、サイト解析結果が『タイトル不明』のメッセージと、文字化けのメッセージが出てしまっています。ご教授下さい。

専門家に質問してみよう