detect_smiley.rb 2.82 KB
#!/usr/bin/env ruby

require "rubygems"



class String
    def include_positive_and_negative?
        hpos = Hash.new(false)
        hpos[":-)"] = true
        hpos[":-))"] = true
        hpos[":-)))"] = true
        hpos[":)"] = true
        hpos[":))"] = true
        hpos[":)))"] = true
        hpos[":-D"] = true
        hpos[":-DD"] = true
        hpos[":-DDD"] = true
        hpos[":-p"] = true
        hpos[":-pp"] = true
        hpos[":-ppp"] = true
        hpos[":-P"] = true
        hpos[":-PP"] = true
        hpos[":-PPP"] = true
        hpos["^_^"] = true
        hpos[";-)"] = true
        hpos[";-))"] = true
        hpos[";-)))"] = true
        hpos[";)"] = true
        hpos[";))"] = true
        hpos[";)))"] = true
        hpos["☺"] = true
        hpos["❤"] = true
        hpos["♥"] = true
        hpos["♥♥♥♥"] = true
        hpos["♥♥"] = true
        hpos["♥♥♥"] = true
        hpos["❤️"] = true
        hpos["❤️❤️"] = true
        hpos["❤️❤️❤️"] = true
        hpos["♥️"] = true
        hpos["♥️♥️"] = true
        hpos["♥️♥️♥️"] = true
        hpos["♥️♥️♥️♥️♥️"] = true

        hneg = Hash.new(false)
        hneg[":-("] = true
        hneg[":-(("] = true
        hneg[":-((("] = true
        hneg[":("] = true
        hneg[":(("] = true
        hneg[":((("] = true
        hneg[";-("] = true
        hneg[";-(("] = true
        hneg[";-((("] = true
        hneg[";("] = true
        hneg[";(("] = true
        hneg[";((("] = true

        pos = false
        neg = false

        ar = Array.new
        l = split(" ")
        l.each do |x|
            pos = true if hpos[ x ] == true
            neg = true if hneg[ x ] == true

            if hpos[ x ] == false
                if hneg[ x ] == false
                    ar.push( x )
                end
            end
        end

        return ar.join(" "), pos, neg
    end


end


def union?(pos, neg)
    if pos == true
        if neg == true
            return false
        end
    end

    if pos == false
        if neg == false
            return false
        end
    end

    return true
end


def launch

    $stdin.each do |line|
        line.chomp!
        line = line.split("\t")

        if line.size == 3

            l, pos, neg = line[2].include_positive_and_negative?

            if union?(pos, neg) == true
                classe = "positive" if pos == true
                classe = "negative" if neg == true

                if l.split(" ").size > 5
                    line[1] = classe
                    line[2] = l

                    puts "#{line.join("\t")}"
                end
            end
        end

    end

end


def errarg
    puts "Usage : ./programme.rb"
    puts "Mickael Rouvier <mickael.rouvier@univ-avignon.fr>"
end


if ARGV.size == 0
    launch
else
    errarg
end