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を使用しても機能します。
エリックウィルソン

3
この質問はプログラミングに関するものではないため、トピックから外れているようです。ヘルプセンターで、ここ質問できるトピックを参照してください。おそらく、Web Apps StackExchangeが質問するのに適した場所でしょう。
jww 2014

言語学者用のGithubトラッカーの誤認言語タグも参照してください。
jww 2014

1
結果を曖昧にするために、統計エンジンがファイルタイプについて嘘をついていることがわかります。stackoverflow.com/a/27099628/492を
CAD bloke 2015年

回答:


81

2013年4月の更新、nuclearsandwich(GitHubサポートチームまたは「supportocat」)による:

目的の言語がシンタックスハイライトを受信して​​いない場合は、言語学者ライブラリに貢献して追加することができます。


(元の回答、2012年10月)

GitHubサポートに関するこのスレッドはそれ説明しています:

各拡張子のファイルサイズを合計するだけです。最大のものが「勝ち」ます。

どちらもプロセスが遅くなるため、ファイルを開いてコンテンツを解析することは避けたいと思います...しかし、これがこのような競合を解決する唯一の方法である可能性があります。

これは100%正確ではないため、次のように追加する必要がありました。

私も、推測が間違っている場合に備えて、単純な手動オーバーライドスイッチに投票します。


注:Mark Rushakoff彼の回答(賛成)で述べているようにそれ以来、言語学者プロジェクト(2011年6月からオープンソース)で推測が改善されました。
ただし、まだ問題があることがわかります:GitHub言語学者の問題
詳細については、こちらをご覧ください

言語が検出されると、PygmentsラッパーであるAlbinoに渡され、実際の構文の強調表示が行われます。

また、.gitattributesファイルに言語学者ディレクティブを追加できます


2
情報をありがとう。言語を手動で変更する方法はまだないと思います。
noob 2012年

これはもはや当てはまりません!言語学者に関する以下の回答は、より的を射ています。チェックアウト私のリポジトリは間違った言語としてマークされている、なぜ私の好きな言語が認識されないhelp.github.com。免責事項:私はGitHubのサポートチームで働いています。
Nuclearsandwich 2013

@nuclearsandwichすばらしい、答えを更新し、編集を完了しました。注:私はGitHubの本社でと金曜日、5月10日、会議になり、ジョングリートや他のsupportocats :)
VonC

私のリポジトリgithub.com/salda/file_scraperは主にC ++であり、少しCが付いていますが、70とマークされているため、リポジトリにマークを付けない、またはユーザーにメイン言語を選択させる方が、自動的に推測するよりもはるかに便利です。%Objective-C。
Lukas Salich 2018


4

まず、Linguistオーバーライドを使用して、リポジトリ内のファイルに対して検出さた言語オーバーライドできることを知ってください。

さて、一言で言えば、

  1. 各リポジトリは、言語統計の最初の言語でタグ付けされています。
  2. 言語統計は、検出された各プログラミング言語またはマークアップ言語のファイル合計サイズをカウントしますVendored、ドキュメント、および生成されたファイルはカウントれません。
  3. 各ファイルの言語は、オープンソースプロジェクトの言語学者によって検出されます。

言語学者はどのように言語を検出しますか?

言語学者は、次の戦略に順番に依存し、完全に一致するものが見つかるとすぐに言語を返します(単一の言語が返される戦略)。

  1. 探しEmacsやVimのモードライン
  2. 既知のファイル名。一部のファイル名は特定の言語に関連付けられています(think Makefile)。
  3. シバンを探してください。#!/bin/bashシバンのあるファイルはシェルとして分類されます。
  4. 既知のファイル拡張子。言語には、一連の拡張機能が関連付けられています。ただし、この戦略には多くの矛盾があります。矛盾する結果(C ++、C、Objective-Cを考えてください.h)は、後続の戦略によって洗練されます。
  5. ヒューリスティックルールのセット。彼らは通常、ファイルの内容に対する正規表現に依存して、言語を識別しようとします(たとえば、^[^#]+:-Prologの場合)。
  6. サンプルファイルでトレーニングされた単純ベイズ分類器。最後の戦略、最低の精度。ベイズ分類器は常に言語のサブセットを入力として受け取ります。すべての言語に分類することを意図したものではありません。分類子によって検出された最適な一致が返されます。

ベンダーなしのドキュメントファイルとは何ですか?

言語学者は、一部のファイルをベンダーと見なします。つまり、言語統計には含まれていません。これらには、jQueryなどのサードパーティライブラリが含まれ、vendor.yml構成ファイルで定義されています。Linguistオーバーライドを使用して、リポジトリ内のファイルをベンダーまたはベンダー解除することもできます

同様に、ドキュメントファイルはで定義されてdocumentation.ymlおり、言語学者のオーバーライドを使用して変更できます

生成されたファイルはどのように検出されますか?

言語学者は、ファイルのパスとコンテンツの両方を使用して、生成されたファイルを検出するための単純なルールに依存しています。生成されたファイルは言語統計にカウントされず、github.comのdiffに表示されません。

プログラミングとマークアップ言語はどうですか?

言語学者では、各言語にタイプが与えられます。これらのタイプは、メインの構成ファイルにありlanguages.ymlます。プログラミング言語とマークアップ言語のみが統計にカウントされます。


0

言語学者をいじくり回した後、私はこれに気づきました。

シバンを含むファイルの場合、言語を決定するときにシバンが考慮されますが、他のトークンに対して均等に重み付けされているよう です。Shebangはファイルの言語を明確に定義する必要があるため、これは大きなエラーのようです。

これにより、強調表示で問題が発生する可能性があります


この回答にはいくつかの壊れたリンクがあります。これは、スタック交換に表示されるこの回答にも当てはまります:webapps.stackexchange.com/a/40110。それらのリンクを見たいので、残念です!
shmim 2015年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.