0

特定のフィールドに繰り返される特定のフレーズが含まれているかどうかに基づいて、Rubyを使用してCSVテーブルのレコードに「タグ付け」しようとしています。この種の仕事を支援するライブラリがあるかどうかはわかりません。また、Rubyがこの種のことを行うのに最も効率的な言語ではない可能性があることを認識しています。

CSVテーブルには、検索する一意のIDとテキストフィールドが含まれています。

ID,NOTES
1,MISSING DOB; ID CANNOT BE BLANK
2,INVALID MEMBER ID - unable to verify
3,needs follow-up
4,ID CANNOT BE BLANK-- additional info needed

このCSVテーブルから、キーワードを抽出してタグを割り当て、別のCSVテーブルに保存しました。

PHRASE,TAG
MISSING DOB,BLANKDOB
ID CANNOT BE BLANK,BLANKID
INVALID MEMBER ID,INVALIDID

ソースのNOTES列には、特定してマッピングしたいフレーズに加えて、句読点やその他のフレーズが含まれていることに注意してください。さらに、すべてのレコードに一致するフレーズがあるわけではありません。

次のようなテーブルを作成したいと思います。

ID, TAG
1, BLANKDOB
1, BLANKID
2, INVALIDID
4, BLANKID

または、別の文字で区切られたタグを交互に使用します。

ID, TAG
1, BLANKDOB; BLANKID
2, INVALIDID
4, BLANKID

フレーズをキーとして、マッピングテーブルをハッシュにロードしました。

phrase_hash = {}
    CSV.foreach("phrase_lookup.csv") do |row|
        phrase, tag = row
        next if name == "PHRASE"
        phrase_hash[phrase] = tag
    end

ハッシュのキーは、繰り返し処理したい検索フレーズです。次にRubyでやりたいことを表現するのに苦労していますが、アイデアは次のとおりです。

NOTESテーブルを配列にロードします。上記のように、フレーズ(つまりキー)ごとに、フレーズを含む配列からレコードを選択し、これらの行に関連付けられたIDを収集し、そのフレーズに関連付けられたタグとともに出力します。

誰か助けてもらえますか?

4

1 に答える 1

0

CSV の代わりにハッシュ入力を使用した例を示します。

notes = { 1 => "MISSING DOB; ID CANNOT BE BLANK",
          2 => "INVALID MEMBER ID - unable to verify",
          3 => "needs follow-up",
          4 => "ID CANNOT BE BLANK-- additional info needed"
        }

tags =  { "MISSING DOB" => "BLANKDOB",
          "ID CANNOT BE BLANK" => "BLANKID",
          "INVALID MEMBER ID" => "INVALIDID"
        }

output = {}

tags.each_pair do |tags_key,tags_value|
    notes.each_pair do |notes_key, notes_value|
        if notes_value.match(tags_key)
            output[notes_key] ||= []
            output[notes_key] << tags_value 
        end
    end
end 

puts output.map {|k,v| "#{k}, #{v.join("; ")}"}.sort
于 2013-01-31T11:09:49.660 に答える