SORU
23 Ocak 2009, Cuma


Parçacık ' tespit programlama dili

Programlama dili kod parçasında ne kullanılır algılamak için en iyi yolu ne olurdu?

CEVAP
23 Ocak 2009, Cuma


Bu yöntem spam filtreleri kullanılan çok iyi bir çalışma olacağını düşünüyorum. Kelimelere parçacık bölünmüş. Sonra bilinen parçacıkları ile bu kelimelerin tekrarlarını karşılaştırmak ve bu parçacık X ilgilendiğiniz her dilde dilde yazılmış olma olasılığını hesaplamak.

http://en.wikipedia.org/wiki/Bayesian_spam_filtering

Eğer temel mekanizma varsa, o zaman çok kolay yeni bir dil eklemek için: sadece yeni dili (bu bir açık kaynak projesi besleyebilirsiniz) birkaç parçacıkları ile. Dedektör tren O öğrenir, bu şekilde "Sistem" C gibi görünüyor.# "" Ruby parçacıkları. koyar parçacıkları

Aslında bu yöntem forum yazılımı için kod parçacıkları için dil algılama eklemek için kullandım. Belirsiz durumlarda: dışında zaman 0 işe yaradı

print "Hello"

Bana şifreyi bulalım.

Yeni bir tane yaptım kodu bulamadım. Biraz basit ama benim testler için çalışıyor. Şu anda çok daha Python kodu Ruby kod daha onu beslemek eğer bu kod şunu söylemek olasıdır:

def foo
   puts "hi"
end

Python kod (gerçekten Ruby rağmen). Bu Python def bir anahtar kelime var çünkü. Eğer 100 kez def Python 1000x def gördü eğer Ruby sonra hala puts end Ruby özgü olsa da Python söyleyebiliriz. Kelimeleri dil başına takip ve o da bir yere (veya besleme ile her dilde kod miktarları eşit) bölerek bu düzeltmeyi olabilir.

Umarım sana da yardımı dokunur:

class Classifier
  def initialize
    @data = {}
    @totals = Hash.new(1)
  end

  def words(code)
    code.split(/[^a-z]/).reject{|w| w.empty?}
  end

  def train(code,lang)
    @totals[lang]  = 1
    @data[lang] ||= Hash.new(1)
    words(code).each {|w| @data[lang][w]  = 1 }
  end

  def classify(code)
    ws = words(code)
    @data.keys.max_by do |lang|
      # We really want to multiply here but I use logs 
      # to avoid floating point underflow
      # (adding logs is equivalent to multiplication)
      Math.log(@totals[lang])  
      ws.map{|w| Math.log(@data[lang][w])}.reduce(: )
    end
  end
end

# Example usage

c = Classifier.new

# Train from files
c.train(open("code.rb").read, :ruby)
c.train(open("code.py").read, :python)
c.train(open("code.cs").read, :csharp)

# Test it on another file
c.classify(open("code2.py").read) # => :python (hopefully)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Droid Life

    Droid Life

    17 Kasım 2009
  • ODN

    ODN

    26 Kasım 2006
  • WhtButterflyLiz

    WhtButterfly

    14 NİSAN 2008

İLGİLİ SORU / CEVAPLAR