Qi's Blog

不打无准备之仗


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

nlp-tools

发表于 2017-01-04   |   分类于 nlp   |  

NLP

调研了几个nlp的工具,现总结如下:

ICTCLAS(NLPIR)

ICTCLAS是由中科院计算所张华平历经数年开发的nlp工具,采用C++编写。主要功能包括中文分词、词性标注、命名实体识别、用户词典功能,同时支持GBK编码、UTF8编码、BIG5编码,新增微博分词、新词发现与关键词提取。可以可视化界面操作和API方式调用。

FudanNLP

http://code.google.com/p/fudannlp

FudanNLP主要是为中文自然语言处理而开发的工具包,也包含为实现这些任务的机器学习算法和数据集。FudanNLP及其包含数据集使用LGPL3.0许可证。
主要功能包括:

  • 信息检索:文本分类,新闻聚类。
  • 中文处理:中文分词,词性标注,实体名识别,关键词抽取,依存句法分析,时间短语识别。
  • 结构化学习:在线学习,层次分类,聚类,精确推理。

工具采用Java编写,提供了API的访问调用方式。

THU NLP

https://github.com/thunlp

清华的nlp工具,包含知识表示学习工具包KG2E,关键词抽取和标签推荐工具包THUTag,中文词法分析工具包THULAC,中文文本分类工具包THUCTC等工具包。

HIT LTP

http://ir.hit.edu.cn/ltp/

语言技术平台(Language Technology Platform,LTP)是哈工大社会计算与信息检索研究中心历时十年开发的一整套中文语言处理系统,是集分词、词性标注、命名实体识别,句法分析以及语义角色标注为一体的中文语言分析平台,C++编写。LTP制定了基于XML的语言处理结果表示,并在此基础上提供了一整套自底向上的丰富而且高效的中文语言处理模块(包括词法、句法、语义等6项中文处理核心技术),以及基于动态链接库(Dynamic Link Library, DLL)的应用程序接口,可视化工具,并且能够以网络服务(Web Service)的形式进行使用。

命名实体识别(NER)
1)模型简介
NER(Named Entity Recognition, 命名实体识别)把命名实体识别的过程看作一个多分类的问题,使用最大熵模型来完成这一任务。使用开源工具:Maximum Entropy Modeling Toolkit for Python and C++
2)使用资源
数据来源:1998年1月份人民日报+6月份人民日报前10000句
数据规模:1月份数据进行训练、6月份前10000句测试
3)性能及效率
性能:F1(overall)=92.25%
效率:11KB/s

Stanford Natural Language Processing Group

1. Stanford CoreNLP

采用Java编写的面向英文的处理工具,主要功能包括分词、词性标注、命名实体识别、语法分析等。

2. Stanford Word Segmenter

采用CRF进行分词,也是基于Java开发的,同时可以支持中文和Arabic。

3. Stanford POS Tagger

采用Java编写的面向英文、中文、法语、阿拉伯语、德语的命名实体识别工具。

4. Stanford Named Entity Recognizer

采用条件随机场模型的命名实体工具。

5. Stanford Parser

进行语法分析的工具,支持英文、中文、阿拉伯文和法语。

6. Stanford Classifier

采用Java编写的分类器。

HanLP

https://github.com/hankcs/HanLP

HanLP是由一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。

HanLP提供下列功能:

  • 中文分词
    • 最短路分词
    • N-最短路分词
    • CRF分词
    • 索引分词
    • 极速词典分词
    • 用户自定义词典
  • 词性标注
  • 命名实体识别
    • 中国人名识别
    • 音译人名识别
    • 日本人名识别
    • 地名识别
    • 实体机构名识别
  • 关键词提取
    • TextRank关键词提取
  • 自动摘要
    • TextRank自动摘要
  • 短语提取
    • 基于互信息和左右信息熵的短语提取
  • 拼音转换
    • 多音字
    • 声母
    • 韵母
    • 声调
  • 简繁转换
    • 繁体中文分词
    • 简繁分歧词(简体、繁体、臺灣正體、香港繁體)
  • 文本推荐
    • 语义推荐
    • 拼音推荐
    • 字词推荐
  • 依存句法分析
    • 基于神经网络的高性能依存句法分析器
    • MaxEnt依存句法分析
    • CRF依存句法分析
  • 语料库工具
    • 分词语料预处理
    • 词频词性词典制作
    • BiGram统计
    • 词共现统计
    • CoNLL语料预处理
    • CoNLL UA/LA/DA评测工具

在提供丰富功能的同时,HanLP内部模块坚持低耦合、模型坚持惰性加载、服务坚持静态提供、词典坚持明文发布,使用非常方便,同时自带一些语料处理工具,帮助用户训练自己的模型。

Apache OpenNLP

http://opennlp.apache.org/index.html

Apache的OpenNLP库是自然语言文本的处理基于机器学习的工具包。它支持最常见的NLP任务,如断词,句子切分,部分词性标注,命名实体提取,分块,解析和指代消解。

官方提供了文档说明以及API,有命令行调用和程序代码使用两种方式。

LingPipe

http://alias-i.com/lingpipe/

LingPipe是一个由alias公司开发的自然语言处理的Java开源工具包。LingPipe目前已有很丰富的功能,包括主题分类(Top Classification)、命名实体识别(Named Entity Recognition)、词性标注(Part-of Speech Tagging)、句题检测(Sentence Detection)、查询拼写检查(Query Spell Checking)、兴趣短语检测(Interseting Phrase Detection)、聚类(Clustering)、字符语言建模(Character Language Modeling)、医学文献下载/解析/索引(MEDLINE Download, Parsing and Indexing)、数据库文本挖掘(Database Text Mining)、中文分词(Chinese Word Segmentation)、情感分析(Sentiment Analysis)、语言辨别(Language Identification)等API。

分词工具

1.IKAnalyzer

IK Analyzer是一个开源的,基于Java语言开发的轻量级的中文分词工具包。IK支持细粒度和智能分词两种切分模式,支持英文字母、数字、中文词汇等分词处理,兼容韩文、日文字符。可以支持用户自定义的词典,通过配置IKAnalyzer.cfg.xml文件来实现,可以配置自定义的扩展词典和停用词典。

特点:IK简单、易于扩展,分词结果较好并且采用Java编写。

2.结巴

最好的python中文分词组件

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

3.paoding

庖丁中文分词库是一个使用Java开发的,可结合到Lucene应用中的,为互联网、企业内部网使用的中文搜索引擎分词组件。

中文分词具有极 高效率 和 高扩展性 。引入隐喻,采用完全的面向对象设计,构思先进。

高效率:在PIII 1G内存个人机器上,1秒 可准确分词 100万 汉字。

采用基于 不限制个数 的词典文件对文章进行有效切分,使能够将对词汇分类定义。

能够对未知的词汇进行合理解析

4.mmseg4j

mmseg4j core 使用 Chih-Hao Tsai 的 MMSeg 算法(http://technology.chtsai.org/mmseg/ )实现的中文分词器。

MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex 加了四个规则过虑。mmseg4j 已经实现了这两种分词算法。

词语的正确识别率达到了 98.41%。

附:关于中文分词器性能比较的一篇文章(2014.05.27更新)
http://www.cnblogs.com/wgp13x/p/3748764.html

算法开发包

1.crf项目

crf++

2.svm

svm-light 和 lib svm

参考

自然语言处理(NLP)常用开源工具总结—-不定期更新

HIT-SCIR LTP源代码

mysql

发表于 2016-11-15   |   分类于 mysql   |  

mysql

分表

做mysql集群
预先估计会出现大数据量并且访问频繁的表,将其分为若干个表
merge引擎

Mysql提供Merge存储引擎来进行分表,Merge表能将相同结构的表组合起来当做一张逻辑表来使用。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
create table t1(
id char(19) primary key,
uname varchar(255),
upassword varchar(255)
)ENGINE = MyISAM;
create table t2(
id char(19) primary key,
uname varchar(255),
upassword varchar(255)
)ENGINE = MyISAM;
create table test(
id char(19) primary key,
uname varchar(255),
upassword varchar(255)
)ENGINE = MERGE union(t1,t2) insert_method=last;

使用Merge表有如下几个注意点:
1、所有分表都必须是MyISAM引擎,MyISAN引擎是不支持事务的。
2、Merge表只保证合表后数据唯一性,合表前的数据可能会存在重复。
3、删除分表正确的做法是 ALTER TABLE test UNION (t1); drop table t2;如果直接删除t2,test表会报错。
4、不能自动分表,需要定期维护。

编写自动分表脚本

在使用Merge表过程,最头痛的就是不能自动分表,靠人工定时清理肯定不合理的,在实践过程中,有两种办法来解决这个问题。
第一、使用Mysql Event按时间周期自动建表
第二、分表到达一定数量后自动建表.

参见Mysql Merge分表的研究备忘

分区

partition引擎

Sharding

MYSQL存储过程

海量数据/高并发

发表于 2016-11-11   |   分类于 big-data   |  

海量数据/高并发

1.教你如何迅速秒杀掉:99%的海量数据处理面试题

2.

通配符和正则表达式

发表于 2016-11-11   |   分类于 other   |  

通配符和正则表达式

通配符

由shell解析,并且一般用于匹配文件名,实际上就是shell解释器去解析的特殊符号。多用于find,ls , cp等命令。

通配符是由shell处理的, 它只会出现在 命令的“参数”里(它不用在命令名称里, 也不用在操作符上)。当shell在“参数”中遇到了通配符时,shell会将其当作路径或文件名去在磁盘上搜寻可能的匹配:若符合要求的匹配存在,则进行代换(路径扩展);否则就将该通配符作为一个普通字符传递给“命令”,然后再由命令进行处理。总之,通配符 实际上就是一种shell实现的路径扩展功能。在 通配符被处理后, shell会先完成该命令的重组,然后再继续处理重组后的命令,直至执行该命令。

shell常见通配符:

字符 含义 实例
* 匹配 0 或多个字符 a*b a与b之间可以有任意长度的任意字符, 也可以一个也没有, 如aabcb, axyzb, a012b, ab。
? 匹配任意一个字符 a?b a与b之间必须也只能有一个字符, 可以是任意字符, 如aab, abb, acb, a0b。
[list] 匹配 list 中的任意单一字符注:备注记录几个特殊单一符号表示。 a[xyz]b a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z, 如: axb, ayb, azb。a[[:upper:]]b a与b之间有且只能有一个大写字符,如aSb,aQb等。
[!list] 或[^list] 匹配 除list 中的任意单一字符 a[^0-9]b, a与b之间必须也只能有一个字符, 但不能是阿拉伯数字, 如axb, aab, a-b。
[c1-c2] 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z] a[0-9]b 0与9之间必须也只能有一个字符 如a0b, a1b… a9b。

备注:几种常见特殊的符号表示:

1
2
> ` ``[[:upper:]]:所有大写字母`` ``[[:lower:]]:所有小写字母`` ``[[:alpha:]]:所有字母`` ``[[:digit:]]:所有数字`` ``[[:alnum:]]:所有的字母和数字`` ``[[:space:]]:所有空白字符`` ``[[:punct:]]:所有标点符号`
>

综合例子应用:

1:显示/var目录下所有以l开头,以一个小写字母结尾,且中间出现一位任意字符的文件或目录;

ls -d /var/l?[[:lower:]]

2:显示/etc目录下,以任意一位数字开头,且以非数字结尾的文件或目录;

ls -d /etc/[0-9]*[^0-9]

3:复制/etc目录下,所有以.conf结尾,且以m,n,r,p开头的文件或目录至/tmp/conf.d/目录下;

cp -r /etc/[mnrp]*.conf /tmp/conf.d/

正则表达式

用在字符串处理上面的一项表达式,主要用于文本内容中的字符串搜索和替换的。多用于sed, awk,grep等工具。

区别

  1. 用途不同

    1
    通配符用于通配文件名,正则表达式用于匹配文本内容
  2. 使用地点不同

    1
    2
    通配符通常只能用于shell,被shell自解释。
    正则表达式需要被正则引擎解析,需要用于支持正则表达式的代码或命令中。

通配符和正则表达式的区别

对于通配符(* , ?),不存在匹配前一个字符的情况,所以和?表示匹配当前的字符,而正则表达式(./\/?/+)里面的*,?,+表示匹配前一个字符,. 表示匹配任意一个字符。

elk stack

发表于 2016-11-09   |   分类于 big-data   |  

ELK STACK

入门级博客:

使用logstash清洗日志

url编码

发表于 2016-11-08   |   分类于 web   |  

URL编码

jquery

发表于 2016-11-01   |   分类于 js   |  

jquery

api:参见参考手册

except : jquery插件

jquery安装

网页中添加 jQuery

可以通过多种方法在网页中添加 jQuery。 您可以使用以下方法:
从 jquery.com 下载 jQuery 库
从 CDN 中载入 jQuery, 如从 Google 中加载 jQuery。

Baidu CDN:

1
2
3
4
<head>
<script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js">
</script>
</head>

使用百度、又拍云、新浪、谷歌或微软的 jQuery,有一个很大的优势:许多用户在访问其他站点时,已经从百度、又拍云、新浪、谷歌或微软加载过 jQuery。所有结果是,当他们访问您的站点时,会从缓存中加载 jQuery,这样可以减少加载时间。同时,大多数 CDN 都可以确保当用户向其请求文件时,会从离用户最近的服务器上返回响应,这样也可以提高加载速度。

语法

1
$(seletor).action()

$表示query。

文档就绪事件

1
2
3
$(document).ready(function(){
// 开始写 jQuery 代码...
});

或

1
2
3
$(function(){
// 开始写 jQuery 代码...
});

javascript

发表于 2016-10-31   |   分类于 js   |  

js

javaScript教程

除了JS高级教程,JS实例的前两节。

JS参考手册

javascript api : http://www.runoob.com/jsref/jsref-obj-array.html

基础语法

使用误区

浮点型数据使用注意事项

JavaScript 中的所有数据都是以 64 位浮点型数据(float) 来存储。

所有的编程语言,包括 JavaScript,对浮点型数据的精确度都很难确定:

1
2
3
4
var x = 0.1;
var y = 0.2;
var z = x + y            // z 的结果为 0.3
if (z == 0.3)            // 返回 false

我解决以上问题,可以用整数的乘除法来解决:

1
var z = (x * 10 + y * 10) / 10;       // z 的结果为 0.3

用console来调试js。

Undefined 不是 Null

在 JavaScript 中, null 用于对象, undefined 用于变量,属性和方法。

对象只有被定义才有可能为 null,否则为 undefined。

如果我们想测试对象是否存在,在对象还没定义时将会抛出一个错误。

错误的使用方式:

1
if (myObj !== null && typeof myObj !== "undefined")

正确的方式是我们需要先使用 typeof 来检测对象是否已定义:

1
if (typeof myObj !== "undefined" && myObj !== null)

void

href=”#”与href=”javascript:void(0)”的区别

# 包含了一个位置信息,默认的锚是#top 也就是网页的上端。

而javascript:void(0), 仅仅表示一个死链接。

在页面很长的时候会使用 # 来定位页面的具体位置,格式为:# + id。

如果你要定义一个死链接请使用 javascript:void(0) 。

实例

点我没有反应的!

点我定位到指定位置!


…

尾部定位点

JavaScript 代码规范

http://www.runoob.com/js/js-conventions.html

js闭包

jS库

CDN -内容分发网络

Google 为一系列 JavaScript 库提供了免费的 CDN,
但是由于 Google 在中国经常被GFW屏蔽,造成访问不稳定,所以建议使用百度静态资源公共库。
如需在您的网页中使用 JavaScript 框架库,只需在

HTML DOM

api : http://www.runoob.com/jsref/dom-obj-document.html

当浏览器载入 HTML 文档, 它就会成为 document 对象。

document 对象是HTML文档的根节点与所有其他节点(元素节点,文本节点,属性节点, 注释节点)。

Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。

提示:Document 对象是 Window 对象的一部分,可通过 window.document 属性对其进行访问。

JS浏览器BOM

mysql

发表于 2016-10-26   |   分类于 mysql   |  

mysql

mysql常用命令收集:

MYSQL常用命令

ssh keys

发表于 2016-10-25   |   分类于 linux   |  

ssh keys

配置多个ssh key:

1.ssh-keygen -t rsa -C "youremail@email.com" -f ~/.ssh/second
生成新的ssh key并命名为second。或者ssh-keygen -t rsa -C "youremail@email.com" 在询问时定义名称。

这个命令直接通过-f参数指定了密钥和公钥的文件名,比如-f ~/.ssh/second,其生产的密钥为~/.ssh/second,公钥为~/.ssh/second.pub.

2.远程主机添加公钥

把公钥文件中的内容追加到~/.ssh/authorized_keys文件的末尾。

1
cat ~/.ssh/second.pub

注意追加前authorized_keys文件的末尾需要有个换行符。

3.配置本地config文件

1
2
3
4
5
6
7
8
9
10
# Default github user(first@mail.com) 默认配置,一般可以省略
Host github.com
Hostname github.com
User git
Identityfile ~/.ssh/github
# second user(second@mail.com) 给一个新的Host称呼
Host second.github.com // 主机名字,不能重名
HostName github.com // 主机所在域名或IP
User git // 用户名称
IdentityFile C:/Users/username/.ssh/id_rsa_second // 私钥路径

其中User后面的值为你访问的git ssh地址的@之前的部分,比如:git@github.com:dongritengfei/beego.git的@前面是git,所以User后面的值为git。Host就是你的git仓库的域名或者IP。

4.测试链接情况

1
ssh -T git@second.github.com

ssh -T 用户名@Host。返回welcome,说明是可以的。

参考

多个密钥管理

多个 SSH KEY 的管理

linux管理多个ssh公钥密钥

配置密钥

配置ssh密钥认证自动登录

cat -n id_rsa.pub >> authorized_keys。加个换行符比较好

1234…7
Qi Liu

Qi Liu

Less is More

69 日志
11 分类
63 标签
© 2018 Qi Liu
由 Hexo 强力驱动
主题 - NexT.Pisces