⑴ 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. 按词性提取