একটি স্নিপেট থেকে প্রোগ্রামিং ভাষা সনাক্ত করা


115

কোড স্নিপেটে কোন প্রোগ্রামিং ভাষা ব্যবহৃত হয় তা সনাক্ত করার সর্বোত্তম উপায় কী হবে?


1
কার্যত সেখানে অসীম সংখ্যক ভাষা রয়েছে ... আপনি কি তাদের কোনওটি সনাক্ত করতে চান? না আমরা কেবল জনপ্রিয়দের সাথে কথা বলছি?
স্পেনসার রুর্ট

কেবলমাত্র জনপ্রিয় (সি / সি ++, সি #, জাভা, পাসকেল, পাইথন, ভিবি.এনইটি। পিএইচপি, জাভাস্ক্রিপ্ট এবং সম্ভবত হাস্কেল)।
জোও ম্যাটোস

12
আচ্ছা হাস্কেল জনপ্রিয় হতে পারে না যেহেতু আমি এর আগে কখনও শুনিনি। ;-)
স্টেফানি পৃষ্ঠা 21

22
আপনি যদি হাস্কেলের কথা না শুনে থাকেন তবে আপনি সম্ভবত প্রোগ্রামিং ভাষা সম্পর্কে খুব বেশি জানেন না।
আখোরাস

4
এই অনলাইন পরিষেবাটি এটি করে যা এটি করে: অ্যালগরিদমিয়া
ক্যালগরিদমস / পেটাইট প্রোগ্রামার /

উত্তর:


99

আমি মনে করি স্প্যাম ফিল্টারগুলিতে ব্যবহৃত পদ্ধতিটি খুব ভালভাবে কাজ করবে। আপনি স্নিপেটকে কথায় বিভক্ত করলেন। তারপরে আপনি এই শব্দের উপস্থিতিগুলি পরিচিত স্নিপেটের সাথে তুলনা করুন এবং আপনার স্নাতক প্রতিটি ভাষার জন্য এই স্নিপেট এক্স ভাষায় লিখিত হওয়ার সম্ভাবনাটি গণনা করুন।

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

আপনার যদি বেসিক মেকানিজম থাকে তবে নতুন ভাষা যুক্ত করা খুব সহজ: নতুন ভাষায় কয়েকটি স্নিপেটের সাহায্যে সনাক্তকারীকে প্রশিক্ষণ দিন (আপনি এটি একটি ওপেন সোর্স প্রকল্প খাওয়াতে পারেন)। এইভাবে এটি শিখেছে যে "সিস্টেম" সি # স্নিপেটে এবং রুবি স্নিপকেটে "পুটস" প্রদর্শিত হতে পারে।

ফোরাম সফ্টওয়্যারটির কোড স্নিপেটগুলিতে ভাষা সনাক্তকরণ যুক্ত করার জন্য আমি আসলে এই পদ্ধতিটি ব্যবহার করেছি। অস্পষ্ট ক্ষেত্রে ব্যতীত এটি 100% সময় কাজ করেছিল:

print "Hello"

আমাকে কোডটি সন্ধান করুন।

আমি কোডটি খুঁজে পেলাম না তাই আমি একটি নতুন তৈরি করেছি। এটি কিছুটা সরল কিন্তু এটি আমার পরীক্ষার জন্য কাজ করে। বর্তমানে আপনি রুবি কোডের চেয়ে পাইথন কোডটি বেশি খাওয়ান তবে সম্ভবত এই কোডটি বলে:

def foo
   puts "hi"
end

পাইথন কোড (যদিও এটি সত্যই রুবি)। এটি কারণ পাইথনের একটি defকীওয়ার্ডও রয়েছে। সুতরাং যদি এটি defপাইথনে 1000x এবং defরুবিতে 100x দেখে থাকে তবে এটি আজও পাইথন বলতে পারে putsএবং endএটি রুবি-নির্দিষ্ট। আপনি প্রতি ভাষা হিসাবে দেখা শব্দের উপর নজর রেখে এবং যে কোনও জায়গায় ভাগ করে (বা প্রতিটি ভাষায় এটিকে সমান পরিমাণে কোড খাওয়ানোর মাধ্যমে) এটি ঠিক করতে পারেন।

আমি এটি আপনাকে সাহায্য করে আশা করি:

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)

1
আমার এটি ফোরাম সফ্টওয়্যার ব্যবহার করা প্রয়োজন। বায়েশিয়ান ফিল্টারিং সম্পর্কে পরামর্শ দেওয়ার জন্য ধন্যবাদ।
জোও ম্যাটোস

12
আমি আমার এনএলপি ক্লাসে এরকম কিছু করেছি, তবে আমরা এটিকে আরও এক ধাপ এগিয়ে নিয়েছি। আপনি একটি এর ফ্রিকোয়েন্সিতে বর্ণন পছন্দ না একক শব্দ, কিন্তু জোড়া এবং শব্দের triples। উদাহরণস্বরূপ, "পাবলিক" অনেকগুলি ভাষায় মূল শব্দ হতে পারে, তবে "পাবলিক স্ট্যাটিক শূন্য" সি # তে বেশি দেখা যায়।
ট্রিপলটি

1
আপনি শব্দগুলি কোথায় বিভক্ত করছেন সে সম্পর্কেও ভাবতে পারে। পিএইচপি-তে, ভেরিয়েবলগুলি শুরু হয় $, তাই সম্ভবত আপনার শব্দের সীমানায় বিভক্ত হওয়া উচিত নয় , কারণ $ভেরিয়েবলটি থাকা উচিত। মত অপারেটর =>এবং :=একটি একক টোকেন হিসাবে আটকে একসঙ্গে হতে হবে, কিন্তু OTH আপনি সম্ভবত উচিত প্রায় বিভক্ত {গুলি কারণ তারা সবসময় তাদের নিজস্ব দাঁড়ানো।
এমপেন

2
হাঁ। মোটেও বিভাজন এড়ানোর একটি উপায় হ'ল এনজিগ্রামগুলি ব্যবহার করা: আপনি প্রতিটি এন দৈর্ঘ্যের স্ট্রাস্টিং গ্রহণ করেন। উদাহরণস্বরূপ, "পুটস ফু" এর 5-গ্রাম হ'ল "পুটস" "ইউটিএস এফ", "টিএসও ফো" এবং "এস ফু"। এই কৌশলটি অদ্ভুত বলে মনে হতে পারে তবে আপনি যা ভাবেন তার থেকে এটি আরও ভাল কাজ করে, এটি কোনও সমস্যা নয় যে কোনও সমস্যা কীভাবে সমাধান করবে। কোন পদ্ধতিটি আরও ভাল কাজ করে তা সিদ্ধান্ত নেওয়ার জন্য আপনাকে উভয়কেই পরীক্ষা করতে হবে ...
জুলাই

2
যদিও কিছু ভাষায় খুব কম বাক্য গঠন রয়েছে। আমি আরও অনুমান করছি যে সাধারণ পরিবর্তনশীল নামগুলি ভাষার কীওয়ার্ডগুলির উপর প্রভাব ফেলবে। মূলত, আপনার প্রশিক্ষণে ডেটাতে যদি আপনার একটি হাঙ্গেরিয়ান দ্বারা পরিবর্তিত নাম এবং মন্তব্য সহ একটি হাঙ্গেরিয়ান দ্বারা লিখিত সি কোডের টুকরো থাকে, তবে হাঙ্গেরিয়ান ভাষায় এটির সাথে অন্য কোনও উত্স "অনুরূপ" হওয়ার জন্য দৃ determined় সংকল্পবদ্ধ হতে পারে।
ট্রিপলি

26

অন্যদের দ্বারা সমাধান করা ভাষা সনাক্তকরণ:

ওহলো'র পদ্ধতি: https://github.com/blackducksw/ohcount/

গিথুব এর পদ্ধতি: https://github.com/github/linguist


4
আমি এই দুটি সমাধানই পরীক্ষা করেছি এবং উভয়ই ঠিক যেমনটি যা জিজ্ঞাসা করেছিল তা করব না। ভাষা নির্ধারণের জন্য তারা মূলত ফাইল এক্সটেনশনের দিকে নজর দেয়, তাই তারা এক্সটেনশানটির কোনও চিহ্ন না দিয়ে অগত্যা একটি স্নিপেট পরীক্ষা করতে পারে না।
হক্কি

5
গিথুবের পদ্ধতির মধ্যে এখন একটি বায়েশিয়ান শ্রেণিবদ্ধও রয়েছে। এটি প্রাথমিকভাবে ফাইল এক্সটেনশনের ভিত্তিতে একটি ভাষা প্রার্থী সনাক্ত করে তবে কোনও ফাইল এক্সটেনশান একাধিক প্রার্থীর সাথে মিলে গেলে (যেমন ".h" -> সি, সি ++, ওবিজেসি), এটি ইনপুট কোডের নমুনাকে টোকনাইজ করে এবং প্রাক-প্রশিক্ষিত সেটটির বিপরীতে শ্রেণিবদ্ধকরণ করবে তথ্য। গিথুব সংস্করণটিও এক্সটেনশনের দিকে না তাকিয়ে সর্বদা কোড স্ক্যান করতে বাধ্য করা যেতে পারে।
বেনজি

7

আপনি এখানে কিছু দরকারী উপাদান খুঁজে পেতে পারেন: http://alexgorbatchev.com/wiki/SyntaxHighlitter । অ্যালেক্স কীভাবে বিভিন্ন সংখ্যক বিভিন্ন ভাষার পার্স করতে পারবেন এবং কী সিনট্যাক্স উপাদানগুলি কী তা নির্ধারণ করতে অনেক সময় ব্যয় করেছেন।


3
লিঙ্কটি মারা গেছে। : এটা এখানে সরানো হয়েছে বলে মনে হয় alexgorbatchev.com/SyntaxHighlighter
Moonchild

7

গেসল্যাং সম্ভাব্য সমাধান:

http://guesslang.readthedocs.io/en/latest/index.html

সোর্স ক্লাসিফায়ার এছাড়াও রয়েছে:

https://github.com/chrislo/sourceclassifier/tree/master

আমি চিহ্নিত করতে পারি না এমন একটি ব্লগ নিবন্ধে কিছু কোড সন্ধান করার পরে আমি এই সমস্যায় আগ্রহী হয়ে উঠি। এই প্রশ্নের উত্তর যুক্ত করা যেহেতু "প্রোগ্রামিংয়ের ভাষা চিহ্নিত করুন" এর জন্য এই প্রথম অনুসন্ধানের জন্য হিট হয়েছিল।


5

এটি খুব কঠিন এবং কখনও কখনও অসম্ভব। এই সংক্ষিপ্ত স্নিপেটটি কোন ভাষা থেকে এসেছে?

int i = 5;
int k = 0;
for (int j = 100 ; j > i ; i++) {
    j = j + 1000 / i;
    k = k + i * j;
}

(ইঙ্গিত: এটি বেশিরভাগের মধ্যে যে কোনও একটি হতে পারে))

আপনি বিভিন্ন ভাষা বিশ্লেষণ করার চেষ্টা করতে পারেন এবং কীওয়ার্ডগুলির ফ্রিকোয়েন্সি বিশ্লেষণ ব্যবহার করে সিদ্ধান্ত নেওয়ার চেষ্টা করতে পারেন। যদি কোনও পাঠ্যের কিছু নির্দিষ্ট ফ্রিকোয়েন্সিগুলির সাথে কীওয়ার্ডের কয়েকটি সেট উপস্থিত হয় তবে ভাষা জাভা ইত্যাদি হতে পারে বলে মনে হয় তবে আপনি পুরোপুরি বোকা প্রমাণ হিসাবে এমন কোনও কিছু পাবেন বলে আপনি মনে করেন না, যেমন আপনি সি হিসাবে একই নাম পরিবর্তন করতে পারেন as জাভাতে কীওয়ার্ড হিসাবে এবং ফ্রিকোয়েন্সি বিশ্লেষণ বোকা হবে।

যদি আপনি জটিলতার মধ্যে এটি খাঁজ নেন তবে আপনি কাঠামোগুলি সন্ধান করতে পারেন, যদি কোনও নির্দিষ্ট কীওয়ার্ড সর্বদা অন্যটির পরে আসে তবে এটি আপনাকে আরও ক্লু পেতে পারে। তবে এটি ডিজাইন এবং বাস্তবায়ন করা আরও অনেক কঠিন হবে।


26
ঠিক আছে, বেশ কয়েকটি ভাষা যদি সম্ভব হয় তবে ডিটেক্টর কেবল সম্ভাব্য সমস্ত প্রার্থীকে দিতে পারে।
স্টিভেন হরিয়ন্তো

বা, এটি প্রথমটির সাথে মেলে। বাস্তব-বিশ্বের ব্যবহারের ক্ষেত্রে যদি সিনট্যাক্স হাইলাইট করার মতো কিছু হয় তবে তা আসলে কোনও পার্থক্য করবে না। অর্থ মিলে যাওয়া ভাষার যে কোনওটি কোডটি সঠিকভাবে হাইলাইট করার ফলে ঘটবে।
jonschlinkert

5

একটি বিকল্প ব্যবহার করা highlight.js , যা সঞ্চালিত সিনট্যাক্স হাইলাইট কিন্তু ভাষা সনাক্ত করতে হাইলাইট প্রক্রিয়ার সাফল্য হার ব্যবহার করে। নীতিগতভাবে, কোনও সিনট্যাক্স হাইলাইটার কোডবেস একইভাবে ব্যবহার করা যেতে পারে তবে হাইলাইট.জেএস সম্পর্কে দুর্দান্ত বিষয়টি হল ভাষা সনাক্তকরণকে একটি বৈশিষ্ট্য হিসাবে বিবেচনা করা হয় এবং এটি পরীক্ষার উদ্দেশ্যে ব্যবহৃত হয় ।

আপডেট: আমি এটি চেষ্টা করেছিলাম এবং এটি খুব ভাল কাজ করে না। সংকুচিত জাভাস্ক্রিপ্ট একেবারে বিভ্রান্ত করেছে, অর্থাত টোকেনাইজার সাদা স্থান সংবেদনশীল। সাধারণত, হাইলাইট হিটগুলি গণনা করা খুব নির্ভরযোগ্য বলে মনে হয় না। একটি শক্তিশালী পার্সার, বা সম্ভবত তুলনাহীন বিভাগ গণনা করা আরও ভাল কাজ করতে পারে work


হাইলাইট.জেএস-এ অন্তর্ভুক্ত ভাষার ডেটা হাইলাইট করার জন্য প্রয়োজনীয় মানগুলির মধ্যে সীমাবদ্ধ, যা ভাষা সনাক্তকরণের জন্য যথেষ্টই অপর্যাপ্ত হয়ে উঠেছে (বিশেষত সংখ্যার কোডের জন্য)।
অ্যাডাম কেনেডি

আমি মনে করি এটি ঠিক আছে, jsfiddle.net/3tgjnz10
sebilasse

4

প্রথমত, আমি কোনও ভাষার উদাহরণস্বরূপ কীওয়ার্ডগুলি অনুসন্ধান করার চেষ্টা করব

"package, class, implements "=> JAVA
"<?php " => PHP
"include main fopen strcmp stdout "=>C
"cout"=> C++
etc...

3
সমস্যাটি হ'ল এই কীওয়ার্ডগুলি এখনও কোনও ভাষায়, ভেরিয়েবলের নাম হিসাবে বা স্ট্রিংয়ে উপস্থিত হতে পারে। এটি, এবং ব্যবহৃত কীওয়ার্ডগুলিতে প্রচুর ওভারল্যাপ রয়েছে। আপনাকে কীওয়ার্ড দেখার চেয়ে আরও অনেক কিছু করতে হবে।
এমপেন

2

এটি আপনার কী ধরণের স্নিপেটের উপর নির্ভর করবে, তবে আমি এটিকে টোকেনাইজারের একটি সিরিজ দিয়ে চালিয়ে দেখব এবং কোন ভাষার বিএনএফ এটি বৈধ হিসাবে প্রকাশিত হয়েছে তা দেখতে পাবে।


সমস্ত ভাষা এমনকি কোনও বিএনএফ দ্বারা বর্ণনা করা যায় না। যদি আপনাকে কীওয়ার্ডগুলি নতুন করে সংজ্ঞায়িত করতে এবং ম্যাক্রোগুলি তৈরি করার অনুমতি দেওয়া হয় তবে এটি আরও শক্ত হয়ে যায়। এছাড়াও আমরা যেমন একটি স্নিপেটের কথা বলছি আপনাকে কোনও বিএনএফের সাথে আংশিক ম্যাচ করতে হবে, যা আরও কঠোর এবং ত্রুটির প্রবণ।

2

দুর্দান্ত ধাঁধা

আমি মনে করি এটি সমস্ত ভাষা সনাক্ত করা অসম্ভব। তবে আপনি কী টোকনে ট্রিগার করতে পারেন। (নির্দিষ্ট সংরক্ষিত শব্দ এবং প্রায়শই ব্যবহৃত চরিত্রের সংমিশ্রণ)।

বেন একই রকম বাক্য গঠন সহ প্রচুর ভাষা রয়েছে। সুতরাং এটি স্নিপেটের আকারের উপর নির্ভর করে।


1

প্রিটিফাই একটি জাভাস্ক্রিপ্ট প্যাকেজ যা প্রোগ্রামিং ভাষা সনাক্তকরণের একটি ঠিক কাজ করে:

http://code.google.com/p/google-code-prettify/

এটি মূলত একটি সিনট্যাক্স হাইলাইটার, তবে সম্ভবত একটি স্নিপেট থেকে ভাষা সনাক্ত করার উদ্দেশ্যে সনাক্তকরণ অংশটি বের করার একটি উপায় রয়েছে।


1
আরও পরিদর্শন করার পরে মনে হয় এটি প্রাকৃতিকভাবে ভাষাটি সনাক্ত করে না, তবে এটি প্রতিটি উপাদানটির বাক্য গঠন অনুযায়ী হাইলাইট করে।
হক্কি


1

আমার এটি দরকার তাই আমি নিজের তৈরি করেছি created https://github.com/bertyhell/CodeClassifier

সঠিক ফোল্ডারে একটি প্রশিক্ষণ ফাইল যুক্ত করে এটি খুব সহজেই প্রসারিত। সি # তে লেখা। তবে আমি কল্পনা করি যে কোডটি সহজেই অন্য কোনও ভাষায় রূপান্তরিত হয়।


0

আমি মনে করি না এটি সম্পাদন করার কোনও সহজ উপায় থাকবে। আমি সম্ভবত নির্দিষ্ট ভাষা / ভাষার শ্রেণীর জন্য স্বতন্ত্র চিহ্ন / সাধারণ কীওয়ার্ডগুলির তালিকা তৈরি করব (উদাহরণস্বরূপ সি-স্টাইল ভাষার জন্য কোঁকড়ানো বন্ধনী, বেসিক ভাষার জন্য ডিম এবং সাব কীওয়ার্ড, পাইথনের ডিএফ কীওয়ার্ড, ক্রিয়ামূলক ভাষার জন্য কী কীওয়ার্ড) । এরপরে আপনি এটিকে আরও সংকুচিত করতে বেসিক সিনট্যাক্স বৈশিষ্ট্যগুলি ব্যবহার করতে সক্ষম হতে পারেন।


0

আমি মনে করি ভাষার মধ্যে সবচেয়ে বড় পার্থক্য হল এর কাঠামো। সুতরাং আমার ধারণাটি হ'ল সমস্ত ভাষায় নির্দিষ্ট কিছু সাধারণ উপাদানগুলি দেখতে এবং সেগুলি কীভাবে পৃথক হয় see উদাহরণস্বরূপ, আপনি জিনিসগুলি বাছাই করতে রেজিজেস ব্যবহার করতে পারেন যেমন:

  • ফাংশন সংজ্ঞা
  • পরিবর্তনশীল ঘোষণা
  • বর্গ ঘোষণা
  • মন্তব্য
  • লুপের জন্য
  • লুপ যখন
  • মুদ্রণ বিবৃতি

এবং সম্ভবত কিছু অন্যান্য জিনিস যা বেশিরভাগ ভাষায় থাকতে হবে। তারপরে একটি পয়েন্ট সিস্টেম ব্যবহার করুন। যদি রেজেক্সটি পাওয়া যায় তবে প্রতিটি উপাদানকে সর্বাধিক 1 পয়েন্টে পুরষ্কার দিন। স্পষ্টতই, কিছু ভাষা ঠিক একই বাক্য গঠন ব্যবহার করবে (লুপগুলির জন্য প্রায়শই এর মতো লেখা হয়)for(int i=0; i<x; ++i) এমনভাবে যে একাধিক ভাষাগুলি একই জিনিসটির জন্য পয়েন্ট করতে পারে তবে কমপক্ষে আপনি একে সম্পূর্ণ আলাদা ভাষা হওয়ার সম্ভাবনা হ্রাস করছেন)। তাদের মধ্যে কিছু বোর্ড জুড়ে স্কোর করতে পারে (উদাহরণস্বরূপ স্নিপেটে কোনও ফাংশন নেই) তবে পুরোপুরি ঠিক আছে।

এটি জুলসের সমাধান সহ একত্রিত করুন এবং এটি বেশ ভালভাবে কাজ করা উচিত। একটি অতিরিক্ত পয়েন্টের জন্য কীওয়ার্ডগুলির ফ্রিকোয়েন্সিও সন্ধান করতে পারে।


0

মজাদার. বিভিন্ন ফরম্যাটে পাঠ্য সনাক্ত করতে আমার একই কাজ। YAML, JSON, XML, বা জাভা বৈশিষ্ট্য? এমনকি সিনট্যাক্স ত্রুটি সহ, উদাহরণস্বরূপ, আমার জেএসওএনকে আত্মবিশ্বাসের সাথে এক্সএমএল থেকে আলাদা করা উচিত।

আমি বুঝতে পারি যে আমরা কীভাবে মডেল করি সমস্যাটি সমালোচিত। মার্ক যেমন বলেছিলেন, একক-শব্দ টোকেনাইজেশন প্রয়োজনীয় তবে সম্ভবত যথেষ্ট নয়। আমাদের বিগ্রাম, বা এমনকি ট্রিগার প্রয়োজন হবে। তবে আমি মনে করি যে আমরা প্রোগ্রামিং ভাষার দিকে নজর রাখছি তা জেনে আমরা সেখান থেকে আরও এগিয়ে যেতে পারি। আমি লক্ষ্য করেছি যে প্রায় কোনও প্রোগ্রামিং ভাষার দুটি ধরণের টোকেন রয়েছে - চিহ্ন এবং কীওয়ার্ড । প্রতীকগুলি তুলনামূলকভাবে সহজ (কিছু চিহ্ন প্রতীকগুলি ভাষার অংশ না হয়ে আক্ষরিক হতে পারে) সনাক্ত করতে। তারপরে বিগ্রাম বা প্রতীকগুলির ট্রিগারগুলি প্রতীকগুলির চারপাশে অনন্য সিনট্যাক্স কাঠামো বেছে নেবে। প্রশিক্ষণের সেটটি যথেষ্ট বড় এবং পর্যাপ্ত বৈচিত্রপূর্ণ হলে কীওয়ার্ডগুলি আরেকটি সহজ লক্ষ্য। সম্ভাব্য কীওয়ার্ডগুলির আশেপাশে একটি দরকারী বৈশিষ্ট্য বিগ্রাম হতে পারে। আরও একটি আকর্ষণীয় ধরণের টোকেন হ'ল হোয়াইটস্পেস। প্রকৃতপক্ষে যদি আমরা সাদা স্থানের মাধ্যমে সাধারণভাবে টোকনাইজ করি তবে আমরা এই তথ্যটি আলগা করব। আমি বলব, প্রোগ্রামিং ভাষা বিশ্লেষণের জন্য, আমরা হোয়াইটস্পেস টোকেন রাখি কারণ এটি সিনট্যাক্স কাঠামো সম্পর্কে দরকারী তথ্য বহন করতে পারে।

অবশেষে যদি আমি এলোমেলো বনের মতো শ্রেণিবদ্ধকারী চয়ন করি তবে আমি গিথুব ক্রল করব এবং সমস্ত সর্বজনীন উত্স কোড সংগ্রহ করব। উত্স কোড ফাইলের বেশিরভাগ ফাইল প্রত্যয় দ্বারা লেবেল করা যেতে পারে। প্রতিটি ফাইলের জন্য, আমি এলোমেলোভাবে খালি লাইনে এটি বিভিন্ন আকারের স্নিপেটে বিভক্ত করব। আমি তারপরে বৈশিষ্ট্যগুলি বের করব এবং লেবেল স্নিপেটগুলি ব্যবহার করে শ্রেণিবদ্ধকে প্রশিক্ষণ দেব। প্রশিক্ষণ শেষ হওয়ার পরে, শ্রেণিবদ্ধকারী যথার্থতা এবং পুনর্বিবেচনার জন্য পরীক্ষা করা যেতে পারে।


0

আমি যে সর্বোত্তম সমাধানটি পেয়েছি তা হ'ল একজন রুবি অন রেল অ্যাপে ভাষাতত্ত্ববিদ রত্ন ব্যবহার করা । এটি এটি করার একটি নির্দিষ্ট উপায়, তবে এটি কার্যকর হয়। এটি উপরে @Nisc দ্বারা উল্লিখিত হয়েছিল তবে আমি আপনাকে এটি ব্যবহারের জন্য আমার সঠিক পদক্ষেপগুলি বলব। (নীচের কয়েকটি কমান্ড লাইন কমান্ড উবুন্টুর জন্য নির্দিষ্ট তবে এটি অন্য ওএসের মধ্যে সহজেই অনুবাদ করা উচিত)

আপনার যদি এমন কোনও রেল অ্যাপ্লিকেশন থাকে যা অস্থায়ীভাবে আপনার সাথে জগাখিচুড়ি করতে আপত্তি না করে তবে আপনার কোড স্নিপেট প্রশ্নবিদ্ধ itোকাতে এতে একটি নতুন ফাইল তৈরি করুন। (যদি না থাকে তাহলে পাগল ইনস্টল সেখানে একটি ভাল গাইড এখানে যদিও উবুন্টু জন্য আমি সুপারিশ এই । তারপর চালানো rails new <name-your-app-dir>এবং যে ডিরেক্টরির মধ্যে সিডি। আপনি যা চালানোর জন্য একটি পাগল অ্যাপ্লিকেশন সেখানে আগে থেকেই)।

এটি ব্যবহার করার জন্য আপনার কাছে রেল অ্যাপ্লিকেশন হওয়ার পরে, gem 'github-linguist'আপনার গেমফিল যুক্ত করুন (আক্ষরিকভাবে Gemfileআপনার অ্যাপ ডিরেক্টরিতে বলা হয়, কোনও এক্সট্রা নেই)।

তারপরে রুবি-ডেভ ইনস্টল করুন ( sudo apt-get install ruby-dev)

তারপরে cmake ইনস্টল করুন ( sudo apt-get install cmake)

এখন আপনি চালাতে পারেন gem install github-linguist(যদি আইকু প্রয়োজনীয় বলে এমন কোনও ত্রুটি পেয়ে থাকেন তবে sudo apt-get install libicu-devআবার চেষ্টা করুন)

(আপনার উপর একটি কাজ করতে হবে sudo apt-get updateবা sudo apt-get install makeউপরেরটি sudo apt-get install build-essentialযদি কাজ না করে তবে)

এখন সবকিছু সেট আপ করা হয়। কোড স্নিপেটগুলি চেক করতে চাইলে আপনি এখন এটি ব্যবহার করতে পারেন। একটি পাঠ্য সম্পাদকটিতে, আপনার কোড স্নিপেট সন্নিবেশ করানোর জন্য যে ফাইলটি তৈরি করেছেন তা খুলুন (আসুন কেবল এটি বলা যাক app/test.tplতবে আপনার স্নিপেটের প্রসারণ জানেন তবে তার পরিবর্তে এটি ব্যবহার করুন you .tplআপনি যদি এক্সটেনশনটি জানেন না, তবে একটিটি ব্যবহার করবেন না )। এখন এই ফাইলটিতে আপনার কোড স্নিপেট আটকান। কমান্ড লাইনে যান এবং চালান bundle install(অবশ্যই আপনার অ্যাপ্লিকেশনটির ডিরেক্টরিতে থাকতে হবে)। তারপরে রান করুন linguist app/test.tpl(আরও সাধারণভাবে linguist <path-to-code-snippet-file>)। এটি আপনাকে টাইপ, মাইম টাইপ এবং ভাষা বলবে। একাধিক ফাইলের জন্য (বা রুবি / রেলস অ্যাপ্লিকেশন সহ সাধারণ ব্যবহারের জন্য) আপনি bundle exec linguist --breakdownনিজের অ্যাপ্লিকেশনটির ডিরেক্টরিতে চালাতে পারেন ।

এটি অনেক অতিরিক্ত কাজের মতো মনে হচ্ছে, বিশেষত আপনার যদি ইতিমধ্যে রেল না থাকে তবে আপনি যদি এই পদক্ষেপগুলি অনুসরণ করেন তবে রেল সম্পর্কে আপনাকে আসলে কিছু জানা উচিত নয় এবং আমি সত্যিই এটি সনাক্ত করার আরও ভাল উপায় খুঁজে পাইনি have কোনও ফাইল / কোড স্নিপেটের ভাষা।


0

আমি বিশ্বাস করি যে কোনও একক সমাধান নেই যা সম্ভবত কোনও একক স্নিপেটের উপর ভিত্তি করে কোনও স্নিপেট কী ভাষাতে রয়েছে তা সনাক্ত করতে পারে। কীওয়ার্ডটি নিন print। এটি যে কোনও সংখ্যক ভাষায় হাজির হতে পারে, যার প্রত্যেকটিই বিভিন্ন উদ্দেশ্যে এবং বিভিন্ন বাক্য গঠন রয়েছে।

আমার কিছু পরামর্শ আছে আমি বর্তমানে আমার ওয়েবসাইটের জন্য একটি ছোট্ট কোডের টুকরো লিখছি যা প্রোগ্রামিং ভাষা সনাক্ত করতে ব্যবহৃত হতে পারে। অন্যান্য পোস্টগুলির মতো, এখানে প্রচুর প্রোগ্রামিং ভাষাগুলি থাকতে পারে যা আপনি কেবল শোনেননি, আপনি সেগুলির জন্য অ্যাকাউন্ট করতে পারবেন না।

আমি যা করেছি তা হ'ল প্রতিটি ভাষা কীওয়ার্ডের নির্বাচনের মাধ্যমে চিহ্নিত করা যায়। উদাহরণস্বরূপ, পাইথনকে বিভিন্ন উপায়ে সনাক্ত করা যায়। আপনি যদি ভাষা ব্যবহারের জন্য অবশ্যই 'অনন্য' বৈশিষ্ট্য বেছে নেন তবে এটি সম্ভবত সহজ। পাইথনের জন্য, আমি বিবৃতিগুলির সেট শুরু করতে কলোন ব্যবহার করার বৈশিষ্ট্যটি বেছে নিই, যা আমি বিশ্বাস করি যে এটি মোটামুটি অনন্য বৈশিষ্ট্য (আমি ভুল হলে আমাকে সংশোধন করি)।

যদি, আমার উদাহরণে, আপনি কোনও বিবৃতি সেট শুরু করার জন্য কোনও কোলন খুঁজে না পেয়ে থাকেন, তবে অন্য সম্ভাব্য বৈশিষ্ট্যের দিকে চলে যান, আসুন defকোনও ফাংশন সংজ্ঞায়িত করতে মূল শব্দটি ব্যবহার করে বলি । এখন এটি কিছু সমস্যার কারণ হতে পারে, কারণ রুবি defএকটি ফাংশন সংজ্ঞায়িত করতে কীওয়ার্ডটিও ব্যবহার করে । দু'জনকে (পাইথন এবং রুবি) আলাদা করে বলার মূল চাবিকাঠিটি সেরা ম্যাচটি পেতে বিভিন্ন স্তরের ফিল্টারিং ব্যবহার করা। রুবি endএকটি ফাংশন শেষ করতে কীওয়ার্ডটি ব্যবহার করে , যেখানে পাইথনের কোনও ফাংশন শেষ করার জন্য কিছুই নেই, কেবল একটি ডি-ইনডেন্ট তবে আপনি সেখানে যেতে চান না। তবে আবার endলুয়াও হতে পারে, মিশ্রণটিকে যুক্ত করার জন্য আরও একটি প্রোগ্রামিং ল্যাঙ্গুয়েজ।

আপনি দেখতে পারেন যে প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি কেবলমাত্র খুব বেশি ওভারলে হয়। একটি ভাষায় মূল শব্দ হতে পারে এমন একটি কীওয়ার্ড অন্য ভাষায় কীওয়ার্ড হতে পারে। কীওয়ার্ডগুলির সংমিশ্রণ যা প্রায়শই একসাথে যায় জাভা যেমন public static void main(String[] args)এই সমস্যাগুলি দূর করতে সহায়তা করে Using

আমি ইতিমধ্যে বলেছি এর মতো, আপনার সেরা সুযোগটি অপরটির থেকে আলাদা করার জন্য তুলনামূলকভাবে অনন্য কীওয়ার্ড বা কীওয়ার্ডের সেটগুলির সন্ধান করছে। এবং, যদি আপনি এটি ভুল হয়ে থাকেন তবে কমপক্ষে আপনার যেতে হবে।


0

মত এলোমেলো স্ক্র্যামব্লার সেট আপ করুন

matrix S = matrix(GF(2),k,[random()<0.5for _ in range(k^2)]); while (rank(S) < k) : S[floor(k*random()),floor(k*random())] +=1;

0

এই সাইটটি ভাষাগুলি সনাক্তকরণে বেশ ভাল বলে মনে হচ্ছে, যদি আপনি প্রোগ্রামালিমে না করে কোনও ওয়েব রূপে একটি স্নিপেট পেস্ট করার দ্রুত উপায় চান: http://dpaste.com/

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.