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 提供 ...
随机推荐
- Jenkins集成SonarQube
sonar安装配置 准备软件包 安装 mysql5.6+ 创建数据库sonar,字符集编码utf8 新建用户如heboan 因为sonarqube不能使用root用户运行 调整系统参数,/etc/se ...
- [BZOJ4367][IOI2014]Holiday(决策单调性+分治+主席树)
4367: [IOI2014]holiday假期 Time Limit: 20 Sec Memory Limit: 64 MBSubmit: 421 Solved: 128[Submit][Sta ...
- [Contest20180314]学习
为了响应班级组团学习的要求,班主任xx将班上的$n$个同学编成了$m$个学习小组. 班长小r作为资深OI选手,他发现班级里存在一个可以量化的学习激♂情,并且这个激情跟组内成♀对的同学数量相关.若有$x ...
- 【AC自动机】【动态规划】poj3691 DNA repair
http://blog.csdn.net/kk303/article/details/6929641 http://blog.csdn.net/human_ck/article/details/657 ...
- 【后缀数组】poj3693 Maximum repetition substring
sa在清空方面存在一些奇怪的问题……难以ac.(留坑?)
- 通信编码解码 c11 实现 [ lua 专用版]
#include <istream> #include <ostream> #include <iostream> #include <strstream&g ...
- Spring使用ComponentScan扫描Maven多模块工程的其它模块
说明:在新建好了Maven多模块工程后,如果想要在其它模块也能使用Spring的对象管理,比如@Autowrited这些注入方式,那么就必须开启包扫描的功能才能使其进行注入到Spring的对象管理中. ...
- CASJAVA一些理解
如果不用锁机制如何实现共享数据访问.(不要用锁,不要 用sychronized 块或者方法,也不要直接使用 jdk 提供的线程安全的数据结构,需要自己实现一个类来保证多个线程同时读写这个类中的共享 ...
- 【转载】【Todo】Nodejs的优缺点
Nodejs的优缺点,这里面讲的比较详细.有时间可以多看看别人的分析. https://www.zhihu.com/question/19653241 Node.js 的架构与 Django, Rai ...
- javascript快速入门14--DOM基础
DOM(Document Object Model)——文档对象模型 什么是DOM? Document Object Model (DOM)是HTML和XML文档的编程接口.它提供了上述文档的一种结构 ...