• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:テキスト処理のアルゴリズムについて)

テキスト処理のアルゴリズムについて

このQ&Aのポイント
  • テキスト処理のアルゴリズムについてご教示下さい。
  • テキスト処理のプログラミング(アルゴリズム)について解説してください。
  • テキスト処理のアルゴリズムを効率的に実装する方法について教えてください。

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

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.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"}} このように変換できます。 複雑な構造をしている場合にはこちら方が簡単なことが多いです。 質問欄の程度なら、前者かな。

kenokabe2
質問者

お礼

うまくいきそうです。 あと、YAMLは調べてみたところ、理想的なような気がするので、そのうちこれでやってみます。 ありがとうございます。

その他の回答 (2)

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

Header だったら  既存のデータがあれば、$header, $color,$weight,$type を出力  $headerを記憶, $color,$weight,$type をリセット color,weight,typeだったら  それぞれを記録 ENDだったら  既存のデータがあれば、$header, $color,$weight,$type を出力  終了 一回きりの捨てプログラムなら、こんな感じかな 汎用性を持たせるなら $header, $color,$weight,$type を辞書型リストを使ったり、 出力をサブルーチンにしたり といったところです。

kenokabe2
質問者

お礼

まだピンときていませんが、やってみます。 ありがとうございます。

  • kamikami30
  • ベストアンサー率24% (812/3335)
回答No.1

一行ずつテキスト読み込んで正規表現で判定して処理をわければいいかと。

kenokabe2
質問者

お礼

やってみます。 ありがとうございます。

関連するQ&A