- ベストアンサー
テキスト処理のアルゴリズムについて
- テキスト処理のアルゴリズムについてご教示下さい。
- テキスト処理のプログラミング(アルゴリズム)について解説してください。
- テキスト処理のアルゴリズムを効率的に実装する方法について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
正規表現を使えばかなり出来そうに思います。 Rubyでやっていましたが、変数strに全文を読み込んだとして str.scan(/^Header.+?(?=^Header|END)/m) でHeaderからHeaderまたはENDの前までを切り分けられます。 ["Header_1\ncolor RED\n", "Header_2\ncolor BLACK\ntype M\n", "Header_3\ncolor GREEN\nweight 40\ntype L\n", "Header_4\ncolor GREEN\n"] これを1要素ずつ処理すれば簡単にできます。 他の方法では、YAMLに変換して読み込むのも簡単だと思います。次の形式に変換できれば Header_1: color: RED Header_2: color: BLACK type: M Header_3: color: GREEN weight: 40 type: L Header_4: color: GREEN (要するにHeader以外を字下げして、行始めの最初の単語の後ろにコロンを入れる、表示の関係で全角空白で字下げしていますが、実際には半角空白2つ程度で) YAML.load(str)で読み込むと {"Header_1"=>{"color"=>"RED"}, "Header_2"=>{"color"=>"BLACK", "type"=>"M"}, "Header_3"=>{"color"=>"GREEN", "weight"=>40, "type"=>"L"}, "Header_4"=>{"color"=>"GREEN"}} このように変換できます。 複雑な構造をしている場合にはこちら方が簡単なことが多いです。 質問欄の程度なら、前者かな。
その他の回答 (2)
- kmee
- ベストアンサー率55% (1857/3366)
Header だったら 既存のデータがあれば、$header, $color,$weight,$type を出力 $headerを記憶, $color,$weight,$type をリセット color,weight,typeだったら それぞれを記録 ENDだったら 既存のデータがあれば、$header, $color,$weight,$type を出力 終了 一回きりの捨てプログラムなら、こんな感じかな 汎用性を持たせるなら $header, $color,$weight,$type を辞書型リストを使ったり、 出力をサブルーチンにしたり といったところです。
お礼
まだピンときていませんが、やってみます。 ありがとうございます。
- kamikami30
- ベストアンサー率24% (812/3335)
一行ずつテキスト読み込んで正規表現で判定して処理をわければいいかと。
お礼
やってみます。 ありがとうございます。
お礼
うまくいきそうです。 あと、YAMLは調べてみたところ、理想的なような気がするので、そのうちこれでやってみます。 ありがとうございます。