FlexCRFs: Flexible Conditional Random Fields
FlexCRFs is a conditional random field toolkit for segmenting and labeling sequence data written in C/C++ using STL library. It was implemented based on the theoretic model presented in (Lafferty et al. 2001) and (Sha and Pereira 2003). The toolkit uses L-BFGS (Liu and Nocedal 1989) - an advanced convex optimization procedure - to train CRF models. FlexCRFs was designed to deal with hundreds of thousand data sequences and millions of features. FlexCRFs supports both first-order and second-order Markov CRFs. We have tested FlexCRFs on Linux (Red Hat, Fedora, Ubuntu), Sun Solaris, and MS Windows with MS Visual C++.
PCRFs is a parallel version of FlexCRFs that allows us to train conditional random fields on massively parallel processing systems supporting Message Passing Interface (MPI). PCRFs helps to train conditional random fields on large-scale datasets containing up to millions of data sequences. We have tested PCRFs on large parallel systems, such as Cray XT3, SGI Altix, and IBM SP.
http://crfpp.googlecode.com/svn/trunk/doc/index.html
CRF++: Yet Another CRF toolkit
CRF++ is a simple, customizable, and open source implementation of Conditional Random Fields (CRFs) for segmenting/labeling sequential data. CRF++ is designed for generic purpose and will be applied to a variety of NLP tasks, such as Named Entity Recognition, Information Extraction and Text Chunking.
Last Update: 2013-02-13
Initial Release: 2005-05-28
http://www.chokkan.org/software/crfsuite/
CRFsuite
A fast implementation of Conditional Random Fields (CRFs)Introduction
CRFsuite is an implementation of Conditional Random Fields (CRFs) [Lafferty 01][Sha 03][Sutton] for labeling sequential data. Among the various implementations of CRFs, this software provides following features.
Fast training and tagging. The primary mission of this software is to train and use CRF models as fast as possible. See the benchmark result for more information.
Simple data format for training and tagging. The data format is similar to those used in other machine learning tools; each line consists of a label and attributes (features) of an item, consequtive lines represent a sequence of items (an empty line denotes an end of item sequence). This means that users can design an arbitrary number of features for each item, which is impossible in CRF++.
State-of-the-art training methods. CRFsuite implements:
Limited-memory BFGS (L-BFGS) [Nocedal 80]
Orthant-Wise Limited-memory Quasi-Newton (OWL-QN) method [Andrew 07]
Stochastic Gradient Descent (SGD) [Shalev-Shwartz 07]
Averaged Perceptron [Collins 02]
Passive Aggressive [Crammer 06]
Adaptive Regularization Of Weight Vector (AROW) [Mejer 10]
Forward/backward algorithm using the scaling method[Rabiner 90]. The scaling method seems faster than computing the forward/backward scores in logarithm domain.
Linear-chain (first-order Markov) CRF.
Performance evaluation on training. CRFsuite can output precision, recall, F1 scores of the model evaluated on test data.
An efficient file format for storing/accessing CRF models using Constant Quark Database (CQDB). It takes a little time to start up a tagger since a preparation is done only by reading an entire model file to a memory block. Retriving the weight of a feature is also very quick.
C++/SWIG API. CRFsuite provides an easy-to-use API for C++ language (crfsuite.hpp). CRFsuite also provides the SWIG interface for various languages (e.g., Python) on top of the C++ API. See the API Documentation for more information.
Last Update: 2011-08-11
Wapiti is a very fast toolkit for segmenting and labeling sequences with discriminative models. It is based on maxent models, maximum entropy Markov models and linear-chain CRF and proposes various optimization and regularization methods to improve both the computational complexity and the prediction performance of standard models. Wapiti is ranked first on the sequence tagging task for more than a year on MLcomp web site.
HCRF library (including CRF and LDCRF)
http://hcrf.sourceforge.net/
其他开发语言:
Java:
CRF Project
http://crf.sourceforge.net/
MALLET
http://mallet.cs.umass.edu/
Python
http://leon.bottou.org/projects/sgd
赠人玫瑰,手留余香.人生最大的快乐不在于占有什么而在于追求什么的过程.
引用文章:http://blog.csdn.net/q3498233/article/details/6703101
http://red-apple.blog.163.com/blog/static/20116506120122521556586/
http://www.blogjava.net/liaojiyong/archive/2006/09/01/67078.html
http://www.open-open.com/lib/view/open1346746861365.html http://esffor.iteye.com/blog/96082
在使用Spring提供的控制器时,AbstractController和SimpleFormController是应用得最多的。
- AbstractController是最基本的Controller,可以给予用户最大的灵活性。
- SimpleFormController则用于典型的表单编辑和提交。
在一个需要增、删、改、查的需求中,增加和修改扩展SimpleFormController完成,删除和查询则扩展AbstractController完成。 但是像上面那样完成某一业务对象的增,删,改,查,都属于一类相关的业务。把一类相关的操作分布到不同的类去完成,违返“高内聚”的设计原则。这样四个业务操作需要四个类来完成,造成太多的类文件,难以维护和配置。 所以Spring借鉴Struts的DispatchAction提供了类似功能的MultiActionController。可以实现不同的请求路径对应MultiActionController中的不同方法,这样就可以把相关的操作都在一个类的相关方法中完成。这样使得这个类具有“高内聚”,也利于系统的维护,还避免了重复代码。
多动作控制器存在在一个单独的包中——org.springframework.web.mvc.multiaction——它能够将请求映射到方法名,然后调用正确的方法。比如当你在一个控制器中有很多公共的功能,但是想多个入口到控制器使用不同的行为,使用多动作控制器就特别方便。
MultiActionController 提供的功能
功能 解释 delegate MultiActionController有两种使用方式。第一种是继承MultiActionController,并在子类中指定由MethodNameResolver解析的方法(这种情况下不需要这个配置参数),第二种是你定义了一个代理对象,由它调用Resolver解析的方法。如果你是这种情况,你必须使用这个配置参数定义代理对象 methodNameResolver 由于某种原因,MultiActionController需要基于收到的请求解析它必须调用的方法。你可以使用这个配置参数定义一个解析器一个多动作控制器的方法需要符合下列格式:
1:// actionName can be replaced by any methodname
ModelAndView actionName(HttpServletRequest, HttpServletResponse);
由于MultiActionController不能判断方法重载(overloading),所以方法重载是不允许的。此外,你可以定义exception handlers,它能够处理从你指定的方法中抛出的异常。包含异常处理的动作方法需要返回一个ModelAndView对象,就象其它动作方法一样,并符合下面的格式:
2:// anyMeaningfulName can be replaced by any methodname
ModelAndView anyMeaningfulName(HttpServletRequest, HttpServletResponse, ExceptionClass);
ExceptionClass可以是任何异常,只要它是java.lang.Exception或java.lang.RuntimeException的子类。
MethodNameResolver 根据收到的请求解析方法名。有三种解析器可以供你选择,当然你可以自己实现解析器。
package com.sunshine.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.mvc.multiaction.MultiActionController; import com.sunshine.service.UserService; public class MutiController extends MultiActionController { private UserService userService; public void setUserService(UserService userService) { this.userService = userService; } public String add(HttpServletRequest request,HttpServletResponse response){ System.out.println("MutiController.add()");; request.setAttribute("add", "add"); return "add"; } public String delete(HttpServletRequest request,HttpServletResponse response){ System.out.println("MutiController.delete()");; request.setAttribute("delete", "delete"); return "delete"; } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"
1,SVN是什么?
svn---subversion是目前最流行的一款 项目源代码管理软件.
常用的项目源代码管理软件:
1.cvs
2.svn
3.vss
4.clearcase
subversion(简称svn)是近年来崛起的版本管理软件(源码),是cvs的接班人。目前,绝大多数开源软件都使用svn作为代码版本管理软件。svn服务器有2种运行方式:独立服务器和借助apache。
svn:// http://
svn最流行的客户端是tortoisesvn 。
2,为什么会有SVN?
1,回溯的问题
2,多人协同开发的整合
3,如何解决文件合并问题?
3,SVN的基本原理
4,SVN软件的下载和安装
服务器端软件(subversion)
http://subversion.apache.org/packages.html
客户端软件(tortoisessvn)
http://tortoisesvn.net/downloads
5,SVN的基本使用
在一台服务器上建立一个源代码库(仓库),库里可以存放许多不同项目的源程序(仓库)。由源代码库管理员统一管理这些源程序(仓库)。每个用户在使用源代码库之前,首先要把源代码库里的项目文件(仓库)下载(checkout)到本地,然后用户可以在本地任意修改,最后用svn命令进行提交(commit),由svn源代码库统一管理修改。这样,就好像只有一个人在修改文件一样,既避免了冲突,又可以做到跟踪文件变化等。
需求:
两个程序员,小白(项目经理)和小黑(程序员),一起开发一个微博项目.
让小白在服务器创建一个仓库,一定是先创建一个仓库,然后把最原始的项目源码提交到仓库去,让小黑下载(checkout)一份源码并进行开发
1,先去服务器端创建一个仓库(空目录)
2,初始化仓库:
(1)通过指令创建 svnadmin create 仓库路经
(2)可视化工具初始化
3,小白把仓库checkout下来
必须保证svn的仓库是启动(运行)状态
svnserve -d -r 仓库路径
进入项目名----右击鼠标----浏览仓库---右击---checkout
4,修改/创建文件后,提交到服务器端去
右击---add(svn客户端管理)---commit(提交到服务器端)
6,SVN的单仓库和多仓库
启动形式:单仓库,指定到仓库的具体位置;多仓库,将仓库的位置指定到repository
7,SVN解决冲突/合并&常出现字符&SVN的使用细节
1,如何使用svn来解决,文件被多人修改后的合并(冲突问题)
2,先模拟冲突情景:
小白是项目经理,创建项目weibo的最初源代码,小黑修改文件后,出现冲突:
步骤:
(1)先在服务器创建仓库(sns),修改仓库的访问权限
(2)小白从服务器checkout一份sns项目,提交并修改文件
(3)小黑也checkout一份文件并修改,SVN用户权限管理和配置
1,画图分析为什么会出现冲突
2,出现冲突怎么处理?
(1)程序员自己合并代码,先update一下,出现很多备份文件
这个时候小黑的还是原来的,需要更新一下
(2)谁合并的,能通过日志查看出来
(3)把多余的文件删除掉,再committ
(4)小黑想获得的话,也得update一下才能看到更新后的文件
(1)+ 号:该文件已经被SVN客户端管理,但是还没有提交到svn服务器去
(2)绿色的钩钩表示,文件已经成功提交到服务器端
(3)红色!号表示,本地有某个文件没有提交到服务器端(即没有完全同步)
(4)黄色感叹号,表示提交的过程中出现冲突
(5)红色表示此文件在本地修改过,还未提交到仓库
(1)版本回溯 右击鼠标---update to reversion;
(2)日志记录,提交日志限定必填
右键---properties----new----logminisize
(3)误删除文件的恢复操作
update即可
(4)过滤某个或某些文件
addto ignore list remove
(5)导出项目
export
9,SVN开机自启动批处理文件
需求:
有3个用户,admin,xiaomao,xiaogou
要求admin有读写的权限,
xiaomao xiaogou有读的权限,没有写的权限
其他用户什么权限都没有步骤:
1,先修改 svnserve.conf
anon-access = none; 表示匿名用户什么权限都没有
auth-access = write;表示授权用户最高权限是write
password-db = passwd 密码文件在passwd
2,修改passwd文件
配置3个用户的密码
3,用户组的配置
authz-db = authz
安装服务:svn-install.bat
@echo off
sc create MYSVN binPath= "E:/svnserver/server/bin/svnserve.exe -r E:/svnserver/myrepository --service" start= auto
net start MYSVN
@pause
卸载服务:svn-remove.bat
@echo off
net stop MYSVN
sc delete MYSVN
@pause
10,SVN和zend studio的整合
从SVN导出数据到zend studio,zend studio作为客户端
右击---import---project from svn---下一步
(2)提交 项目到SVN:
右击---team---