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 提供 ...
随机推荐
- 11、Flask实战第11天:蓝图
蓝图的基本使用 之前我们写的代码都是集中在一个主程序文件里面.这样不利于分层解耦和维护.蓝图的作用就是让我们的flask项目更加模块化结构更加清晰,可以将相同模块的视图函数放在同一个蓝图下,同一个文件 ...
- matlab的table数据类型初步接触
由于数据分析,接触到cell的使用,字符串的使用以及ASCII的使用,但是发现在matlab中进行这样的操作相对繁琐,然后知道了table数据类型,是matlab新的数据类型,于2013版开始引入.据 ...
- 加密连接工具Cryptcat
加密连接工具Cryptcat Cryptcat是网络工具Netcat的加密版本.Cryptcat支持TCP.UDP两种网络协议.它可以在两个计算机之间建立指定的连接,并使用特定的密钥对传输数据进行 ...
- 【线性基】【贪心】【独立环】bzoj2115 [Wc2011] Xor
网上到处都是题解,自己画个图也很好理解.虽然环的个数很多,但是都可以通过独立环之间异或出来,不用管. 独立环求法:生成树之后,每次向图里添加非树边(u,v),则这个独立环的异或和为sum[u]^sum ...
- python3 开发面试题(创建表结构)6.9
纯sql语句写出: '''设计 图书管理系统 表结构: - 书 - 书名 - 作者 - 姓名 - 出版社 - 出版社名称 - 地址 一本书只能由一家出版社出版 --> 多对一(书对出版社) 一本 ...
- [读书笔记]iOS 7 UI设计 对比度
好久没写随笔了,最近在读<iOS 7 byTutorials>,很不错,推荐给大家. 每一个好的程序员也都是一个设计师,不懂设计的程序员不是好的CTO.哈哈,开个小玩笑. iOS 7设计的 ...
- jvm-监控指令-jstack
格式: jstack [option] vmid 选项: -l 除了堆栈信息外,显示关于锁的附加信息. 作用: 生成虚拟机当前时刻的线程快照. 目的: 定位线程长时间停顿的原因,比如线程间死锁.死循环 ...
- 如何垂直居中元素(浮动元素&居中一个<img>)?
1.如何居中一个浮动元素? 方法一:已知元素的高度 <!DOCTYPE html> <html lang="en"> <head> < ...
- Session集中式管理
Asp.net Session集中式管理主要有StateServer(状态服务器).Sqlserver(数据库服务器).自定义(如Redis缓存服务器)等,本文主要介绍StateServe ...
- css活用,半星星的效果
1.首先下载要用到星星字体 http://www.w3cplus.com/w3cplusDemo/demos/webFontIcon.html 2.css .cleanfloat::after{dis ...