Ourren

关注技术,记录生活.

Docker搭建lnmp详解

| 留言

docker从去年开始一直很火,但是由于其它原因也没有怎么接触,今天抽空参照官网Docker —— 从入门到实践进行了初步学习,实现了利用docker下搭建lnmp环境,步骤如下:

1.安装docker具体步骤可以官方教程或者Docker —— 从入门到实践里面都有详细的介绍,本次的安装环境如下:

Ubuntu 14.04 Desktop
待安装环境:ubuntu+nginx+mysql+php具体命令如下:

$ sudo apt-get update   $ sudo apt-get install docker.io

注意:如果使用操作系统自带包安装 Docker,目前安装的版本是比较旧的 0.9.1。 要安装更新的版本,可以通过使用 Docker 源的方式。

2014年:瞎忙活的一年

| 留言

2013-2014是人生中迷茫的时期,需要面对生活的各个方面,需要考虑人生的道路方向。但我相信在这迷茫之后积极面对生活,充满热情迎接挑战时将会是另外一个天地。

关于研究

今年的研究工作就像题目一样:“瞎忙活”。推开客观情况而言,个人因素还是主要的,问题在于:个人研究方向未确定,就没有什么大的研究目标,所以一天只能看到眼前需要处理的事情和任务,你没有经常规划或者提醒你有一个长期的目标,就像迷茫在大海中的鱼,一天游呀游,不知道目的地在哪。因此,确定2015年个人的研究目标偏向于Web安全与隐私保护,机器学习与自然语言处理这块。

改变以往对相关技术的研究方法,针对特定技术必须亲身实践并结合自己的理解输出技术文章,来改变原来写不出技术文章或者写出的技术文章水平很low。通过自己的文笔和理解写出来的代码和文章才是真正地掌握了该技术。

在一个行业想要混得牛逼,自己必须得有一个擅长的技能,至少能够在这个领域排上名次,否则你没办法在这个圈子混,现代社会不缺少全才(什么方面都懂一点),但是缺少专才(在某个技术点上做得很顶尖),而目前最主要的目标就是需要在自己的领域证明自己的能力。

NLP入门实例:判断性别

| 留言

image

1. NLP(Natural Language Processing)

自然语言处理(NLP)是人工智能和语言学领域的重要学科,在这此领域中探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式[1]。

按照我个人的理解就是计算机怎么去理解并处理文字(中文或者其他语言),因为每种语言都有各种语法,语义和感情色彩等。而计算机他是不懂感情的,学过计算机编程的都知道,不管是x64/X86的机器上面跑的就是0101。而NLP技术的出现就是来解决该类问题,NLP主要难点在于:

  • 单词的边界界定(注:分词)

    在口语中,词与词之间通常是连贯的,而界定字词边界通常使用的办法是取用能让给定的上下文最为通顺且在文法上无误的一种最佳组合。在书写上,汉语也没有词与词之间的边界。

  • 词义的消歧(注:语义)

    许多字词不单只有一个意思,因而我们必须选出使句意最为通顺的解释。

  • 句法的模糊性(注:语境)

    自然语言的文法通常是模棱两可的,针对一个句子通常可能会剖析(Parse)出多棵剖析树(Parse Tree),而我们必须要仰赖语意及前后文的资讯才能在其中选择一棵最为适合的剖析树。

  • 有瑕疵的或不规范的输入

    例如语音处理时遇到外国口音或地方口音,或者在文本的处理中处理拼写,语法或者光学字符识别(OCR)的错误。

本文不会涉及太多这块技术,一方面我也刚入门,另外一方面这块技术比较高深,是一个长期需要研究的东西。

Yii框架使用Word扩展插件

| 留言

MS Office套件的复合文件格式(特别是Word和PPT)一直是编程人员比较恼火的问题:不能通过简单的编程来自动生成Word或者PPT文件,但是从Office 2007开始微软逐渐开放其格式(可以理解未:单一的Office文件相当于一个zip的压缩包,其文件的内容可以通过编程来修改),因此诞生了基于各种脚本语言的office库。现在看来其具体实现的方法有如下几种:

  1. 通过OLE接口来生成文件(仅限于Windows平台),即通过微软提供的接口来实现,在Office 2007之前也可以通过这种方法实现;

  2. 通过文档的格式来进行生成。由于微软Office 2007开放了格式并且其格式相当简单,因此可以通过程序来直接生成格式。这块技术有非常出名的PHPOffice

其中excel的格式相对比较简单,各种脚本语言都可以快速地生成excel文件。YII框架也有针对excel库非常方便的扩展插件:yiiexcel,而针对Word格式的扩展插件目前基本上还没有,而github上的yii-phpword使用的时候存在一次问题,本文基于YII框架提出了一个使用Word的扩展插件,项目地址:yii-word

使用时具体配置如下:

  1. 从github下载文件并解压;
  2. protected/extensions创建新目录(yiiword);
  3. 将下载的YiiWord.php文件放在 (protected/extensions/yiiword)目录下;
  4. 下载最新的版本的PHPWord: https://phpword.codeplex.com/;
  5. 解压文件并放在protected/vendor/PHPWord/目录下,需要新建PHPWord目录;
  6. 在main.php中导入库“application.vendors.PHPWord.PHPWord”;

使用如下:

Yii::import(‘ext.yiiword.YiiWord’, true); Yii::registerAutoloader(array(‘YiiWord’, ‘autoload’), true); $PHPWord = new PHPWord(); $section = $PHPWord->createSection(); $section->addText(‘Hell Wordl!’);//添加内容 $section->addTextBreak();//添加空行 //生成下载页面 $filename = time(); header(‘Content-Type: application/vnd.ms-word’); header(‘Content-Disposition: attachment;filename=”’.$filename.’.docx”’); header(‘Cache-Control: max-age=0’); $objWriter = PHPWord_IOFactory::createWriter($PHPWord, ‘Word2007’); $objWriter->save(‘php://output’); unset($this->objWriter); exit();

其它高级使用文档可以参考PHPWord的官方文档

参考链接:

  1. phpword;
  2. yii-phpword;
  3. yiiexcel

中文分词与词频统计实例

| 留言

话说近两年大数据确实火了,带给我们最直接的视觉感受就是利用图或者表来展示大数据所隐藏的内容,真是真实而又直观。然而技术博客的侧边栏标签云就是一种原始雏形,只不过这种标签是通过作者手动添加而生成的。本文就是想通过自动提取博文标题中的关键字,然后通过插件来进行显示。核心技术就是:中文分词与词频统计。

关于中文分词

中文跟英语在分词技术上差别比较多,中文多个字往往可以组成多个词语,而且词语之还可以缩写。例如:苏州杭州 可以缩写为 苏杭;而英文则相对固定,一个单词就是一个单词。也难怪平时在word中的词语错误提醒功能不能完全纠正中文书写错误,而可以纠正所有的英文书写错误。

目前国内针对中文分词有几个比较流行的库:

  • jieba:基于python语言开发,同时最开始接触的也是这个开源库,整体而言也不错,github上关注度也是最高的;
  • Yaha:也是基于python语言开发的,跟jieba差不多,貌似功能方面有所改变;
  • NLPIR:开发语言C/C++/C#/Java;
  • 其它分词可以参见参考链接1;

可以说这些分词库各有差别,选择一款适合自己的库就行了,本次选择的是jieba,主要是由于基于python开发,并且在国内分词中流行度比较高(V2EX原来的主题tag就是基于jieba做的)。

提取所有标题

将数据库中的wp-post表中的数据导出csv格式,然后用excel打开并提取title列存为txt格式,这样子所有的标题都存在txt文件里面了。

标题分词

采用jieba给的实例程序进行标题分词,实际上可以将所有的标题当做一段话进行分词,但是为了更佳准确,还是选择了单个标题进行分词,直接上代码,非常简短:

#encoding=utf-8 import jieba wordsall = {} #define return dic postfile = open(‘title’,’r’) ptitle = postfile.readlines() for ititle in ptitle:  ititle = ititle.replace(‘\n’,”) #clean \n  seg_list = jieba.cut(ititle, cut_all=False)  print ” “.join(seg_list)

这样子就可以直接吧所有的标题进行分词并打印出来。其实jieba在分词的时候有三种模式(可以参考链接2),而本次采用的就是全模式:

  • 精确模式,试图将句子最精确地切开,适合文本分析;
  • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
  • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

其实代码还可以写得更好点,统计关键字并统计每个词语出现的次数,代码如下:

#encoding=utf-8 import jieba wordsall = {} #define return dic postfile = open(‘title’,’r’) ptitle = postfile.readlines() for ititle in ptitle: ititle = ititle.replace(‘\n’,”) #clean \n seg_list = jieba.cut(ititle, cut_all=False) rowlist = ” “.join(seg_list) words = rowlist.split(’ ‘) for word in words: if word !=”: if word in wordsall: wordsall[word]+=1 else: wordsall[word] = 1 wordsall = sorted(wordsall.items(), key=lambda d:d[1], reverse = True) for (word, cnt) in wordsall: print “%s:” % word,cnt

文字图显示

其实在上面的过程中虽然对标题的词语进行了分词,但是一般的人还是看不太懂这个博客主要写了什么内容,而目前很流行的文字图则更加方便地普通人快速了解相关信息。这类主要采用在线服务实现文字图的绘画,在线平台只需要提供关键字即可显示文字图,本次采用了worditout的在线服务进行生成;

将上面生成的词语复制到worditout的文本框中,就生成了文章最前面的图形,对比下发现这个文字图的效果和说服力跟我手动标注的标签云差不多,也即是说自动的标签分割技术基本上已经成熟,不需要人工手动添加标签了。

其实,还有很多其它的在线文字图生成系统,可以参照这里的一篇文章;

相关链接

  1. 有哪些比较好的中文分词方案
  2. jieba

线下积分联盟的十问十答

| 留言

前几天跟一个创业的年轻人聊天,无意中谈到了他正在做的创业项目,其它他当时也只是描述一种模式:生活在中我们经常在小卖部或者店铺直接购买商品,这种购买方式不同于网络购物(后者可以在支付宝或者京东或者腾讯上积分,然后用积分换取RMB),他们想做的就是让用户在现金购物的时候进行积分,从而实现线下积分。但是我感觉用六个字就可以概括:线下积分联盟

他们初步提出的解决方案:组成团队开发APP和网站,用户和商家在进行交易时,可以直接通过APP进行交易(可通过支付宝或者其它支付方式)或者通过现金交易后在APP上登记积分。最终用户可以把线下的所有购物金额进行积分,从而可以通过积分换取商品。

在我听了以上的模式后,同时结合自己在互联网的一些认识提出了如下的问题:

  1. 其实前几年针对这类应用就有“pupa优惠券”,相对于这类应用有啥优势?目前是否有该类系统或者网站?

2.双方还需要安装APP,同时交易完成后还需要打开APP进行积分统计,用户体验能再差点不?

3.为什么不直接基于支付宝或者微信进行插件开发,因为这些平台用户量大,基本上手机上都安装有,再说用户使用的时候也感觉方便?

4.生活中用现金支付的地方一般都是小门面,买个水买包面啥的,还得搞个APP麻烦不?再说目前这些门面一般还没WIFI,虽然目前3G4G很流行,但是从我观察看好多人还是2G,因为网络制式的问题。

5.如果仅仅针对小商店怎么盈利,毕竟成立公司创业还是得考虑项目的盈利点?如果仅仅是拉拢用户等风投,估计前期就可能直接死在沙滩上。

6.大商场或者商家目前都有自家的微信公众号,用户扫描关注后就可以购物积分,并且还可以通过微信钱包进行支付,再说目前支付宝在推线下支付(雷达,声波支付都已经形成产品)。这种用户体验是不是更好?大商家也不会采用你这种联盟方式。

7.其实说到联盟,信用卡和银联卡才是可以直接做线下积分联盟的大厂商,特别是目前信用卡积分可以换里程,换礼物。同时还经常搞活动。你这种模式是不是直接掉在信用卡的后面?

8.如何去说服商家来使用你这种服务?你能给小店铺带来什么?流量或者人群?从目前的描述看基本上都没有,因此商家不会卖你的帐,基本上不会使用你的功能。

9.现有的记账软件基本上可以涵盖日常生活的消费,是不是可以把你的想法跟这个结合起来?

10.目前的微信公众号对商家的相关业务已经延伸得很广,不光是积分,还有用户管理或者产品销售统计等功能,已经在这块应用上领先了,可以在公众号上做出一些产品可能还有市场。

其实综合如上的问题,我个人在日常中针对创业项目的思考主要从如下几个方面考虑:

1.团队成员。再好的项目放在一堆团队管理混乱,成员各自怀有二心的,那么这个项目肯定会失败。好的创业项目肯定得有各类人员:管理者、技术、运营这些人才,只有大家相互达成共识,并认定大家会成功才能成功度过危机关头。

2.盈利模式。 这个是最重要的,一个创业项目没有明确的盈利模式那么必然会走向失败,或许可以在前期积累用户,然后在后期推出其它相关盈利项目。

3.产品优势。相对于目前已有的相关产品,是否有自己的核心技术或者固定客户,如果只是一些普通的别人可以复制的东西,那么肯定在快速发展期会遇到很多问题。

4.产品的易用性。产品是否符合人们的使用习惯,是否真正地找到了用户的痛点。

5.团队头脑风暴。团队人员多做一些即时讨论,方便大家思维碰撞。

BTW. 以上纯属自己的一些想法和看下,欢迎探讨。