Làm thế nào để github tìm ra ngôn ngữ của một dự án?


84

Gần đây tôi đang làm việc trên một dự án github bằng cả JavaScript và C ++, và nhận thấy rằng github đã gắn thẻ dự án là C ++. Nếu bạn phải chọn một ngôn ngữ duy nhất, đây có lẽ là chỉ định chính xác vì mã C ++ được biên dịch dưới dạng thư viện JavaScript, nhưng điều này khiến tôi tự hỏi ... làm thế nào github tìm ra ngôn ngữ nào để gắn thẻ cho mỗi dự án?


14
Bạn có thể coi mình là người may mắn. Tôi đang viết một dự án Ruby on Rails nhưng vì tôi đang sử dụng Twitter Bootstrap, Github cho rằng dự án của tôi là Javascript, thay vì Ruby dự định

2
@davblayn Tôi nghĩ rằng github.com/github/linguist/blob/master/lib/linguist/vendor.yml sẽ giải quyết được vấn đề của bạn. Cũng có thể sử dụng CDN cho bootstrap.
Eric Wilson

3
Câu hỏi này có vẻ lạc đề vì nó không phải về lập trình. Xem những chủ đề tôi có thể hỏi tại đây trong Trung tâm trợ giúp. Có lẽ Web Apps Stack Exchange sẽ là một nơi tốt hơn để hỏi.
jww

Ngoài ra, hãy xem thẻ Ngôn ngữ được xác định sai trên trình theo dõi Github cho Linguist .
jww

1
Bạn có thể biết công cụ thống kê nói dối về các loại tệp để làm sai lệch kết quả. Xem stackoverflow.com/a/27099628/492
CAD bloke

Câu trả lời:


81

Cập nhật tháng 4 năm 2013, bởi nuclearsandwich (nhóm hỗ trợ GitHub hoặc "supportocat"):

Nếu ngôn ngữ mong muốn của bạn không nhận được đánh dấu cú pháp, bạn có thể đóng góp cho thư viện Linguist để thêm nó.


(Câu trả lời gốc, tháng 10 năm 2012)

Chủ đề này trên hỗ trợ GitHub giải thích nó:

Nó chỉ tổng hợp kích thước tệp cho mỗi phần mở rộng. Lớn nhất một "chiến thắng".

Chúng tôi muốn tránh mở tệp và phân tích cú pháp nội dung của chúng, vì cả hai sẽ làm chậm quá trình ... nhưng đó có thể là phương pháp duy nhất để giải quyết xung đột như phương pháp này.

Vì điều này không chính xác 100%, điều đó dẫn đến một số phải thêm:

Tôi cũng sẽ bỏ phiếu cho một công tắc ghi đè thủ công đơn giản cho các trường hợp đoán sai.


Lưu ý: như Mark Rushakoff đã đề cập trong câu trả lời của mình (được ủng hộ ), việc phỏng đoán trở nên tốt hơn kể từ đó với dự án ngôn ngữ học (nguồn mở từ tháng 6 năm 2011).
Bạn có thể thấy vẫn còn một số vấn đề: Các vấn đề về ngôn ngữ học GitHub .
Xem tại đây để biết thêm chi tiết :

Khi ngôn ngữ đã được phát hiện, nó sẽ được chuyển cho Albino , một trình bao bọc Py mảnh , có chức năng làm nổi bật cú pháp thực tế.

Và bạn có thể thêm chỉ thị ngôn ngữ học trong tệp .gitattributes .


2
Cảm ơn bạn về thông tin. Tôi đoán vẫn không có cách nào để sửa đổi ngôn ngữ theo cách thủ công.
noob

Đây không còn là trường hợp! Các câu trả lời dưới đây liên quan đến nhà ngôn ngữ học gần với dấu hơn. Kiểm tra Kho lưu trữ của tôi bị đánh dấu là ngôn ngữ saiTại sao ngôn ngữ yêu thích của tôi không được công nhận trên help.github.com . Tuyên bố từ chối trách nhiệm: Tôi làm việc trong nhóm hỗ trợ của GitHub.
nuclearsandwich

@nuclearsandwich Tuyệt vời, tôi đã cập nhật câu trả lời, hoàn thành chỉnh sửa của bạn. Lưu ý: Tôi sẽ có mặt tại trụ sở GitHub vào thứ Sáu, ngày 10 tháng 5, gặp gỡ John Greet và các nhân viên hỗ trợ khác :)
VonC

Tôi chỉ muốn nói thêm rằng việc không đánh dấu kho lưu trữ hoặc để người dùng chọn ngôn ngữ chính sẽ thuận tiện hơn là tự động đoán, vì kho lưu trữ github.com/salda/file_scraper của tôi chủ yếu bằng C ++ với một chút C, nhưng được đánh dấu là 70 % Mục tiêu-C.
Lukas Salich


4

Trước tiên, hãy biết rằng bạn có thể ghi đè ngôn ngữ được phát hiện cho các tệp trong kho lưu trữ của mình bằng cách sử dụng ghi đè Linguist .

Tóm lại, bây giờ,

  1. Mỗi kho được gắn thẻ với ngôn ngữ đầu tiên từ thống kê ngôn ngữ .
  2. Thống kê ngôn ngữ đếm tổng kích thước tệp cho mỗi ngôn ngữ lập trình hoặc đánh dấu được phát hiện. Các tệp được cung cấp, tài liệu và được tạo không được tính.
  3. Ngôn ngữ của mỗi tệp được phát hiện bởi dự án nguồn mở Linguist .

Nhà ngôn ngữ học phát hiện ngôn ngữ như thế nào?

Nhà ngôn ngữ học dựa vào các chiến lược sau , theo thứ tự và trả về ngôn ngữ ngay sau khi nó tìm thấy một kết hợp hoàn hảo (chiến lược trả về một ngôn ngữ duy nhất).

  1. Tìm kiếm các mô hình Emacs và Vim .
  2. Tên tệp đã biết. Một số tên tệp được liên kết với các ngôn ngữ cụ thể (nghĩ Makefile).
  3. Tìm kiếm một shebang. Một tệp có #!/bin/bashshebang sẽ được phân loại là Shell.
  4. Phần mở rộng tệp đã biết. Các ngôn ngữ có một tập hợp các phần mở rộng được liên kết với chúng. Tuy nhiên, có rất nhiều mâu thuẫn với chiến lược này. Các kết quả mâu thuẫn (nghĩ rằng C ++, C và Objective-C cho .h) được tinh chỉnh bởi các chiến lược tiếp theo.
  5. Một tập hợp các quy tắc heuristic . Họ thường dựa vào các cụm từ thông dụng đối với nội dung của tệp để thử và xác định ngôn ngữ (ví dụ:^[^#]+:- đối với Prolog ).
  6. Một bộ phân loại Bayes ngây thơ được đào tạo trên các tệp mẫu . Chiến lược cuối cùng, độ chính xác thấp nhất. Bộ phân loại Bayes luôn lấy một tập con các ngôn ngữ làm đầu vào; nó không có nghĩa là để phân loại giữa tất cả các ngôn ngữ. Kết quả phù hợp nhất được bộ phân loại tìm thấy sẽ được trả về.

Các tệp tài liệu và chưa được kiểm duyệt là gì?

Nhà ngôn ngữ học coi một số tệp là được cung cấp , nghĩa là chúng không được đưa vào thống kê ngôn ngữ. Chúng bao gồm các thư viện của bên thứ ba như jQuery và được định nghĩa trong vendor.ymltệp cấu hình. Bạn cũng có thể cung cấp hoặc hủy công bố các tệp trong kho lưu trữ của mình bằng cách sử dụng ghi đè Linguist .

Tương tự, các tệp tài liệu được xác định trong documentation.ymlvà có thể được thay đổi bằng cách sử dụng ghi đè Linguist .

Các tệp đã tạo được phát hiện như thế nào?

Nhà ngôn ngữ học dựa vào các quy tắc đơn giản để phát hiện các tệp được tạo, sử dụng cả đường dẫn và nội dung của tệp. Các tệp đã tạo không được tính trong thống kê ngôn ngữ và không được hiển thị ở dạng khác trên github.com.

Còn về ngôn ngữ lập trình và đánh dấu?

Trong Linguist, mỗi ngôn ngữ được cho một kiểu. Các loại này có thể được tìm thấy trong tệp cấu hình chính , languages.yml. Chỉ các ngôn ngữ lập trình và đánh dấu mới được tính trong thống kê.


0

Sau khi mày mò với một nhà ngôn ngữ học, tôi đã nhận thấy điều này.

Đối với các tệp có Shebang , Shebang được xem xét khi xác định ngôn ngữ nhưng dường như có trọng số đồng đều so với các mã thông báo khác . Đây có vẻ là một lỗi lớn vì Shebang nên xác định rõ ràng ngôn ngữ của tệp.

Điều này có thể gây ra vấn đề với đánh dấu.


Câu trả lời này có một số liên kết bị hỏng. Điều này cũng đúng với câu trả lời này vì nó xuất hiện trên trao đổi ngăn xếp: webapps.stackexchange.com/a/40110 . Thật xấu hổ, vì tôi muốn nhìn vào những liên kết đó!
shmim

-1

Phần mở rộng tệp là điều đầu tiên xuất hiện trong đầu tôi.


Tất nhiên, nhưng ... dự án của tôi chứa cả tệp .js.cctệp, trong số các phần mở rộng khác.
Justin Ethier
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.