Suche senden
Hochladen
Douban linguist
•
9 gefällt mir
•
8,639 views
li luo
Folgen
Douban Linguist
Weniger lesen
Mehr lesen
Melden
Teilen
Melden
Teilen
1 von 52
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
Code & Beer Opening
Code & Beer Opening
Wei-Ning Huang
reveal.js 3.0.0
reveal.js 3.0.0
Hakim El Hattab
Twitter 與 ELK 基本使用
Twitter 與 ELK 基本使用
Mark Dai
20160420 - git intro
20160420 - git intro
Jamie (Taka) Wang
Python in word cloud
Python in word cloud
FEG
Github简介及实用入门
Github简介及实用入门
Rongxing Liu
Github簡介
Github簡介
Radian Jheng
Android 程式設計(4)
Android 程式設計(4)
Roy Wang
Empfohlen
Code & Beer Opening
Code & Beer Opening
Wei-Ning Huang
reveal.js 3.0.0
reveal.js 3.0.0
Hakim El Hattab
Twitter 與 ELK 基本使用
Twitter 與 ELK 基本使用
Mark Dai
20160420 - git intro
20160420 - git intro
Jamie (Taka) Wang
Python in word cloud
Python in word cloud
FEG
Github简介及实用入门
Github简介及实用入门
Rongxing Liu
Github簡介
Github簡介
Radian Jheng
Android 程式設計(4)
Android 程式設計(4)
Roy Wang
重整工具箱-从开源软件到开放服务
重整工具箱-从开源软件到开放服务
LI Daobing
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
Wei-Yuan Chang
Linux必备知识与Unix基础文化
Linux必备知识与Unix基础文化
Dahui Feng
Mercurial簡介與教學
Mercurial簡介與教學
芳本 林
如何,高效利用搜索引擎+构建网络工具箱
如何,高效利用搜索引擎+构建网络工具箱
84zhu
Git介绍
Git介绍
yiming he
Big Data Taiwan 2014 Track1-3: Big Data, Big Challenge — Splunk 幫你解決 Big Data...
Big Data Taiwan 2014 Track1-3: Big Data, Big Challenge — Splunk 幫你解決 Big Data...
Etu Solution
2012,我的技术之选
2012,我的技术之选
勇浩 赖
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
Wen-Tien Chang
Go 語言基礎簡介
Go 語言基礎簡介
Bo-Yi Wu
香港中文開源軟件翻譯
香港中文開源軟件翻譯
Sammy Fung
從doc、docx、odt到Google Docs
從doc、docx、odt到Google Docs
imacat .
Git與source tree 基礎教學
Git與source tree 基礎教學
Duncan Chen
為自己學 Git
為自己學 Git
昀 李
CocoaPods private repo
CocoaPods private repo
Weizhong Yang
Weitere ähnliche Inhalte
Ähnlich wie Douban linguist
重整工具箱-从开源软件到开放服务
重整工具箱-从开源软件到开放服务
LI Daobing
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
Wei-Yuan Chang
Linux必备知识与Unix基础文化
Linux必备知识与Unix基础文化
Dahui Feng
Mercurial簡介與教學
Mercurial簡介與教學
芳本 林
如何,高效利用搜索引擎+构建网络工具箱
如何,高效利用搜索引擎+构建网络工具箱
84zhu
Git介绍
Git介绍
yiming he
Big Data Taiwan 2014 Track1-3: Big Data, Big Challenge — Splunk 幫你解決 Big Data...
Big Data Taiwan 2014 Track1-3: Big Data, Big Challenge — Splunk 幫你解決 Big Data...
Etu Solution
2012,我的技术之选
2012,我的技术之选
勇浩 赖
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
Wen-Tien Chang
Go 語言基礎簡介
Go 語言基礎簡介
Bo-Yi Wu
香港中文開源軟件翻譯
香港中文開源軟件翻譯
Sammy Fung
從doc、docx、odt到Google Docs
從doc、docx、odt到Google Docs
imacat .
Git與source tree 基礎教學
Git與source tree 基礎教學
Duncan Chen
為自己學 Git
為自己學 Git
昀 李
CocoaPods private repo
CocoaPods private repo
Weizhong Yang
Ähnlich wie Douban linguist
(15)
重整工具箱-从开源软件到开放服务
重整工具箱-从开源软件到开放服务
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
Linux必备知识与Unix基础文化
Linux必备知识与Unix基础文化
Mercurial簡介與教學
Mercurial簡介與教學
如何,高效利用搜索引擎+构建网络工具箱
如何,高效利用搜索引擎+构建网络工具箱
Git介绍
Git介绍
Big Data Taiwan 2014 Track1-3: Big Data, Big Challenge — Splunk 幫你解決 Big Data...
Big Data Taiwan 2014 Track1-3: Big Data, Big Challenge — Splunk 幫你解決 Big Data...
2012,我的技术之选
2012,我的技术之选
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
Go 語言基礎簡介
Go 語言基礎簡介
香港中文開源軟件翻譯
香港中文開源軟件翻譯
從doc、docx、odt到Google Docs
從doc、docx、odt到Google Docs
Git與source tree 基礎教學
Git與source tree 基礎教學
為自己學 Git
為自己學 Git
CocoaPods private repo
CocoaPods private repo
Douban linguist
1.
Douban-Linguist by liluo
2.
关于我 • liluo@github • liluoliluo@douban •
liluoliluo@twitter
3.
Linguist 是什么?
4.
从视觉上看是这样的 Github 现在的版本 Github 之前的版本
(⺫⽬目前⾖豆瓣在⽤用)
5.
Douban-linguist 是这样描述的
6.
Github-linguist README
7.
Linguist 可以做什么 • 编程语⾔言检测 •
语法⾼高亮 • 代码仓库编程语⾔言统计 • • 统计时忽略通⽤用第三⽅方库特定⺫⽬目录代码 检测是否⽣生成⽂文件
8.
Linguist 是如何检测语⾔言的?
9.
当输⼊入路径是⺫⽬目录时 • • 遍历⺫⽬目录下所有⽂文件 • 对余下的⽂文件进⾏行分析并汇总 忽略以 . 开头的⺫⽬目录,
忽略⼆二进制⽂文件/⽣生成⽂文件(如 coffeescript ⽣生成的 js)/压缩⽂文件(如 jquery.min.js)/通⽤用的第三⽅方类库(如 bootstrap) 当输⼊入路径是⽂文件时 • • • • 根据⽂文件扩展名查找(数据源⾃自samples.json, languages.yml) 未匹配到时返回空(None) 匹配到⼀一个结果时将其返回 匹配到多个结果时分析⽂文件内容
10.
分析内容 算法: statistical classifier • • (之前⽂文档中写的是
Bayesian classifier) 使⽤用 Tokenizer 将内容转为 tokens 拿 tokens 分别与所有(根据扩展名)匹配到的编程语⾔言的 Tokens 进⾏行⽐比 较, 将概率最⼤大编程语⾔言判定为结果
11.
编程语⾔言的 Tokens 根据 samples/
⺫⽬目录下的⽂文件统计(训练) 得来的
12.
languages.yml & samples.json
13.
Douban-Linguist
14.
因为 Code 2012年5⽉月 ! @huanghuang: ! 我们需要两个库
grit 和 linguist
15.
然后...
16.
断篇了.
17.
时光荏苒, 莺⻜飞草⻓长 到了 2013年01⽉月
18.
准备⼯工作
19.
计划时对依赖处理是这样想的 Ruby Python 替代 # pygments.rb pygments ! 前者是后者的 Ruby
封装实现 mime-types mimetypes Python 内置 escap_utils urllib 毫⽆无鸭梨 charlock_holmes ? 先⾛走着
20.
开始动⼿手 • git init •
cp blabla • added blabla • unittest blabla
21.
Code 来需求了!!! 判断是否⽣生成⽂文件 • • 移动组: PR
diff 中不需要显⽰示 .pbxproj, .mobileprovision 前端组: 统计时不计⼊入压缩版本以及 coffeescript ⽣生成⽂文件
22.
先把这个弄了给它⽤用
23.
继续~
24.
遭遇 CharlockHolmes
25.
• 尝试过 Chardet,
但是只能检测编码 • 尝试过 mimetypes.guess_type(file) 检测 是否⼆二进制⽂文件, 不靠谱!!! • 还尝试过下⾯面这样:
26.
好像是能解决? 但是好纠结... 要是有 ICU 的
Python 实现就美好了... 可是不会写 C 扩展 > . < 求给⼒力, 求 +1
27.
@XTao 来了!!!
28.
发布第⼀一个版本 v0.0.1
29.
Python mimetypes 怪怪的 此恨绵绵⽆无绝期...
30.
移植⼀一个 Python 版本吧
31.
Github custom lexers(pygments.rb)
32.
写个 Pygments 插件
33.
某天发现性能好差!!! • ⽐比 Github-linguist
慢了 2~4 倍多 (不太记 得具体数据了) • 跑 unittest 要 20s 左右
34.
捉⿁鬼(1)
35.
捉⿁鬼(2)
36.
捉⿁鬼(3)
37.
捉⿁鬼(4)
38.
捉⿁鬼(5) • 和 @xtao
讨论是 Python 正则性能问题 • 需要⼀一个⾼高性能的 Python 版本的 StringScanner
39.
于是, 有了 scanner Like
不只是说说, 正则引擎使⽤用 oniguruma. (Ruby 正则引擎就是它)
40.
Scanner 带来的性能提升 github-linguist 与使⽤用
Scanner 后的douban-linguist 对⽐比 Travis-ci 中使⽤用 Scanner 前后对⽐比 注: 减少的 22 个 test case ⻅见 https://github.com/douban/linguist/blob/eba200742c9f7ebd433b7aa73774381b80ddb0fa/tests/test_strscan.py
41.
感谢 Scanner 的作者 赞美
Code Team, @XTao!!!
42.
发布版本 v0.1.0
43.
⻢马上就讲完了, 别捉鸡...
44.
Douban-linguist 最新进展 在等 Pygments
release 新版本
45.
与 Github-linguist 作者 •
Drinkup • Pull Request
46.
2013 Drinkup@北京 • 咨询
Linguist 与 Github 交互实现 PUSH > HOOK > QUEUE > (PULL) > CALCULATE > CALLBACK ! ! • 问我 Python 版有没⽐比 Ruby 快 ! • 告诉他提了个 pull request
47.
提 Pull Request
(1) Drinkup 当天晚上被 merge
48.
提 Pull Request
(2)
49.
提 Pull Request
(3)
50.
就是这样了.
51.
相关链接 • • • • • • https://github.com/douban/linguist https://github.com/douban/PyCharlockHolmes https://github.com/liluo/mime https://github.com/liluo/pygments-github-lexers https://github.com/cuteio/scanner https://github.com/github/linguist
52.
End.
Jetzt herunterladen