- language-detection 20161123.1013(in MELPA)
- Automatic language detection from code snippets
概要
language-detection.elは、バッファや文字列の内容から
プログラミング言語を判定するライブラリです。
M-x language-detection-bufferはカレントバッファの言語を判定し、
エコーエリアに出力します。
内部では language-detection-string 関数が使われており、
文字列のトークンのパターンからプログラミング言語を判定します。
さすがにすべてをEmacs Lispで処理するのは荷が重いです。
そこで、 scikit-learn という ランダムフォレスト による
機械学習Pythonライブラリによって
巨大な学習データとEmacs Lispコードが作成されています。
MELPAでインストールされる段階ではすでにデータが作成されていますので、
実行時には外部プログラムに依存しません。
Emacs Lisp側では正規表現によるトークン作りと
ハッシュテーブルと配列によるアクセスだけですので
実用的な速度で動作します。
言語判定はlanguage-detection.elだけでなく、
Highlight.js や Pygments や SourceClassifier がありますが、
language-detection.elはそれらすべてを上回る精度(73%〜87%)です。
判定のために使われた情報源は
です。
インストール
パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。
(package-initialize) (setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/") ("melpa" . "http://melpa.org/packages/") ("org" . "http://orgmode.org/elpa/")))
初めてlanguage-detectionを使う方は
以下のコマンドを実行します。
M-x package-install language-detection
アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。
M-x package-install package-utils (初めてアップグレードする場合のみ) M-x package-utils-upgrade-by-name language-detection
判定例
Fig1: twittering-mode.elは正しくemacslispと言ってくれる
Fig2: sourceclassifier_test.rbも正しい
Fig3: Common LispやSchemeはlispと判定する
Fig4: language-detection.elは後半に巨大な配列があるせいかR言語と誤認してしまう(笑)
対応言語
- ada
- awk
- c
- clojure
- cpp
- csharp
- css
- dart
- delphi
- emacslisp
- erlang
- fortran
- fsharp
- go
- groovy
- haskell
- html
- java
- javascript
- json
- latex
- lisp
- lua
- matlab
- objc
- perl
- php
- prolog
- python
- r
- ruby
- rust
- scala
- shell
- smalltalk
- sql
- swift
- visualbasic
- xml
参考サイト
本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。