github는 프로젝트의 언어를 어떻게 알아 내나요?


84

저는 최근에 JavaScript와 C ++ 모두에서 github 프로젝트를 작업하고 있었는데 github가 프로젝트에 C ++ 태그를 붙인 것을 발견했습니다. 단일 언어를 선택해야한다면 C ++ 코드가 JavaScript 라이브러리로 컴파일 되었기 때문에 이것이 올바른 지정일 것입니다.하지만 이로 인해 궁금해졌습니다. github는 각 프로젝트에 태그를 지정할 언어를 어떻게 알아낼까요?


14
당신은 자신이 운이 좋다고 생각할 수 있습니다. 저는 Ruby on Rails 프로젝트를 작성하고 있지만 Twitter Bootstrap을 사용하고 있기 때문에 Github는 제 프로젝트가 의도 된 Ruby 대신 Javascript라고 생각합니다

2
@davblayn github.com/github/linguist/blob/master/lib/linguist/vendor.yml 이 문제를 해결할 것이라고 생각합니다 . 또한 부트 스트랩에 CDN을 사용하면 작동합니다.
Eric Wilson

3
이 질문은 프로그래밍에 관한 것이 아니기 때문에 주제에서 벗어난 것처럼 보입니다. 도움말 센터에서 내가 질문 할 수있는 항목을 참조 하세요 . 아마도 Web Apps Stack Exchange 가 더 나은 곳일 것입니다.
jww

Linguist 용 Github 추적기의 Misidentified Language 태그 도 참조하십시오 .
jww

1
결과를 퍼지하기 위해 통계 엔진에 파일 유형에 대한 거짓말을 알릴 수 있습니다. stackoverflow.com/a/27099628/492
CAD bloke

답변:


81

nuclearsandwich (GitHub 지원 팀 또는 " supportocat ")에 의해 2013 년 4 월 업데이트 :

원하는 언어가 구문 강조 표시를받지 못하는 경우 Linguist 라이브러리에 기여하여 추가 할 수 있습니다.


(원래 답변, 2012 년 10 월)

GitHub 지원에 대한스레드 는 이에 대해 설명합니다.

각 확장자에 대한 파일 크기를 요약합니다. 가장 큰 것이 "승리"합니다.

둘 다 프로세스 속도를 늦추기 때문에 파일을 열고 내용을 구문 분석하는 것을 피하고 싶지만, 이것이 이와 같은 충돌을 해결하는 유일한 방법 일 수 있습니다.

이것은 100 % 정확하지 않기 때문에 일부 사람들은 다음을 추가했습니다.

나도 추측이 잘못된 경우에 대해 간단한 수동 오버라이드 스위치에 투표합니다.


참고 : Mark Rushakoff가 답변 에서 언급 했듯이 (upvoted), 그 이후로 언어 학자 프로젝트 (2011 년 6 월부터 오픈 소스 )를 통해 추측이 더 좋아 졌습니다.
그래도 여전히 문제가 있음을 알 수 있습니다. GitHub Linguist Issues .
자세한 내용은 여기를 참조하십시오 .

언어가 감지되면 실제 구문 강조를 수행 하는 Pygments 래퍼 인 Albino 로 전달됩니다 .

.gitattributes 파일에 언어 학자 지시문을 추가 할 수 있습니다 .


2
정보에 대해서 감사드립니다. 언어를 수동으로 수정할 수있는 방법은 아직 없다고 생각합니다.
noob

이것은 더 이상 사실이 아닙니다! 언어 학자에 관한 아래 답변은 마크에 더 가깝습니다. 체크 아웃 내 저장소는 잘못된 언어로 표시됩니다이유는 인식 내 좋아하는 언어가 아닙니다help.github.com . 면책 조항 : 저는 GitHub의 지원 팀에서 일합니다.
nuclearsandwich 2013

@nuclearsandwich 훌륭합니다. 답변을 업데이트하여 편집을 완료했습니다. 참고 : 5 월 10 일 금요일 GitHub 본사에서 John Greet 및 기타 supportocats와 회의를합니다. :)
VonC 2013

내 저장소 github.com/salda/file_scraper 는 주로 C에서 약간의 C를 사용하지만 70으로 표시 되기 때문에 저장소를 표시하지 않거나 사용자가 기본 언어를 선택하도록하는 것이 자동으로 추측하는 것보다 더 편리 할 것입니다. % 목표 -C.
Lukas Salich


4

먼저 Linguist overrides를 사용하여 저장소의 파일에 대해 감지 된 언어를 재정의 할 수 있습니다 .

이제 간단히 말해서

  1. 각 저장소에는 언어 통계 의 첫 번째 언어로 태그가 지정됩니다 .
  2. 언어 통계는 감지 된 각 프로그래밍 또는 마크 업 언어에 대한 총 파일 크기를 계산합니다 . 공급 업체, 문서 및 생성 된 파일은 포함되지 않습니다.
  3. 각 파일의 언어는 오픈 소스 프로젝트 Linguist에 의해 감지됩니다 .

언어학자는 언어를 어떻게 감지합니까?

언어학자는 다음 전략 을 순서대로 사용하고 완벽하게 일치하는 것을 찾으면 즉시 언어를 반환합니다 (단일 언어를 반환하는 전략).

  1. Emacs 및 Vim 모델을 찾으십시오 .
  2. 알려진 파일 이름. 일부 파일 이름은 특정 언어와 연관되어 있습니다 (생각 Makefile).
  3. shebang을 찾으십시오. shebang이 있는 파일#!/bin/bash 이있는 은 Shell로 분류됩니다.
  4. 알려진 파일 확장자. 언어에는 연관된 확장 세트가 있습니다. 그러나이 전략에는 많은 충돌이 있습니다. 충돌하는 결과 (예 : C ++, C 및 Objective-C for .h)는 후속 전략에 의해 구체화됩니다.
  5. 휴리스틱 규칙 세트 . 일반적으로 파일 내용에 대한 정규식에 의존하여 언어를 식별하고 식별합니다 (예 : ^[^#]+:-Prolog ).
  6. 샘플 파일 에 대해 훈련 된 순진한 베이지안 분류기 . 마지막 전략, 가장 낮은 정확도. 베이지안 분류기는 항상 언어의 하위 집합을 입력으로 사용합니다. 모든 언어를 분류하는 것은 아닙니다. 분류자가 찾은 가장 일치하는 항목이 반환됩니다.

공급 업체가없는 문서 파일이란 무엇입니까?

Linguist는 일부 파일을 공급 업체 로 간주합니다 . 즉, 언어 통계에 포함되지 않습니다. 여기에는 jQuery와 같은 타사 라이브러리가 포함되며 vendor.yml구성 파일에 정의되어 있습니다. Linguist 재정의를 사용하여 저장소의 파일을 공급 업체 또는 공급 업체 취소 할 수도 있습니다 .

마찬가지로 문서 파일은에서 정의되며 Linguist 재정의를documentation.yml 사용하여 변경할 수 있습니다 .

생성 된 파일은 어떻게 감지됩니까?

Linguist 는 파일의 경로와 내용을 모두 사용하여 생성 된 파일을 감지하는 간단한 규칙 에 의존 합니다. 생성 된 파일은 언어 통계에 포함되지 않으며 github.com의 diff에 표시되지 않습니다.

프로그래밍 및 마크 업 언어는 어떻습니까?

Linguist에서는 각 언어에 유형이 지정됩니다. 이러한 유형은 기본 구성 파일 인 languages.yml. 프로그래밍 및 마크 업 언어 만 통계에 포함됩니다.


0

언어 학자 와 약간의 땜질 후 나는 이것을 발견했습니다.

A의 파일의 오두막 의 오두막은 언어를 결정하지만, 균등 다른에 대해 가중 될 것으로 보인다 때 고려되는 토큰 . Shebang이 파일의 언어를 확실히 정의해야하기 때문에 이것은 큰 오류 인 것 같습니다.

이로 인해 강조 표시에 문제 가 발생할 수 있습니다 .


이 답변에는 몇 가지 깨진 링크가 있습니다. 이것은 스택 교환 ( webapps.stackexchange.com/a/40110) 에 나타나는이 답변에도 해당됩니다 . 그 링크를보고 싶기 때문에 아쉽습니다!
shmim

-1

파일 확장자는 가장 먼저 떠오르는 것입니다.


물론,하지만 ... 내 프로젝트에는 다른 확장자 중에서 .js.cc파일이 모두 포함되어 있습니다.
Justin Ethier 2011 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.