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. C++—揭秘大牛博客一些不同凡人的写法

    天下之大,无奇不有,C++也是这样,今天小编来盘点几个有意思的代码,看看你认识几个?以后见到之后千万别装不认识. 一.基础篇——不一样的输出 1.cerr 输出 cout和cerr究竟有什么不同?这也 ...

  2. bit & byte & B & KB & Kbps & KBps & ps

    存储单位bit & byte & B & KB & Kbps & KBps & ps    (bit,位:byte,字节:区别) Bit,位 :二进制数 ...

  3. PKUSC2018训练日程(4.18~5.30)

    (总计:共66题) 4.18~4.25:19题 4.26~5.2:17题 5.3~5.9: 6题 5.10~5.16: 6题 5.17~5.23: 9题 5.24~5.30: 9题 4.18 [BZO ...

  4. 【动态规划】【记忆化搜索】CODEVS 3415 最小和 CodeVS原创

    f(l,r,i)表示第i段截第l位到第r位时,当前已经得到的价格最小值,可以很显然地发现,这个是没有后效性的,因为对之后截得的段都不造成影响. 注意水彩笔数=1的特判. 递归枚举当前段的r求解(∵l是 ...

  5. (转)[Unity3D]计时器/Timer

    http://blog.sina.com.cn/s/blog_5b6cb9500101aejs.html 项目中管理计时器太混乱难看了,用好听点的话来说就是代码不优雅.   想了下就随手简单写了个时间 ...

  6. iOS 文字渐变色

    // 创建UILabel UILabel *label = [[UILabel alloc] init]; label.text = @"我是渐变的label"; [label s ...

  7. es6类声明,class总结

    1.class的基本写法 class a{ // 传入参数或者写入固定参数 constructor(a,b){ this.a=a this.b=b } // 可直接调用的计算后的参数 get c(){ ...

  8. dd-wrt端口映射不出去的解决办法

    本人有一个巴法络的WZR-HP-G450H系统自带的固件不好用,但是随机却带了一个官方定制的DD-WRT,于是刷了去,但是今天在做一个FTP的时候突然无论怎么样映射或是做DMZ都不会出去,终于找到解决 ...

  9. mac上虚拟机:VMWare Fusion, VirtualBox, Parallels Desktop, CrossOver, Veertu

    作者:Louis Tong链接:https://www.zhihu.com/question/35731328/answer/66127970来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非 ...

  10. fl2440 platform总线led字符设备驱动

    首先需要知道的是,设备跟驱动是分开的.设备通过struct device来定义,也可以自己将结构体封装到自己定义的device结构体中: 例如:struct platform_device: 在inc ...