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

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

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

テキスト処理のプログラミング(アルゴリズム)についてご教示下さい。 以下に示します。 ----------------------- hogehoge xxxxxxxxx example.com Header_1 color RED Header_2 color BLACK type M Header_3 color GREEN weight 40 type L Header_4 color GREEN END afterhogehoge zzzzxxxxxyyyy ----------------------- ↑このようなテキストを・・・・ ↓こう並べ替えたいのです。 ----------------------- Header_1,color RED,, Header_2,color BLACK,,type M Header_3,color GREEN,weight 40,type L Header_4,color GREEN,, ----------------------- ポイントは二つあって、以下の通りとなります。 a)Header_[1234]に関するcolor、weight、typeといった情報は、次の"Header_"で始まる行までに全て記述される。 b)並べ替え後の書式は、必ず第2フィールドがcolor、第3フィールドがweight、第4フィールドがtypeでなくてはならない。 c)並べ替え前の、先頭行からHeader_1で始まる行までは削除 d)同じく、END(フラグとします)で始まる行以降を削除 当方、PowerShell3.xで苦戦しているのですが、ご回答例は別の言語でも構いません。(出来れば ライトウェートな言語のいずれかで・・・)

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

  • ベストアンサー
  • 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

  • ループ処理を抜けた時点での処理回数を表示したい

    今、以下のような「green」が配列の何番目にあるのか調べるプログラムを考えています。 具体的な処理としては、配列の値を順番に調べて「green」を見つけたらループをぬけて何番目にあったかを表示する、といった処理になります。 ただ、現時点ではループをぬけた時何番目だったのかを取得できないでいます。 $numを取得して表示するにはどのような処理を行えばよいでしょうか。 解説していただけると幸いです。 ---プログラム--- class hoge{ function hoge(){ $this->color = array("red", "blue", "pink", "white", "black", "gold", "yellow"...,"green",...); } function test(){ for($i = 0;$i < count($this->color);$i++){ if($this->color[$i] == 'green'){ echo $this->color[$i]."\n"; break;###ここでループをぬける } } echo "緑は${num}番目"; } } $a = new hoge(); $a->test(); ---

    • ベストアンサー
    • PHP
  • CSSで、テキストのみの背景色を指定するには?

    CSSで、テキストのみの背景色を指定するには? CSSを使って、 h1 { color: orange; background: green; } とすると、<h1>タグで示されたテキストの行の背景色が緑色になりますが、 行全体ではなく、テキストのみの背景色を指定するにはどうすればよいでしょうか?

  • javaのカラーについて

    今日は g2.setColor(Color.GREEN);の色指定は、 BLACK, BLUE, CYAN, DARK GRAY, GRAY, GREEN, LIGHT GARAY, ORANGE, RED. WHITE, YELLOW とあると思いますが、これ以外の設定は可能ですか。 コメントの程、宜しくお願いします。

    • ベストアンサー
    • Java
  • 名詞の同格語

    The color green とあるテキストには書かれていたのですが、green colorではいけないのでしょうか? あるいは何かニュアンスの違いがあるのでしょうか? ご存じの方がいらっしゃいましたらご教示願います。

  • float テキストの右下寄せ

    MTでブログを作っています。テンプレートを変更したのですが、躓いています。 width:800px; height:287px; のサイズのbackgroundの上で(中で?)右下寄せにブログタイトルと検索ボックスを表示させたいのですがうまくいきません。 かなりの初心者で独学のみでしています。どこが何なのかよく理解できていないのでheaderの部分をすべて貼ります。 /* header */ /* -------------------------------------------------------- */ h1 { width:800px; font-size:80%; font-weight:normal; color:#666666; text-align:left; margin:0 auto; padding:15px 0 0 0; } #header { width:800px; height:287px; color:#333322; text-align:left; margin:0 auto; background:#eeeedd; background-image: url(http://■■■.net/images/●●●.gif); border-top:solid 1px #bbbb99; border-left:solid 1px #bbbb99; border-right:solid 1px #bbbb99; border-bottom:0; } #header div.lbox { width:510px; float:left; } #header div.lbox p { font-size:180%; font-weight:bold; line-height:120%; margin:8px 0 5px 10px; } #header div.rbox { width:170px; padding:15px 0 0 0; float:right; } #header div.rbox input { vertical-align:top; } #header div.rbox input.box { width:120px; margin:0 5px 0 0; } #header a:link , #header a:visited { color:#333322; background:#eeeedd; } #header a:hover , #header a:active { color:#666655; background:#eeeedd; } 現在、左上にブログタイトル、右上に検索ボックス(その下に検索ボタン)があります。 これを横並びに右下へ持っていきたいのですが・・・。 それと、タイトルテキストの部分がeeeedd色の背景の上に黒字になっているのですが、eeeedd色でなくbackgroundの画像に透過させるにはどうすればよいのでしょうか??

  • PHPを使ったPOSTについて教えてください。

    <body> <form action="" method="post"> <select id="list" name="list" > <option value="">選択してください</option> <option value="ichigo">いちご</option> <option value="orange">オレンジ</option> </select> <input type="text" size="30" id="word" name="word" > <input type="submit" value="検索"> </form> <?php $array = array(); $array['green'] = 'グリーン'; $array['red'] = 'レッド'; if (isset($_REQUEST['word'])) { $array ['key']=$_REQUEST['word']; } if (isset($_REQUEST['list'])) { $array ['List']=$_REQUEST['list']; } print_r($array); ?> </body> これを表示した場合、はじめのページでは Array ( [green] => グリーン [red] => レッド ) と表示されますが、フォームを実行すると、このように表示されます。 Array ( [green] => グリーン [red] => レッド [key] => [List] => ) これを、もしkeyやListの値が何も入力されなかった場合、listで言えば「選択してください」が選択されで実行された場合、[key] =>や [List] =>を表示しないと言うことはできますか? 例えばlistをデフォルトの「選択してください」のまま選択せず、テキスト欄に「テキスト」と入力したら、 Array ( [green] => グリーン [red] => レッド [key] => テキスト) とこのように[List] =>は省きたいです。 そのためにissetを使ったつもりでしたが、うまくいきませんでした。 どうしたら良いでしょうか?教えてください、よろしくお願いします。

    • 締切済み
    • PHP
  • MonsterEnergy皆さんは何がすきか?

    zzr1400を買おうと思う学生さんですが、MonsterEnergyというものを知りました。 今度かったらステッカーを貼ろうと思うのですが、皆さんはどのタイプが一番カッコイイと思いますか? ・BlackのzzrにGreenのMonsterEnergy ・BlackのzzrにRedのMonsterEnergy ・Greenのzzrに黒い部分だけGreenのMonsterEnergy ・GreenのzzrにRedのMonsterEnergy 自分は勝手な想像ですがGreenのzzrにRedのMonsterEnergyのステッカーをつけたら普通のタイプとは違ってカッコイイと思ってます。回答お願いします!

  • テキストボックスの背景色について

    <html> <body> <form name="form1"> <input type="text" value="よろしく" name="text1"> <script language="javascript"> document.form1.text1.style.background-color = "green"; </script> </form> </body> </html> これはテキストボックスの背景色をグリーンにするプログラムなんですがうまくいきません。どこが間違っているのか指摘してください。

  • テキスト文がhtmlであらわれてしまうのはなぜ?

    テキスト文がhtmlであらわれてしまうのはなぜ? メモ帳に以下のような記述をして、 aaa.txtとして保存しました。 html上で aaa.txtにリンクを貼りました。 html上でリンク付けしたaaa.txtを開くと、テキスト文ではなく、htmlに変わってしまいます。つまり、下の「文字にホバーをかける」が実際にホバーがかかった状態ででてきてしまうのです。 これをテキスト文だけにするにはどうしたらいいのでしょうか? ================================================= ホバーをかける(テキストにマウスを乗せると色が変わる ) <SPAN STYLE="font-size:24pt" onMouseOver="window.event.srcElement.style.color = 'red'" onMouseOut="window.event.srcElement.style.color = 'black'"> 文字にホバーをかける </SPAN>

  • C# リッチテキストボックスの文字色

    richTextBox_pro.Text = "aaaaaaaaaaaaaaaaaaaaaaaa"; richTextBox_pro.Text += "end"; richTextBox_pro.Select(richTextBox_pro.TextLength - 3, 3); richTextBox_pro.SelectionColor = Color.Black; のようにして、最後に付け加えた end の文字だけ色をかえているのですが、 選択された状態になってしまいます。 マウスでドラックしている状態です。 これを解除した状態で文字色をかえるにはどうしたらいいのでしょうか。

専門家に質問してみよう