文字列中の()や「」や<>がペアになっていなかったら取り除く

木を作るか1文字ずつ読んでいくか考えたが、面倒だったので最初に区切り文字で配列に分割して左端から見ていくようにした。
今回気づいた事

  • 配列の配列はjoinしてsplitすると1次元の配列になる
  • Rubyで全角半角混じった文字列を1文字ずつ処理するの、面倒


ahokaiにもこの関数追加しておいた。

replace_brokenBrackets.rb

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

# 対応していない括弧を取り除く
def fix_brackets(str)
  brackets = [['<','>'],['',''],['(',')'],['',''], ['',''],['',''],['[',']'],['"','"']] # 括弧の対応
  delimiter = brackets.join('|').split('|').map{|b|
    if b =~ /\(|\)|\[|\]|\"|\'/ # 正規表現のリテラルに含まれる物をエスケープ
      "\\#{b}" 
    else
      b
    end
  }.join('|')
  words = str.split(/(#{delimiter})/)
  pairs = Array.new
  for i in 0...words.size do
    brackets.each{|b|
      if words[i] == b[0] # 左括弧
        for j in i...words.size do
          if words[j] == b[1] && !pairs.index(i) && !pairs.index(j) # 対になる括弧が右にあるか
            next if pairs.size>0 && pairs.max > i # 括弧同士の重複
            pairs << i # 対になる括弧の位置を保存しておく
            pairs << j
          end
        end
      end
    }
  end
  for i in 0...words.size do
    if words[i] =~ /#{delimiter}/ && !pairs.index(i) # 対応してない括弧を全て削除
      words[i] = ""
    end
  end
  words.join
end


puts str = "あいう「えお)」か(き(くけ」"
puts fix_brackets(str)

puts str = "あいう「え(お」か(き)(くけ」"
puts fix_brackets(str)

puts str = "そこでは弱・薄>か<有→ プ・コ>。中間存在の蝙蝠はイソップでは排除される。どっちの方が気持ちいいぞ。すぐに窓を開け、空気に苛立つ僕の毎日に、ちょっともの悲しい話になる。東京>が訴求できた。知事の勝利意欲が間違いだった、というだけ。五輪は、参加することが意"
puts fix_brackets(str)

puts str = "そうです、一茂は野球界の道化なんて奇跡?が起こったのは、些細なのだろうか。太田代表と写る久本雅美の顔がいい。俗世間に訴える誠と実が心を打つ。政治は、その原理を隠そうと、客観性>が④<露・隠>が演奏するのを初めてみた。Tだけが真ん中は健康。均衡論的には②<"
puts fix_brackets(str)

puts str = "たとえば、男女の性差は役割演技が仮面だからこそ、社会的な関係では、個人の要求に鈍感なゆえに置き去りにされるリーダンは、社会関係だから、そのどれが選択されるかは社会学の処世術は<差すと刺す>。これが<隠・露>にもっと偉くなって色々挑戦しまいました。"
puts fix_brackets(str)

puts str = "高齢社会のヴィジョンは、90分間誰とも話すことなく、講義へのイデオロギーとしては政治システムの役割期待に適合させるように、社会傾向が発生し、近代理人(イカガワシイ調査の金字塔。『日本の場合は、政権交代もグールドナーに味方して③<ただの酔っ払いに思われた○&"
puts fix_brackets(str)

puts str = "19秒19。覚えやすい数字だ。ウサイエンディアの影響がF1撤退>。昔個人は等しい。岡田茂と乳がんを覚悟してロック女を貫いた今、をつくった。しかしオンナで勝負した意味ではなく、<蛍の光通信じると、奇跡が広報官として何かに出演してたの?教えてください。"
puts fix_brackets(str)

puts str = "呟きの連鎖ネットワーク、三船敏郎ほどではなく、相手の心と気分を読んで、それに共振(絶妙なズレ>の携帯した3人が基本。この関係はあるが、腹痛=f(台風)は笑える。かなり優秀でうれしい。<いい加減>が非常によく表現することで、何かの思いを了解できない。知ら"
puts fix_brackets(str)
あいう「えお)」か(き(くけ」
あいう「えお」かきくけ
あいう「え(お」か(き)(くけ」
あいう「えお」か(き)くけ
そこでは弱・薄>か<有→ プ・コ>。中間存在の蝙蝠はイソップでは排除される。どっちの方が気持ちいいぞ。すぐに窓を開け、空気に苛立つ僕の毎日に、ち ょっともの悲しい話になる。東京>が訴求できた。知事の勝利意欲が間違いだった、というだけ。五輪は、参加することが意
そこでは弱・薄か<有→ プ・コ>。中間存在の蝙蝠はイソップでは排除される。どっちの方が気持ちいいぞ。すぐに窓を開け、空気に苛立つ僕の毎日に、ち##っともの悲しい話になる。東京が訴求できた。知事の勝利意欲が間違いだった、というだけ。五輪は、参加することが意
そうです、一茂は野球界の道化なんて奇跡?が起こったのは、些細なのだろうか。太田代表と写る久本雅美の顔がいい。俗世間に訴える誠と実が心を打つ。政治は、その原理を隠そうと、客観性>が④<露・隠>が演奏するのを初めてみた。Tだけが真ん中は健康。均衡論的には②<
そうです、一茂は野球界の道化なんて奇跡?が起こったのは、些細なのだろうか。太田代表と写る久本雅美の顔がいい。俗世間に訴える誠と実が心を打つ。政治は、その原理を隠そうと、客観性が④<露・隠>が演奏するのを初めてみた。Tだけが真ん中は健康。均衡論的には②
たとえば、男女の性差は役割演技が仮面だからこそ、社会的な関係では、個人の要求に鈍感なゆえに置き去りにされるリーダンは、社会関係だから、そのどれが選択されるかは社会学の処世術は<差すと刺す>。これが<隠・露>にもっと偉くなって色々挑戦しまいました。
たとえば、男女の性差は役割演技が仮面だからこそ、社会的な関係では、個人の要求に鈍感なゆえに置き去りにされるリーダンは、社会関係だから、そのどれが選択されるかは社会学の処世術は<差すと刺す>。これが<隠・露>にもっと偉くなって色々挑戦しまいました。
高齢社会のヴィジョンは、90分間誰とも話すことなく、講義へのイデオロギーとしては政治システムの役割期待に適合させるように、社会傾向が発生し、近代理人(イカガワシイ調査の金字塔。『日本の場合は、政権交代もグールドナーに味方して③<ただの酔っ払いに思われた○&
高齢社会のヴィジョンは、90分間誰とも話すことなく、講義へのイデオロギーとしては政治システムの役割期待に適合させるように、社会傾向が発生し、近代理人イカガワシイ調査の金字塔。日本の場合は、政権交代もグールドナーに味方して③ただの酔っ払いに思われた○&
19秒19。覚えやすい数字だ。ウサイエンディアの影響がF1撤退>。昔個人は等しい。岡田茂と乳がんを覚悟してロック女を貫いた今、をつくった。しかしオンナで勝負した意味ではなく、<蛍の光通信じると、奇跡が広報官として何かに出演してたの?教えてください。
19秒19。覚えやすい数字だ。ウサイエンディアの影響がF1撤退。昔個人は等しい。岡田茂と乳がんを覚悟してロック女を貫いた今、をつくった。しかしオンナで勝負した意味ではなく、蛍の光通信じると、奇跡が広報官として何かに出演してたの?教えてください。
呟きの連鎖ネットワーク、三船敏郎ほどではなく、相手の心と気分を読んで、それに共振(絶妙なズレ>の携帯した3人が基本。この関係はあるが、腹痛=f(台風)は笑える。かなり優秀でうれしい。<いい加減>が非常によく表現することで、何かの思いを了解できない。知ら
呟きの連鎖ネットワーク、三船敏郎ほどではなく、相手の心と気分を読んで、それに共振絶妙なズレの携帯した3人が基本。この関係はあるが、腹痛=f(台 風)は笑える。かなり優秀でうれしい。<いい加減>が非常によく表現することで、何かの思いを了解できない。知ら