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 提供 ...
随机推荐
- luogu P3368 【模板】树状数组 2
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...
- [BZOJ1069][SCOI2007]最大土地面积(水平扫描法求凸包+旋转卡壳)
题意:在某块平面土地上有N个点,你可以选择其中的任意四个点,将这片土地围起来,当然,你希望这四个点围成. 的多边形面积最大.n<=2000. 先求凸包,再枚举对角线,随着对角线的斜率上升,另外两 ...
- 【点分治】bzoj1316 树上的询问
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; #defin ...
- Maven设置snapshot无法在远程仓库下载的问题解决
检查步骤如下: 1.检查nexus是否纳入public版本中: 2.配置中是否启用snapshots功能.以下方法两种设置都可以,任选一个即可. 一种是在项目pom.xml使用: <reposi ...
- Makefile的制作
一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中,makefile定义系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因 ...
- nagios监控mongodb
nagios本身不提供监控mongodb的服务,需要安装插件 已经有大神写好的插件nagios_plugin-mongodb 地址https://github.com/mzupan/nagios-pl ...
- C# SendMail 发送邮件
最近因为用的发送邮件的地方,就查询了资料,总结以下几个方法 1.利用新浪邮箱发送 2.利用公司邮箱发送 3.利用CDO发送,这种方式要引用Interop.ADODB.dll(http://www.no ...
- IBM AppScan安全測试一例——已解密的登录请求
问题严重级别:高 此类问题在做政府项目(第三方软件评測中心)验收的时,须要马上整改.例如以下图:
- Hadoop之Sqoop详解
sqoop数据迁移1.简介 sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具. 导入数据:MySQL,Oracle导入数据到Hadoop的HDFS.HIVE.HBA ...
- mycat读写分离与主从切换
1, 分库分表的优缺点.以及为什么分表方式无法成为主流? 分表:在台server上,长处是易维护,相似表分区.缺点是在一台dbserver上.无法分担IO.负载集中. 分库:在多台server上,长处 ...