Atitit. camel分词器 分词引擎 camel拆分 的实现设计
Atitit. camel分词器 分词引擎 camel拆分 的实现设计
1.2. 特殊处理 对于JSONObject 多个大写字母连写的处理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拆分 的实现设计的更多相关文章
- Atitit..状态机与词法分析 通用分词器 分词引擎的设计与实现 attilax总结
Atitit..状态机与词法分析 通用分词器 分词引擎的设计与实现 attilax总结 1. 状态机 理论参考1 2. 词法分析理论1 3. 词法分析实例2 4. ---code fsm 状态机通用 ...
- IKanalyzer分词器分词并且统计词频
<dependency> <groupId>com.janeluo</groupId> <artifactId>ikanalyzer</artif ...
- Apache Lucene(全文检索引擎)—分词器
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 本项目Demo已上传GitHub,欢迎大家fork下载学习:https://gith ...
- Lucene第二篇【抽取工具类、索引库优化、分词器、高亮、摘要、排序、多条件搜索】
对Lucene代码优化 我们再次看回我们上一篇快速入门写过的代码,我来截取一些有代表性的: 以下代码在把数据填充到索引库,和从索引库查询数据的时候,都出现了.是重复代码! Directory dire ...
- ES系列一、CentOS7安装ES 6.3.1、集成IK分词器
Elasticsearch 6.3.1 地址: wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3. ...
- ElasticSearch最全分词器比较及使用方法
介绍:ElasticSearch 是一个基于 Lucene 的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口.Elasticsearch 是用 Java 开 ...
- Elastic Search中normalization和分词器
为key_words提供更加完整的倒排索引. 如:时态转化(like | liked),单复数转化(man | men),全写简写(china | cn),同义词(small | little)等. ...
- ElasticSearch(四)查询、分词器
正向索引 正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档. 这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于 ...
- Elasticsearch Analyzer 内置分词器
Elasticsearch Analyzer 内置分词器 篇主要介绍一下 Elasticsearch中 Analyzer 分词器的构成 和一些Es中内置的分词器 以及如何使用它们 前置知识 es 提供 ...
随机推荐
- [CF403D]Beautiful Pairs of Numbers
题意:给定$n,k$,对于整数对序列$\left(a_1,b_1\right),\cdots,\left(a_k,b_k\right)$,如果$1\leq a_1\leq b_1\lt a_2\leq ...
- 【set】bzoj2761 [JLOI2011]不重复数字
set去重. #include<cstdio> #include<set> using namespace std; set<int>S; ],b[],en; in ...
- Djanog|requirements.txt生成
Django | requirement.txt 生成 pip django 1 pip 通常我们熟悉使用的都是 pip, 这个工具确实方便项目管理依赖包.当想把当前项目依赖的包的名称和版本导入指 ...
- Eclipse / Pycharm | 使用过程中的一些问题笔记
最近有比较多的用到这两款工具,其中也遇到一些问题,知道了一些快捷键 快捷键什么的这里就不讲了,去网上搜搜,经常使用下,自然就熟悉了 主要记录一下我遇到的几个问题 文章目录 Pycharm出现的部分快捷 ...
- Saga的实现模式——观察者(Saga implementation patterns – Observer)
https://lostechies.com/jimmybogard/2013/03/11/saga-implementation-patterns-observer/ 侵删. NServiceBus ...
- 【spring data jpa】jpa中使用in查询或删除 在@Query中怎么写 ,报错:org.springframework.expression.spel.SpelEvaluationException: EL1007E: Property or field 'goodsConfigUid' cannot be found on null 怎么处理
示例代码如下: @Modifying @Transactional @Query("delete from GoodsBindConfigMapping gbc " + " ...
- openstack 动态加载usb,需要修改kvm虚拟机的xml文件
一.利用libvirt命令动态挂载 在利用KVM的虚拟桌面应用中,有时候需要在虚拟桌面起来后还能够动态的挂载或卸载数据盘,以达到类似热插盘U盘或移动硬盘的效果,当然管理上需要做处理.如果纯粹中技术上来 ...
- 一起來玩鳥 Starling Framework(7)MovieClip
承上一篇,我們接著來講最後一個IAnimatable類別,MovieClip.Starling的MovieClip跟native的MovieClip不太一樣,它只能接收一個Vector.<Tex ...
- 蓝鲸安装Agent
1. APPO 所在机器(在 app 运行所在机器) 必须能通过 ssh 登陆到 Agent 机器2. Agent 所在机器可以访问到 zk 的端口3. 支持 Linux/Windows/AIX 操作 ...
- Web应用——驾培管理系统之个人管理(作者:小圣)
Web应用--驾培管理系统之个人管理(作者:小圣) 本节博文旨在实现本次Web应用的个人管理功能.能够在登陆后 查看并改动个人信息或者进行password改动.同一时候,在输入的时候进行表单验证,验证 ...