三不朽

使用LNMP构建Linux+PHP+OpenResty+MySQL环境

Publish: September 9, 2019 Category: 运维 No Comments

LNMP作为中小型WEB应用构建方案得到了的很广泛的应用。LNMP顾名思义就是Linux+Nginx+MySQL+PHP,过去十年时间(Nginx09年发布第一个开发版),作为一种近乎经典的WEB服务构建方案,受到广大开发者的青睐。

LNMP脚本让本来复杂的环境构建任务变得轻松,运维人员只需下载脚本、执行、选择几个版本等配置,后面的编译配置都由脚本自动化完成。我引用了官方的几点说明如下:

无需一个一个的输入命令,无需值守,编译安装优化编译参数,提高性能,解决不必要的软件间依赖,特别针对配置自动优化。

支持自定义Nginx、PHP编译参数及网站和数据库目录、支持生成LetseEcrypt证书、LNMP模式支持多PHP版本、支持单独安装Nginx/MySQL/MariaDB/Pureftpd服务器,同时提供一些实用的辅助工具如:虚拟主机管理、FTP用户管理、Nginx、MySQL/MariaDB、PHP的升级、常用缓存组件Redis/Xcache等的安装、重置MySQL root密码、502自动重启、日志切割、SSH防护DenyHosts/Fail2Ban、备份等许多实用脚本。

阅读剩余部分...

简单例子讲明白Redis事务

Publish: June 26, 2019 Category: 运维 1 Comment

熟悉关系型数据库的同学对应该对事务比较了解,简单的说:事务表示一组动作,要么全部执行,要么全部不执行。还是用经典的银行转帐来做说明,用户a要给用户b转一笔款,正确的执行流程是a账户减少指定金额,b账户增加指定金额。这两个动作要么同时执行,要么都不执行才能保证数据的准确性,以保证数据一致。

Redis事务理解和示例

Redis提供了“简单”的事务,将一组需要一起执行的命令放到multi和exec两个命令之间,multi代表事务开始,exec代表事务结束,他们之间的命令是原子顺序执行的。我们一转帐来进行模拟这个过程:

#设置用户a和b的额度都是100

127.0.0.1:6379> set user:a:quota 100
OK
127.0.0.1:6379> set user:b:quota 100
OK
#执行转帐事务:a减掉20 b增加20
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> DECRBY user:a:quota 20
QUEUED
127.0.0.1:6379> INCRBY user:b:quota 20
QUEUED
127.0.0.1:6379> EXEC
1) (integer) 80
2) (integer) 120

#查看执行结果

127.0.0.1:6379> MGET user:a:quota user:b:quota
1) "80"
2) "120"

可以看到decrby和incrby命令返回结果都是QUEUED,代表命令并没有真正执行,而是暂时保存在redis中,当exec命令执行之后转帐行为才算完成。如果要停止执行该事务可以使用discard命令代替exec命令即可。

阅读剩余部分...

最简单的Redis可视化管理工具phpRedisAdmin

Publish: May 22, 2019 Category: 运维 1 Comment

redis是一个开源的,内存数据结构存储,用于数据库、缓存和消息代理。支持字符串(strings)、哈希、列表、集合、带有范围查询的有序集合(sorted sets)、bitmaps、hyperloglogs、具有半径查询的地理空间索引 (geospatial)和流(streams)等功能。其高性能、开源、简单易用的特性受到广大开发者的青睐,在我们的日常应用中却没有一个很简单易用的可视化客户端。但是为web程序员来说phpRedisAdmin是一个不错的选择,下面我们来介绍如何使用phpRedisAdmin。

安装&配置

phpRedisAdmin是一个web版的BS架构的redis可视化管理工具,因此需要有web服务器,从名字里可以看出其依赖于php环境,这里我们选用经典的lnmp方案。规划好web目录,使用下面两种方式来安装。

  • composer方式

如果使用composer包管理工具,可以直接执行下面两条命令

curl -s http://getcomposer.org/installer | php
php composer.phar create-project -s dev erik-dubbelboer/php-redis-admin path/to/install

阅读剩余部分...

Python NLP自然语言处理之基于Jiaba分词识别时间

Publish: May 16, 2019 Category: 数据分析 No Comments

概念理解

词性标注:
给定句子中判定每个词的语法范畴,确定其词性并加以标注的过程。这样说比较抽象,我们用一个简单的例子来说明

这儿是个非常漂亮的公园

对其词性标注结果如下

这儿/代词 是/动词 个/量词 非常/副词 漂亮/形容词 的/结构助词 公园/名词

给已经分好的词做词性标注,中文里多义的,也就是不同场景下表示的语法属性完全不同。好在大多数的词,尤其是“实词”一般只有一到两个词性,并且其中一个词性使用频次远远高于另外一个。
词性标注最简单的方法是从”语料库“中统计每个词所对应的高频词性,将其作为默认词性。同时使用”隐含马尔可夫模型“、”条件随机场模型”能提高标记准确性。



阅读剩余部分...

Python NLP自然语言处理之使用jieba进行中文分词实践

Publish: April 28, 2019 Category: 代码分享,数据分析 No Comments

自然语言处理的首要任务是分词,将一段文本分割成独立的词语。

中文分词介绍

已经归纳的三种分词如下:
规则分词、统计分词、混合分词

  • 规则分词:
    通过设立人工词库,按照一定方式进行切分匹配。

正向最大匹配法(Maximum Match Method MM法)的基本思路,假定分词词典中最最长词为 i 个汉字字符,则首先切分待处理文档的前 i 个字符作为匹配子串,在分词词典中查找。如果找到则表示匹配成功,匹配子串作为一个词切分出来。如果在字典中找不到这个词,则匹配失败,然后将匹配字段中的最后一个字去掉对剩下的子串重新匹配。按照这个方法直到匹配成功。
逆向最大匹配算法(Reverse Maximum Match Method, RMM法):其算法描述和MM法基本一致,唯一的不同在于RMM法是从文本的后面开始匹配。
双向最大匹配法 (Bi-directction method):是将MM法和RMM法得到的结果进行比较,然后按照最大匹配原则,选取词数切分最少的作为结果。

  • 统计分词
    把每个词看做由单个字组成的,如果相连的两个字在不同的文本中出现词数越多,那么这两个词大概率是一个词,当出现的概率高于设定的阈值时我们认为这个”字组“可能会构成一个词。

基于统计的分词一般有两部分内容:

  • 建立统计语言模型
  • 对句子进行单词划分,对划分结果进行概率统计,获得概率最大分词方式。

Jieba中文分词工具

Jieba分词结合了基于规则和基于统计这两类方法实现中文分词。通过前缀词典构建可能的有向无环图,通过在该图中的多条分词路径找到最优路线,也就确定了具体分词。对于未记录在词典的词,其使用HMM模型,采用Viterbi算法进行推导(表示我也不知道这个是什么意思)。






阅读剩余部分...