У меня есть строка, содержащая текст. Текст может быть или не быть кодом. Используя лингвиста Гитуба, я смог определить вероятный язык программирования, только если я дам ему список кандидатов.Как я могу определить язык программирования фрагмента?
# test_linguist_1.rb
#!/usr/bin/env ruby
require 'linguist'
s = "int main(){}"
candidates = [Linguist::Language["Python"], Linguist::Language["C"], Linguist::Language["Ruby"]]
b = Linguist::Blob.new('', s)
langs = Linguist::Classifier.call(b, candidates)
puts langs.inspect
Исполнение:
$ ./test_linguist_1.rb
[#<Linguist::Language name=C>, #<Linguist::Language name=Python>, #<Linguist::Language name=Ruby>]
Обратите внимание, что я дал ему список кандидатов. Как я могу избежать определения списка кандидатов?
Я попытался следующие:
# test_linguist_2.rb
#!/usr/bin/env ruby
require 'linguist'
s = "int main(){}"
candidates = Linguist::Language.all
# I also tried only Popular
# candidates = Linguist.Language.popular
b = Linguist::Blob.new('', s)
langs = Linguist::Classifier.call(b, candidates)
puts langs.inspect
Исполнение:
$ ./test_linguist_2.rb
/home/marvelez/.rvm/gems/ruby-2.2.1/gems/github-linguist-4.8.9/lib/linguist/classifier.rb:131:in `token_probability': undefined method `[]' for nil:NilClass (NoMethodError)
from /home/marvelez/.rvm/gems/ruby-2.2.1/gems/github-linguist-4.8.9/lib/linguist/classifier.rb:120:in `block in tokens_probability'
from /home/marvelez/.rvm/gems/ruby-2.2.1/gems/github-linguist-4.8.9/lib/linguist/classifier.rb:119:in `each'
from /home/marvelez/.rvm/gems/ruby-2.2.1/gems/github-linguist-4.8.9/lib/linguist/classifier.rb:119:in `inject'
from /home/marvelez/.rvm/gems/ruby-2.2.1/gems/github-linguist-4.8.9/lib/linguist/classifier.rb:119:in `tokens_probability'
from /home/marvelez/.rvm/gems/ruby-2.2.1/gems/github-linguist-4.8.9/lib/linguist/classifier.rb:105:in `block in classify'
from /home/marvelez/.rvm/gems/ruby-2.2.1/gems/github-linguist-4.8.9/lib/linguist/classifier.rb:104:in `each'
from /home/marvelez/.rvm/gems/ruby-2.2.1/gems/github-linguist-4.8.9/lib/linguist/classifier.rb:104:in `classify'
from /home/marvelez/.rvm/gems/ruby-2.2.1/gems/github-linguist-4.8.9/lib/linguist/classifier.rb:78:in `classify'
from /home/marvelez/.rvm/gems/ruby-2.2.1/gems/github-linguist-4.8.9/lib/linguist/classifier.rb:20:in `call'
from ./test_linguist.rb:21:in `block in <main>'
from ./test_linguist.rb:14:in `each'
from ./test_linguist.rb:14:in `<main>'
Дополнительно:
- Это лучший способ использовать GitHub Лингвист? FileBlob является альтернативой Blob, но для этого требуется записать мою строку в файл. Это проблематично по двум причинам: 1) он медленный, и 2) выбранное расширение файла затем лингвистическое руководство, и мы не знаем правильного расширения файла.
- Есть ли лучшие инструменты для этого? Github Linguist, возможно, работает над файлами, но не над строками.
Спасибо за ответ. Однако, как я упоминаю в вопросе, я знаю расширение файла, потому что я не знаю языка программирования. Я пытаюсь обнаружить (вероятный) язык программирования. –
@MartinVelez А, я вижу это сейчас. Виноват. Позвольте мне пообщаться с ним немного больше. – mwp
@MartinVelez Я думаю, вы нашли ошибку в драгоценности. :-) Я представил PR и задокументировал, как вы можете использовать свою вилку. Пожалуйста, поделись своими мыслями. – mwp