Atitit. camel分词器 分词引擎 camel拆分 的实现设计

1. camel分词器1

1.1. 实现的界定符号大写字母小写字母数字1

1.2. 特殊处理 对于JSONObject 多个大写字母连写的处理1

1.3. camel分词器code1

2. 代码实现1

2.1. public class CamelScannerQ1 extends Scanner {2

2.2. public class iniState extends State {3

2.3. public class BigCaseLetterState extends State {4

2.4. public class LowerLetterState extends State {5

2.5. public class NumState extends State {7

1. camel分词器

1.1. 实现的界定符号大写字母小写字母数字

1.2. 特殊处理 对于JSONObject 多个大写字母连写的处理

1.3. camel分词器code

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://www.cnblogs.com/attilax/

2. 代码实现

package com.attilax.fsm.camelScanner;

import java.util.ArrayList;

import java.util.List;

import com.attilax.fsm.Context;

import com.attilax.fsm.FinishState;

import com.attilax.fsm.Scanner;

import com.attilax.fsm.Token;

import com.attilax.json.JSONArray;

import com.attilax.json.JSONObject;

2.1. public class CamelScannerQ1 extends Scanner {

public static void main(String[] args) {

String s = "fld1=1,fld2='at''t,lax',fld3='val3'";

s = "aaaaCamelJSONObject123forMac";

s="com.sun.jna.platform.win32.Variant$VARIANT$_VARIANT$__VARIANT$BRECORD$ByReference.class";

s="";

//s="a";

@SuppressWarnings("rawtypes")

List tokenList = new CamelScannerQ1().getTokenList(s);

System.out.println(JSONArray.fromObject(tokenList).toString(2));

}

public List<String> getTokenList_retStr(String s)

{

if(s.length()==0)

return new ArrayList<String>();

List<String> li_r=new ArrayList<String>();

List<Token> li=getTokenList(s);

for (Token token : li) {

li_r.add(token.value);

}

return li_r;

}

public List getTokenList(String s) {

// DslPaserContext context = new DslPaserContext();

Context context = new Context();

context.setState(new iniState());

int n = 0;

while (!(context.state instanceof FinishState)) {

// System.out.println(n);

// ����

context.request(s);

n++;

if (n > 200)

break;

}

for (Token tk : context.tokenList) {

// if(tk.value.trim().length()>0)

System.out.println(tk.value + "===");

}

return (List) context.tokenList;

}

}

package com.attilax.fsm.camelScanner;

import java.util.List;

import com.attilax.fsm.Context;

import com.attilax.fsm.State;

import com.attilax.lang.text.strUtil;

import com.attilax.util.numUtil;

2.2. public class iniState extends State {

@Override

public void handle(String sampleParameter, Context context) {

context.curcharIndex=0;

char curChar=context.sa[context.curcharIndex];

if(strUtil.isBigLetter(curChar))

{

newToken(context, curChar);

context.state=new BigCaseLetterState();

}

if(strUtil.isLowerLetter(curChar))

{

newToken(context, curChar);

context.state=new LowerLetterState();

}

if(numUtil.isNum(curChar))

{

newToken(context, curChar);

context.state=new NumState();

}

}

}

package com.attilax.fsm.camelScanner;

import com.attilax.fsm.Context;

import com.attilax.fsm.FinishState;

import com.attilax.fsm.State;

import com.attilax.fsm.Token;

import com.attilax.lang.text.strUtil;

import com.attilax.util.numUtil;

2.3. public class BigCaseLetterState extends State {

@Override

public void handle(String sampleParameter, Context context) {

if(MoveNextisEnd(context) ) //or next cur move

return;

char curChar=context.sa[context.curcharIndex];

if(strUtil.isBigLetter(curChar))

{

context.curToken.value=context.curToken.value+String.valueOf(curChar);

context.state=new BigCaseLetterState();

}

if(strUtil.isLowerLetter(curChar))

{

context.curToken.value=context.curToken.value+String.valueOf(curChar);

context.state=new LowerLetterState();

}

if(numUtil.isNum(curChar))

{

context.tokenList.add(context.curToken);

context.curToken=new Token();

context.curToken.value=context.curToken.value+String.valueOf(curChar);

context.state=new NumState();

}

}

}

package com.attilax.fsm.camelScanner;

import com.attilax.fsm.Context;

import com.attilax.fsm.FinishState;

import com.attilax.fsm.State;

import com.attilax.fsm.Token;

import com.attilax.lang.text.strUtil;

import com.attilax.util.numUtil;

2.4. public class LowerLetterState extends State {

@Override

public void handle(String sampleParameter, Context context) {

// TODO Auto-generated method stub

if(MoveNextisEnd(context) )

return;

String trim = context.curToken.value.trim();

String allUpperLetter =trim.substring(0,trim.length()-1);

if(allUpperLetter.startsWith("J"))

System.out.println("");

if(strUtil.isBigLetter(allUpperLetter)  && allUpperLetter.length()>1)  //multi upperLetter

{

final String word=allUpperLetter.substring(0,trim.length()-2);

Token t=new Token(){

{

this.value=word;

}

};

context.tokenList.add(t);

Token t2=new Token();

t2.value=trim.substring( trim.length()-2);

context.curToken=t2;

//context.tokenList.add(t2);

}

char curChar=context.sa[context.curcharIndex];

if(strUtil.isBigLetter(curChar))

{

addCurTokenNnewToken(context, curChar);

context.state=new BigCaseLetterState();

}

if(strUtil.isLowerLetter(curChar))

{

context.curToken.value=context.curToken.value+String.valueOf(curChar);

// context.state=new LowerLetterState();  //state not change

}

if(numUtil.isNum(curChar))

{

addCurTokenNnewToken(context, curChar);

context.state=new NumState();

}

}

package com.attilax.fsm.camelScanner;

import com.attilax.fsm.Context;

import com.attilax.fsm.FinishState;

import com.attilax.fsm.State;

import com.attilax.fsm.Token;

import com.attilax.lang.text.strUtil;

import com.attilax.util.numUtil;

2.5. public class NumState extends State {

@Override

public void handle(String sampleParameter, Context context) {

// TODO Auto-generated method stub

if(MoveNextisEnd(context) )

return;

char curChar=context.sa[context.curcharIndex];

if(strUtil.isBigLetter(curChar))

{

addCurTokenNnewToken(context, curChar);

context.state=new BigCaseLetterState();

}

if(strUtil.isLowerLetter(curChar))

{

addCurTokenNnewToken(context, curChar);

context.state=new LowerLetterState();

}

if(numUtil.isNum(curChar))

{

context.curToken.value=context.curToken.value+String.valueOf(curChar);

// context.state=new NumState();

}

}

}

}

Atitit. camel分词器 分词引擎 camel拆分 的实现设计的更多相关文章

  1. Atitit..状态机与词法分析  通用分词器 分词引擎的设计与实现 attilax总结

    Atitit..状态机与词法分析  通用分词器 分词引擎的设计与实现 attilax总结 1. 状态机 理论参考1 2. 词法分析理论1 3. 词法分析实例2 4. ---code fsm 状态机通用 ...

  2. IKanalyzer分词器分词并且统计词频

    <dependency> <groupId>com.janeluo</groupId> <artifactId>ikanalyzer</artif ...

  3. Apache Lucene(全文检索引擎)—分词器

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 本项目Demo已上传GitHub,欢迎大家fork下载学习:https://gith ...

  4. Lucene第二篇【抽取工具类、索引库优化、分词器、高亮、摘要、排序、多条件搜索】

    对Lucene代码优化 我们再次看回我们上一篇快速入门写过的代码,我来截取一些有代表性的: 以下代码在把数据填充到索引库,和从索引库查询数据的时候,都出现了.是重复代码! Directory dire ...

  5. ES系列一、CentOS7安装ES 6.3.1、集成IK分词器

    Elasticsearch 6.3.1 地址: wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3. ...

  6. ElasticSearch最全分词器比较及使用方法

    介绍:ElasticSearch 是一个基于 Lucene 的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口.Elasticsearch 是用 Java 开 ...

  7. Elastic Search中normalization和分词器

    为key_words提供更加完整的倒排索引. 如:时态转化(like | liked),单复数转化(man | men),全写简写(china | cn),同义词(small | little)等. ...

  8. ElasticSearch(四)查询、分词器

    正向索引 正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档. 这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于 ...

  9. Elasticsearch Analyzer 内置分词器

    Elasticsearch Analyzer 内置分词器 篇主要介绍一下 Elasticsearch中 Analyzer 分词器的构成 和一些Es中内置的分词器 以及如何使用它们 前置知识 es 提供 ...

随机推荐

  1. 【DFS】Codeforces Round #398 (Div. 2) C. Garland

    设sum是所有灯泡的亮度之和 有两种情况: 一种是存在结点U和V,U是V的祖先,并且U的子树权值和为sum/3*2,且U不是根,且V的子树权值和为sum/3. 另一种是存在结点U和V,他们之间没有祖先 ...

  2. STL之priority_queue2

    描述 使用STL中的优先队列,将一个字符串中的各个字符按照ASCII从小到大顺序排列. 部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码. int main() { int n; cin&g ...

  3. 【记录一下】phpMyAdmin 4.5.0-beta1 发布,要求 PHP 5.5

    详情点击: [开源中国]http://www.oschina.net/news/65696/phpmyadmin-4-5-0-beta1 [phpMyAdmin]https://www.phpmyad ...

  4. 正版greenvpn

    短网址 http://jsq.re(建议收藏,长期有效)长网址 https://www.greenjsq.me/网址更新页面 http://www.greenvpn.site

  5. Jenkins持续集成实战总结

    原文:https://my.oschina.net/CandyDesire/blog/341331#comment-list 持续集成 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何 ...

  6. Coherence装载数据的研究 - Invocation Service

    这里验证第三个方法,原理是将需要装载的数据分载在所有的存储节点上,不同的地方是利用了存储节点提供的InvocationService进行装载,而不是PreloadRequest, 原理如图 前提条件是 ...

  7. 想使用gevent、mysql、sqlalchemy实现python项目协程异步达到并发的效果

    如题,但是查看了很多资料,都说python这边的mysql不支持异步并发,只能阻塞进行,心塞30秒,暂时放弃这方面的研究 如果不操作数据库的化,比如请求url.操作文件,还是可以用gevent来异步实 ...

  8. linux下GPRS模块的应用程序

    ---------------------------------------------------------------------------------------------------- ...

  9. 如何解决nagios安装及运行在的常见错误?(转)

    一.安装nrpe的时候,提示:checking for SSL headers… configure: error: Cannot find ssl headers 解决方法如下: yum -y in ...

  10. Vue生命周期各阶段发生的事情

    首先,参考之前一篇vue生命周期的总结:Vue生命周期总结 接下来我们来分析下官方文档经典流程图,每个阶段到底发生了什么事情. 1.在beforeCreate和created钩子函数之间的生命周期 在 ...