首页 文章 精选 留言 我的

精选列表

搜索[语言切换],共10000篇文章
优秀的个人博客,低调大师

浅谈 Spark 的多语言支持

作者:郑锴,花名铁杰,阿里巴巴高级技术专家,Apache Hadoop PMC,Apache Kerby 创立者。深耕分布式系统开发和开源大数据多年,先后专注在安全,存储和计算领域。之前在 Intel,目前转战阿里云上,致力于提供更好用更有弹性的 Hadoop/Spark 大数据平台。 Spark 设计上的优秀无容置疑,甫一出道便抢了 Hadoop 的 C 位,在开源大数据的黄金十年里一时风头无两,在人工智能时代的当下仍然能够与时俱进,不可谓不牛逼。架构和设计上的卓越,不遑多言,美中不足之处自然也有不少,比如调度模型跟 MapReduce 这种计算范式过于耦合,Spark 最近引入 Barrier 调度模式就是为了支持深度学习这种新的计算类型,所幸在于对框架的改动不会伤经动骨。有些缺陷则不然,影响全局,调整起来绝非易事。这儿我主要想

优秀的个人博客,低调大师

自然语言处理hanlp的入门基础

此文整理的基础是建立在hanlp较早版本的基础上的,虽然hanlp的最新1.7版本已经发布,但对于入门来说差别不大!分享一篇比较早的“旧文”给需要的朋友! 安装HanLP HanLP将数据与程序分离,给予用户自定义的自由。 HanLP由三部分组成:HanLP = .jar + data + .properties ,请前往 项目主页 下载这三个部分。 1、下载jar 放入classpath并添加依赖。 2、下载数据集 HanLP 中的数据分为 词典 和 模型 ,其中 词典 是词法分析必需的, 模型 是句法分析必需的,data目录结构如下: data │ ├─dictionary └─model 用户可以自行增删替换,如果不需要句法分析功能的话,随时可以删除model文件夹。 可选数据集 3、配置文件 示例配置文件: #本配置文件中的路径的根目录,根目录+其他路径=绝对路径 #Windows用户请注意,路径分隔符统一使用/ root=E:/JavaProjects/HanLP/ #核心词典路径 CoreDictionaryPath=data/dictionary/CoreNatureDictionary.txt #2元语法词典路径 BiGramDictionaryPath=data/dictionary/CoreNatureDictionary.ngram.txt #停用词词典路径 CoreStopWordDictionaryPath=data/dictionary/stopwords.txt #同义词词典路径 CoreSynonymDictionaryDictionaryPath=data/dictionary/synonym/CoreSynonym.txt #人名词典路径 PersonDictionaryPath=data/dictionary/person/nr.txt #人名词典转移矩阵路径 PersonDictionaryTrPath=data/dictionary/person/nr.tr.txt #繁简词典路径 TraditionalChineseDictionaryPath=data/dictionary/tc/TraditionalChinese.txt #自定义词典路径,用;隔开多个自定义词典,空格开头表示在同一个目录,使用“文件名 词性”形式则表示这个词典的词性默认是该词性。优先级递减。 #另外data/dictionary/custom/CustomDictionary.txt是个高质量的词库,请不要删除 CustomDictionaryPath=data/dictionary/custom/CustomDictionary.txt; 现代汉语补充词库.txt; 全国地名大全.txt ns; 人名词典.txt; 机构名词典.txt; 上海地名.txt ns;data/dictionary/person/nrf.txt nrf 配置文件的作用是告诉HanLP数据包的位置,只需修改第一行 root=usr/home/HanLP/ 为data的 父目录 即可,比如data目录是 /Users/hankcs/Documents/data ,那么 root=/Users/hankcs/Documents/ 。 l 如果选用mini数据包的话,则需要修改配置文件: CoreDictionaryPath=data/dictionary/CoreNatureDictionary.mini.txt BiGramDictionaryPath=data/dictionary/CoreNatureDictionary.ngram.mini.txt 最后将HanLP.properties放入classpath即可: 对于Eclipse来讲 project/bin 对于IntelliJ IDEA来讲 project/target/classes 或者 project/out/production/project Web项目的话可以放在如下位置: Webapp/WEB-INF/lib Webapp/WEB-INF/classes Appserver/lib JRE/lib 快速上手 HanLP 几乎所有的功能都可以通过工具类 HanLP 快捷调用,当你想不起来调用方法时,只需键入 HanLP. ,IDE应当会给出提示,并展示HanLP完善的文档。 推荐用户始终通过工具类 HanLP 调用,这么做的好处是,将来 HanLP 升级后,用户无需修改调用代码。 所有Demo都位于 com.hankcs.demo 下。 第一个Demo: System.out.println(HanLP.segment("你好,欢迎使用HanLP!")); l 内存要求 1.HanLP 对词典的数据结构进行了长期的优化,可以应对绝大多数场景。哪怕 HanLP 的词典上百兆也无需担心,因为在内存中被精心压缩过。 2.如果内存非常有限,请使用小词典。 HanLP 默认使用大词典,同时提供小词典,请参考配置文件章节。 3.在一些句法分析场景中,需要加载几百兆的模型。如果发生 java.lang.OutOfMemoryError ,则建议使用JVM option -Xms1g -Xmx1g -Xmn512m。 l 写给正在编译 HanLP 的开发者 1.如果你正在编译运行从Github检出的 HanLP 代码,并且没有下载data,那么首次加载词典/模型会发生一个 自动缓存 的过程。 2.自动缓存 的目的是为了加速词典载入速度,在下次载入时,缓存的词典文件会带来毫秒级的加载速度。由于词典体积很大, 自动缓存 会耗费一些时间,请耐心等待。 3.自动缓存 缓存的不是明文词典,而是双数组Trie树、DAWG、AhoCorasickDoubleArrayTrie等数据结构。 如果一切正常,您会得到类似于如下的输出: [你好/vl, ,/w, 欢迎/v, 使用/v, HanLP/nx, !/w] 如果出现了问题,一般是由路径配置不对而引发的,请根据控制台输出的警告调整。比如: 核心词典 /Users/hankcs/JavaProjects/HanLP/data/data/dictionary/CoreNatureDictionary.txt加载失败 说明HanLP.properties中的root项配置不对,应当去掉后缀 data/,改为: root=/Users/hankcs/JavaProjects/HanLP/

优秀的个人博客,低调大师

符合语言习惯的 Python 优雅编程技巧

Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净、整洁、一目了然。要写出 Pythonic(优雅的、地道的、整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优秀的源代码值得阅读,比如:requests、flask、tornado,下面列举一些常见的Pythonic写法。 0. 程序必须先让人读懂,然后才能让计算机执行。 “Programs must be written for people to read, and only incidentally for machines to execute.” 1. 交换赋值 ##不推荐 temp = a a = b b = a ##推荐 a, b = b, a # 先生成一个元组(tuple)对象,然后unpack 2. Unpacking ##不推荐 l = ['David', 'Pythonista', '+1-514-555-1234'] first_name = l[0] last_name = l[1] phone_number = l[2] ##推荐 l = ['David', 'Pythonista', '+1-514-555-1234'] first_name, last_name, phone_number = l# Python 3 Only first, *middle, last = another_list 3. 使用操作符in ##不推荐if fruit == "apple" or fruit == "orange" or fruit == "berry":# 多次判断 ##推荐if fruit in ["apple", "orange", "berry"]:# 使用 in 更加简洁 4. 字符串操作 ##不推荐 colors = ['red', 'blue', 'green', 'yellow'] result = ''for s in colors: result += s # 每次赋值都丢弃以前的字符串对象, 生成一个新对象 ##推荐 colors = ['red', 'blue', 'green', 'yellow'] result = ''.join(colors) # 没有额外的内存分配 5. 字典键值列表 ##不推荐for key in my_dict.keys():# my_dict[key] ... ##推荐for key in my_dict:# my_dict[key] ...# 只有当循环中需要更改key值的情况下,我们需要使用 my_dict.keys()# 生成静态的键值列表。 6. 字典键值判断 ##不推荐if my_dict.has_key(key):# ...do something with d[key] ##推荐if key in my_dict:# ...do something with d[key] 7. 字典 get 和 setdefault 方法 ##不推荐 navs = {}for (portfolio, equity, position) in data:if portfolio not in navs: navs[portfolio] = 0 navs[portfolio] += position * prices[equity]##推荐 navs = {}for (portfolio, equity, position) in data:# 使用 get 方法 navs[portfolio] = navs.get(portfolio, 0) + position * prices[equity]# 或者使用 setdefault 方法 navs.setdefault(portfolio, 0) navs[portfolio] += position * prices[equity] 8. 判断真伪 ##不推荐if x == True:# ....if len(items) != 0:# ...if items != []:# ... ##推荐if x:# ....if items:# ... 9. 遍历列表以及索引 ##不推荐 items = 'zero one two three'.split()# method 1 i = 0for item in items:print i, item i += 1# method 2for i in range(len(items)):print i, items[i]##推荐 items = 'zero one two three'.split()for i, item in enumerate(items):print i, item 10. 列表推导 ##不推荐 new_list = []for item in a_list:if condition(item): new_list.append(fn(item)) ##推荐 new_list = [fn(item) for item in a_list if condition(item)] 11. 列表推导-嵌套 ##不推荐for sub_list in nested_list:if list_condition(sub_list):for item in sub_list:if item_condition(item):# do something... ##推荐 gen = (item for sl in nested_list if list_condition(sl) \for item in sl if item_condition(item))for item in gen:# do something... 12. 循环嵌套 ##不推荐for x in x_list:for y in y_list:for z in z_list:# do something for x & y ##推荐from itertools import productfor x, y, z in product(x_list, y_list, z_list):# do something for x, y, z 13. 尽量使用生成器代替列表 ##不推荐def my_range(n): i = 0 result = []while i < n: result.append(fn(i)) i += 1return result # 返回列表##推荐def my_range(n): i = 0 result = []while i < n:yield fn(i) # 使用生成器代替列表 i += 1 *尽量用生成器代替列表,除非必须用到列表特有的函数。 14. 中间结果尽量使用imap/ifilter代替map/filter ##不推荐 reduce(rf, filter(ff, map(mf, a_list)))##推荐from itertools import ifilter, imap reduce(rf, ifilter(ff, imap(mf, a_list))) *lazy evaluation 会带来更高的内存使用效率,特别是当处理大数据操作的时候。 15. 使用any/all函数 ##不推荐 found = Falsefor item in a_list:if condition(item): found = Truebreakif found:# do something if found... ##推荐if any(condition(item) for item in a_list):# do something if found... 16. 属性(property) ##不推荐class Clock(object):def __init__(self): self.__hour = 1def setHour(self, hour):if 25 > hour > 0: self.__hour = hourelse: raise BadHourExceptiondef getHour(self):return self.__hour##推荐class Clock(object):def __init__(self): self.__hour = 1def __setHour(self, hour):if 25 > hour > 0: self.__hour = hourelse: raise BadHourExceptiondef __getHour(self):return self.__hour hour = property(__getHour, __setHour) 17. 使用 with 处理文件打开 ##不推荐 f = open("some_file.txt")try: data = f.read()# 其他文件操作..finally: f.close()##推荐with open("some_file.txt") as f: data = f.read()# 其他文件操作... 18. 使用 with 忽视异常(仅限Python 3) ##不推荐try: os.remove("somefile.txt")except OSError:pass##推荐from contextlib import ignored # Python 3 onlywith ignored(OSError): os.remove("somefile.txt") 19. 使用 with 处理加锁 ##不推荐import threading lock = threading.Lock() lock.acquire()try:# 互斥操作...finally: lock.release()##推荐import threading lock = threading.Lock()with lock:# 互斥操作... 20. 参考 1) Idiomatic Python: http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html 2) PEP 8: Style Guide for Python Code: http://www.python.org/dev/peps/pep-0008/ 原文发布时间为:2018-11-15 本文作者:安生 本文来自云栖社区合作伙伴“ 数据与算法之美”,了解相关信息可以关注“ 数据与算法之美”。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册