⑴ GITHUB有哪些漂亮又實用的android的UI框架
1、volley
項目地址 https:// github.com/smanikandan14/Volley-demo
(1) JSON,圖像等的非同步下載;
(2) 網路請求的排序(scheling)
(3) 網路請求的優先順序處理
(4) 緩存
(5) 多級別取消請求
(6) 和Activity和生命周期的聯動(Activity結束時同時取消所有網路請求)
2、android-async-http
項目地址:https:// github.com/loopj/android-async-http
文檔介紹:http:// loopj.com/android-async-http/
(1) 在匿名回調中處理請求結果
(2) 在UI線程外進行http請求
(3) 文件斷點上傳
(4) 智能重試
(5) 默認gzip壓縮
(6) 支持解析成Json格式
(7) 可將Cookies持久化到SharedPreferences
3、Afinal框架
項目地址:https: //github.com/yangfuhai/afinal
主要有四大模塊:
(1) 資料庫模塊:android中的orm框架,使用了線程池對sqlite進行操作。
(2) 註解模塊:android中的ioc框架,完全註解方式就可以進行UI綁定和事件綁定。無需findViewById和setClickListener等。
(3) 網路模塊:通過httpclient進行封裝http數據請求,支持ajax方式載入,支持下載、上傳文件功能。
(4) 圖片緩存模塊:通過FinalBitmap,imageview載入bitmap的時候無需考慮bitmap載入過程中出現的oom和android容器快速滑動時候出現的圖片錯位等現象。
FinalBitmap可以配置線程載入線程數量,緩存大小,緩存路徑,載入顯示動畫等。FinalBitmap的內存管理使用lru演算法,
沒有使用弱引用(android2.3以後google已經不建議使用弱引用,android2.3後強行回收軟引用和弱引用,詳情查看android官方文檔),
更好的管理bitmap內存。FinalBitmap可以自定義下載器,用來擴展其他協議顯示網路圖片,比如ftp等。同時可以自定義bitmap顯示器,
在imageview顯示圖片的時候播放動畫等(默認是漸變動畫顯示)。
4、xUtils框架
項目地址:https: //github.com/wyouflf/xUtils
主要有四大模塊:
(1) 資料庫模塊:android中的orm框架,一行代碼就可以進行增刪改查;
支持事務,默認關閉;
可通過註解自定義表名,列名,外鍵,唯一性約束,NOT NULL約束,CHECK約束等(需要混淆的時候請註解表名和列名);
支持綁定外鍵,保存實體時外鍵關聯實體自動保存或更新;
自動載入外鍵關聯實體,支持延時載入;
支持鏈式表達查詢,更直觀的查詢語義,參考下面的介紹或sample中的例子。
(2) 註解模塊:android中的ioc框架,完全註解方式就可以進行UI,資源和事件綁定;
新的事件綁定方式,使用混淆工具混淆後仍可正常工作;
目前支持常用的20種事件綁定,參見ViewCommonEventListener類和包com.lidroid.xutils.view.annotation.event。
(3) 網路模塊:支持同步,非同步方式的請求;
支持大文件上傳,上傳大文件不會oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT請求;
下載支持301/302重定向,支持設置是否根據Content-Disposition重命名下載的文件;
返迴文本內容的請求(默認只啟用了GET請求)支持緩存,可設置默認過期時間和針對當前請求的過期時間。
(4) 圖片緩存模塊:載入bitmap的時候無需考慮bitmap載入過程中出現的oom和android容器快速滑動時候出現的圖片錯位等現象;
支持載入網路圖片和本地圖片;
內存管理使用lru演算法,更好的管理bitmap內存;
可配置線程載入線程數量,緩存大小,緩存路徑,載入顯示動畫等...
5、ThinkAndroid
項目地址:https: //github.com/white-cat/ThinkAndroid
主要有以下模塊:
(1) MVC模塊:實現視圖與模型的分離。
(2) ioc模塊:android中的ioc模塊,完全註解方式就可以進行UI綁定、res中的資源的讀取、以及對象的初始化。
(3) 資料庫模塊:android中的orm框架,使用了線程池對sqlite進行操作。
(4) http模塊:通過httpclient進行封裝http數據請求,支持非同步及同步方式載入。
(5) 緩存模塊:通過簡單的配置及設計可以很好的實現緩存,對緩存可以隨意的配置
(6) 圖片緩存模塊:imageview載入圖片的時候無需考慮圖片載入過程中出現的oom和android容器快速滑動時候出現的圖片錯位等現象。
(7) 配置器模塊:可以對簡易的實現配對配置的操作,目前配置文件可以支持Preference、Properties對配置進行存取。
(8) 日誌列印模塊:可以較快的輕易的是實現日誌列印,支持日誌列印的擴展,目前支持對sdcard寫入本地列印、以及控制台列印
(9) 下載器模塊:可以簡單的實現多線程下載、後台下載、斷點續傳、對下載進行控制、如開始、暫停、刪除等等。
(10) 網路狀態檢測模塊:當網路狀態改變時,對其進行檢
6、LoonAndroid
項目地址:https:// github.com/gdpancheng/LoonAndroid
主要有以下模塊:
(1) 自動注入框架(只需要繼承框架內的application既可)
(2) 圖片載入框架(多重緩存,自動回收,最大限度保證內存的安全性)
(3) 網路請求模塊(繼承了基本上現在所有的http請求)
(4) eventbus(集成一個開源的框架)
(5) 驗證框架(集成開源框架)
(6) json解析(支持解析成集合或者對象)
(7) 資料庫(不知道是哪位寫的 忘記了)
(8) 多線程斷點下載(自動判斷是否支持多線程,判斷是否是重定向)
(9) 自動更新模塊
(10) 一系列工具類
其中的 volley ,13 年有研究過,擴展性非常好,個人比較喜歡的風格。其他如 android-async-http、Afinal 也相當不錯。
⑵ T9撥號盤搜索和排序演算法
今日頭條為何能突破bat的壁壘,很大程度在於它精確的推薦演算法, 能夠根據用戶的喜愛推薦適合用戶的資訊,不斷根據用戶的瀏覽記錄構建用戶的偏好生態圈,進而精準投放流量。
大家平常撥打電話應該都有用T9撥號盤吧,輸入幾個數字後一般會把當前通訊錄匹配中的聯系人顯示出來並高亮顯示命中的字元,根據輸入的數字串顯示哪些聯系人數據以及這些聯系人數據如果排序顯得十分重要,站在用戶角度,盡可能的少輸入數字並能把用戶想撥打的聯系人優先顯示到前列,這裡面涉及的演算法就尤為重要了,在此感謝產品mm對權重分配的打磨。
拿名字曾軼可 撥號盤輸入95舉例,注意曾是多音字
聯系人SimpleContact
拼音PinYin
以首字母-全拼-號碼依次優先順序匹配:
高亮規則
不管是首字母、全拼還是號碼匹配,都必須是連續的,命中首字母則對應的漢字高亮,匹配到幾個則幾個高亮。
整體的排序優先順序是根據各項影響因子來累積權值,根據最終權重大小排個高低。
影響因子有:
詳細演算法和各因子權值公式
根據權值分配的不同可實現不同的產品場景
1. 完全匹配
完全匹配的搜索結果一定高於非完全匹配的搜索結果。通話記錄、名字高亮數量、字母順序等,都不能使得非完全匹配的結果高於完全匹配結果。
在輸入同樣數字,符合完全匹配的情況下:首字母完全匹配>拼音完全匹配>號碼完全匹配。
同是完全匹配情況下,則按照以下邏輯進行排序。
如數字426,對應源數據「黃安墨」(首字母完全匹配)、「漢」(拼音完全匹配)、426(號碼完全匹配),默認排序位置:黃安墨>漢>426(號碼),在無通話記錄影響下,黃安墨(10000+20+0.5*3)>漢(10000+15+0.5)>426(10000+10)。
首字母完全匹配、拼音完全匹配、號碼完全匹配,其中一個類型只要擁有通話記錄,則一定會超越剩下兩種無通話記錄的類型。其餘影響因素如首字母匹配數量、字母系數等,都無法幫助其超越。
如「漢」擁有了一條呼出記錄,則漢分值調整為(10000+15+100+15+0.5),最新排名調整為漢>黃安墨>426。
在同樣都擁有相同數量的通話記錄情況下,首字母完全匹配+呼出/呼入1條>拼音完全匹配+呼出/呼入1條>號碼完全匹配+呼入/呼出1條。
如黃安墨呼入1條分值為(10000+20+100+10 1+0.5 3)、漢呼出1條(10000+15+100+15*1+0.5)。則排名為黃安墨>漢。
如數字482,對應源數據「胡啊」(拼音完全匹配)、「花」(拼音完全匹配)、482(號碼完全匹配),默認排序位置:胡啊>花>482。
計算其首字母匹配數量,胡啊命中2個首字母;花僅命中名字的一個首字母;482手機號碼則不命中首字母數量,得分排名為胡啊(10000+15+2*0.5)>花(10000+15+0.5)>482(10000+10=10010)
首字母系數數值,在無通話記錄影響、無首字母匹配數量、無完全匹配類型(拼音完全匹配&姓名完全匹配&號碼完全匹配)影響,其數值表現比較明顯。
如輸入「45」,對應源數據「胡凱」和「郭磊」,均屬於首字母完全匹配。由於胡凱的「胡」占數字鍵盤4的第二位,郭磊的「郭」占數字鍵盤4的第一位,在字母系數權重處,郭磊比胡凱會多兩分。且由於其餘影響因素數值相同,則排位為郭磊>胡凱。
首字母匹配數量數值要低於字母順序。如輸入「482」,對應源數據「胡啊」「瓜」,則胡啊分數為10000+15+0.5×2=10016,瓜分數10000+15+0.5×1+2(G比H多2)=10018,則排名為瓜>胡啊。
2. 非完全匹配
完全匹配的搜索結果一定高於非完全匹配的搜索結果。通話記錄、首字母匹配數量、字母順序數值累加,都不能使得非完全匹配的結果高於完全匹配結果。
非完全匹配情況下,默認姓名非完全匹配的初始值(600分)要大於號碼的非完全匹配。即無論「號碼非完全匹配」的其他因子權重如何相加,都無法超越「姓名非完全匹配。」
若用戶以數字作為姓名,純數字姓名,則以首字母匹配進行搜索;若是漢字+數字,則根據用戶輸入的撥號盤數字,對應的是拼音搜索還是首字母搜索,來加對應分值。如源數據「盈盈23」,若用戶輸入992,則屬於首字母不完全匹配搜索,若用戶輸入「946494642」則屬於拼音不完全匹配搜索。
在無通話記錄影響情況下,輸入同樣數字,數字命中源數據位置1、2位分值,影響其排序。如輸入數字「99」,對應源數據「郭盈盈」、「盈盈家」,由於第1個數字9命中郭盈盈名字的第二個首字母,命中「盈盈家」名字的第一個首字母,郭盈盈得分(600+15+20=635),盈盈家得分(600+65+20=685)。則排名「盈盈家」>「郭盈盈」。
在同等源數據位置情況下,首字母非完全匹配、拼音非完全匹配,其中一個類型只要擁有通話記錄,則一定會超越剩下剩下無通話記錄的類型。其餘影響因素如首字母匹配數量、字母系數等,都無法幫助其超越。
如數字26,對應源數據「阿寧家」(首字母非完全匹配)、「安家樂」(拼音非完全匹配),則「阿寧家」得分(600+65+20+0.5 2);」安家樂」得分(600+65+15++0.7+0.5 1)。
在同等源數據位置情況下,在同樣都擁有相同數量的通話記錄情況下,首字母非完全匹配+呼出/呼入n條>拼音非完全匹配+呼出/呼入n條。
在不同源數據位置情況下,首字母非完全匹配、拼音非完全匹配,則一定會超越剩下無通話記錄的類型。其餘影響因素如首字母匹配數量、字母系數等,都無法幫助其超越。
在不同源數據位置且都擁有通話記錄的情況下,屬於命中源數據位置後幾位的源數據,需要比前面位置的源數據,多幾條通話記錄才能超越前面位置的源數據位置。
如99對應源數據「郭盈盈」「盈盈家」。若「盈盈家」呼出1條,「郭盈盈」呼出5條,則「盈盈家」得分(600+65+20+100+15 1+0.5 2);郭盈盈得分(600+15+20+100+15 5+0.5 2),此時排名順序:郭盈盈>盈盈家。
拼音非完全匹配的字元長度,只有在其他因素不變的情況下,數值變化比較明顯。
如4對應源數據「個殺個腳後跟」,「郭燒開後風給好得更快了」。則在其他數值相同的情況下,由於前者名稱更短,則前者排名更高。
首字母匹配數量,在無匹配命中源數據位置,無通話記錄影響,無字母系數,無完全匹配類型(拼音完全匹配&姓名完全匹配&號碼完全匹配)等因素影響,其數值表現比較明顯。
如數字482,對應源數據「胡啊美」(拼音不完全匹配)、「花朵兒」(拼音不完全匹配)、4820(號碼不完全匹配)。則胡啊美的分值(600+65+15+0.7+0.5 2),花朵兒分值(600+65+15+0.7+0.5 1),4820(20+10分)。排名為:胡啊美>花朵兒>4820
首字母系數數值,在無通話記錄影響、無首字母匹配數量、無完全匹配類型(拼音
完全匹配&姓名完全匹配&號碼完全匹配)影響,其數值表現比較明顯。
如輸入「45」,對應源數據「胡凱和」和「郭磊和」,均屬於首字母非完全匹配。由於胡
和的「胡」占數字鍵盤4的第二位,郭磊和的「郭」占數字鍵盤4的第一位,在字母系數權重處,郭磊和比胡凱和會多兩分。且由於其餘影響因素數值相同,則排位為郭磊和>胡凱和。
首字母匹配數量數值要低於字母順序。
如輸入「45」,對應源數據「郭梅和」「胡磊和」,由於同在數字鍵盤4的G比H多2分,而郭梅和僅命中1個首字母,胡磊和命中2個首字母,則郭梅和分數為600+65+20+0.5×1+2(G比H多2),胡磊和分數為600+65+20+0.5×2,則排名為郭梅和>胡磊。
話不多說,直接上工程,包括T9搜索和排序相關的實體和操作類以及一個簡陋的界面。
工程鏈接:
https://github.com/tslearner/T9demo
⑶ python爬蟲學習筆記——5. jieba庫中文分詞用法
整理自< 結巴中文分詞的用法>
特點
演示文檔
安裝說明 代碼對 Python 2/3 均兼容
演算法
主要功能
1. jieba 分詞有三種模式,並且支持新建自定義分詞器
代碼示例
輸出:
2. 添加自定義詞典
載入詞典
範例: 自定義詞典: https://github.com/fxsjy/jieba/blob/master/test/userdict.txt 用法示例: https://github.com/fxsjy/jieba/blob/master/test/test_userdict.py
調整詞典
代碼示例:
3. 關鍵詞提取
基於 TF-IDF 演算法的關鍵詞抽取
import jieba.analyse
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
sentence 為待提取的文本
topK 為返回幾個 TF/IDF 權重最大的關鍵詞,默認值為 20
withWeight 為是否一並返回關鍵詞權重值,默認值為 False
allowPOS 僅包括指定詞性的詞,默認值為空,即不篩選
分詞詞性可參見博客:[詞性參考]( blog.csdn.net/HHTNAN/ar...)
jieba.analyse.TFIDF(idf_path=None)
新建 TFIDF 實例,idf_path 為 IDF 頻率文件
代碼示例 (關鍵詞提取) https://github.com/fxsjy/jieba/blob/master/test/extract_tags.py
關鍵詞提取所使用逆向文件頻率(IDF)文本語料庫可以切換成自定義語料庫的路徑
用法: jieba.analyse.set_idf_path(file_name)
# file_name為自定義語料庫的路徑
自定義語料庫示例: github.com/fxsjy/jieba/...
用法示例: github.com/fxsjy/jieba/...
關鍵詞提取所使用停止詞(Stop Words)文本語料庫可以切換成自定義語料庫的路徑
用法: jieba.analyse.set_stop_words(file_name)
# file_name為自定義語料庫的路徑
自定義語料庫示例: github.com/fxsjy/jieba/...
用法示例: github.com/fxsjy/jieba/...
關鍵詞一並返回關鍵詞權重值示例
用法示例: ttps://github.com/fxsjy/jieba/blob/master/test/extract_tags_with_weight.py
基於 TextRank 演算法的關鍵詞抽取
jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))
直接使用,介面相同,注意默認過濾詞性。
jieba.analyse.TextRank()
新建自定義 TextRank 實例
演算法論文: TextRank: Bringing Order into Texts
基本思想:
使用示例: 見 test/demo.py
4. 詞性標注
5. 並行分詞
6. Tokenize:返回詞語在原文的起止位置
輸出:
輸出
7. ChineseAnalyzer for Whoosh 搜索引擎
8. 命令行分詞
使用示例:python -m jieba news.txt > cut_result.txt
命令行選項(翻譯):
延遲載入機制 jieba 採用延遲載入,import jieba 和 jieba.Tokenizer()不會立即觸發詞典的載入,一旦有必要才開始載入詞典構建前綴字典。
如果你想手工初始 jieba,也可以手動初始化。
下面部分內容整理自< python jieba分詞(結巴分詞)、提取詞,載入詞,修改詞頻,定義詞庫>
二、 常用NLP擴充知識點(python2.7)
這幾個點在知乎爬蟲程序中很有用處
Part 1. 詞頻統計、降序排序
Part 2. 人工去停用詞
標點符號、虛詞、連詞不在統計范圍內
Part 3. 合並同義詞
將同義詞列舉出來,按下Tab鍵分隔,把第一個詞作為需要顯示的詞語,後面的詞語作為要替代的同義詞,一系列同義詞放在一行。
這里,「北京」、「首都」、「京城」、「北平城」、「故都」為同義詞。
Part 4. 詞語提及率
主要步驟:分詞——過濾停用詞(略)——替代同義詞——計算詞語在文本中出現的概率。
Part 5. 按詞性提取