저는 최근에 JavaScript와 C ++ 모두에서 github 프로젝트를 작업하고 있었는데 github가 프로젝트에 C ++ 태그를 붙인 것을 발견했습니다. 단일 언어를 선택해야한다면 C ++ 코드가 JavaScript 라이브러리로 컴파일 되었기 때문에 이것이 올바른 지정일 것입니다.하지만 이로 인해 궁금해졌습니다. github는 각 프로젝트에 태그를 지정할 언어를 어떻게 알아낼까요?
답변
nuclearsandwich (GitHub 지원 팀 또는 ” supportocat “)에 의해 2013 년 4 월 업데이트 :
-
도움말 페이지 ” My repository is Mark as the wrong language “는 이제 linguist 라이브러리 를 사용하여 구문 강조 및 repo 통계를위한 파일 언어를 결정 하는 방법을 언급 합니다. Linguist는 특정 공급 업체 파일 및 디렉토리를 제외하고 통계에서 특정 파일 이름과 경로를 제외합니다 .
-
도움말 페이지 ” 내가 좋아하는 언어가 인식되지 않는 이유는 무엇입니까? “는 다음을 추가합니다.
원하는 언어가 구문 강조 표시를받지 못하는 경우 Linguist 라이브러리에 기여하여 추가 할 수 있습니다.
(원래 답변, 2012 년 10 월)
GitHub 지원에 대한 이 스레드 는 이에 대해 설명합니다.
각 확장자에 대한 파일 크기를 요약합니다. 가장 큰 것이 “승리”합니다.
둘 다 프로세스 속도를 늦추기 때문에 파일을 열고 내용을 구문 분석하는 것을 피하고 싶지만, 이것이 이와 같은 충돌을 해결하는 유일한 방법 일 수 있습니다.
이것은 100 % 정확하지 않기 때문에 일부 사람들은 다음을 추가했습니다.
나도 추측이 잘못된 경우에 대해 간단한 수동 오버라이드 스위치에 투표합니다.
참고 : Mark Rushakoff가 답변 에서 언급 했듯이 (upvoted), 그 이후로 언어 학자 프로젝트 (2011 년 6 월부터 오픈 소스 )를 통해 추측이 더 좋아 졌습니다.
그래도 여전히 문제가 있음을 알 수 있습니다. GitHub Linguist Issues .
자세한 내용은 여기를 참조하십시오 .
답변
현재 Github의 언어 학자 프로젝트 는 이 Github 블로그 게시물 (이 질문이 처음 질문 된 후 몇 달 후에 나옴)에 설명 된대로 언어 통계를 결정하는 데 사용됩니다 .
답변
먼저 Linguist overrides를 사용하여 저장소의 파일에 대해 감지 된 언어를 재정의 할 수 있습니다 .
이제 간단히 말해서
- 각 저장소에는 언어 통계 의 첫 번째 언어로 태그가 지정됩니다 .
- 언어 통계는 감지 된 각 프로그래밍 또는 마크 업 언어에 대한 총 파일 크기를 계산합니다 . 공급 업체, 문서 및 생성 된 파일은 포함되지 않습니다.
- 각 파일의 언어는 오픈 소스 프로젝트 Linguist에 의해 감지됩니다 .
언어학자는 언어를 어떻게 감지합니까?
언어학자는 다음 전략 을 순서대로 사용하고 완벽하게 일치하는 것을 찾으면 즉시 언어를 반환합니다 (단일 언어를 반환하는 전략).
- Emacs 및 Vim 모델을 찾으십시오 .
- 알려진 파일 이름. 일부 파일 이름은 특정 언어와 연관되어 있습니다 (생각
Makefile
). - shebang을 찾으십시오. shebang이 있는 파일
#!/bin/bash
이있는 은 Shell로 분류됩니다. - 알려진 파일 확장자. 언어에는 연관된 확장 세트가 있습니다. 그러나이 전략에는 많은 충돌이 있습니다. 충돌하는 결과 (예 : C ++, C 및 Objective-C for
.h
)는 후속 전략에 의해 구체화됩니다. - 휴리스틱 규칙 세트 . 일반적으로 파일 내용에 대한 정규식에 의존하여 언어를 식별하고 식별합니다 (예 :
^[^#]+:-
Prolog ). - 샘플 파일 에 대해 훈련 된 순진한 베이지안 분류기 . 마지막 전략, 가장 낮은 정확도. 베이지안 분류기는 항상 언어의 하위 집합을 입력으로 사용합니다. 모든 언어를 분류하는 것은 아닙니다. 분류자가 찾은 가장 일치하는 항목이 반환됩니다.
공급 업체가없는 문서 파일이란 무엇입니까?
Linguist는 일부 파일을 공급 업체 로 간주합니다 . 즉, 언어 통계에 포함되지 않습니다. 여기에는 jQuery와 같은 타사 라이브러리가 포함되며 vendor.yml
구성 파일에 정의되어 있습니다. Linguist 재정의를 사용하여 저장소의 파일을 공급 업체 또는 공급 업체 취소 할 수도 있습니다 .
마찬가지로 문서 파일은에서 정의되며 Linguist 재정의를documentation.yml
사용하여 변경할 수 있습니다 .
생성 된 파일은 어떻게 감지됩니까?
Linguist 는 파일의 경로와 내용을 모두 사용하여 생성 된 파일을 감지하는 간단한 규칙 에 의존 합니다. 생성 된 파일은 언어 통계에 포함되지 않으며 github.com의 diff에 표시되지 않습니다.
프로그래밍 및 마크 업 언어는 어떻습니까?
Linguist에서는 각 언어에 유형이 지정됩니다. 이러한 유형은 기본 구성 파일 인 languages.yml
. 프로그래밍 및 마크 업 언어 만 통계에 포함됩니다.