精华内容
下载资源
问答
  • table中有一个字段,id,它是由Yunsha_000001的规则组成的。 每当插入一条数据的时候,自动生成的id是自动增加的,如何实现数字部分的自动增长? select 'Yunsha_'||lpad(substr(nvl(max(id),'Yunsha_000000'),8)+...

    table中有一个字段,id,它是由Yunsha_000001的规则组成的。

    每当插入一条数据的时候,自动生成的id是自动增加的,如何实现数字部分的自动增长?

     select  'Yunsha_'||lpad(substr(nvl(max(id),'Yunsha_000000'),8)+1,6,'0') as maxid from table

    转载于:https://www.cnblogs.com/zhutouying/p/3229509.html

    展开全文
  • 3.去除非中文前缀 @Test public void test3 ( ) { String olaVlaue = "zhans1e3张三黄123zhangsan李四色的" ; int position = 0 ; for ( int i = 0 ; i < olaVlaue . length ( ) ; i ++ ) {...

    1.去除括号及括号里面的内容

    @Test
    	public void test1() {
    		String oldValue="哈哈哈(不要了)";		
    		System.out.println(oldValue.replaceAll("(\\()(.*?)(\\))", ""));
    	}
    

    运行结果:
    在这里插入图片描述

    2.去除“的”字结构
    (主要是找到“的”字的Unicode码)

    @Test
    	public void test2() {
    		String oldValue="我家的卧室有一台很大的电视";
    		
    		System.out.println(oldValue.replaceAll("\\u7684", ""));
    		
    	}
    

    运行结果:
    在这里插入图片描述

    3.去除非中文前缀

    @Test
    	public void test3() {
    		String olaVlaue="zhans1e3张三黄123zhangsan李四色的";
    		int position=0;
    		for(int i=0;i<olaVlaue.length();i++){
    			if(!String.valueOf(olaVlaue.charAt(i)).matches("[\u4e00-\u9fa5]")) {
    				position++;
    			   continue;
    			}else {
    				break;
    			}
    		}
    		olaVlaue=olaVlaue.substring(position, olaVlaue.length());
    		System.out.println(olaVlaue);
    	}
    

    运行结果:
    在这里插入图片描述

    4.去除非中文后缀

    @Test
    	public void test4() {
    		String olaVlaue="张三黄123zhangsan李四色的fafa中华123za";
    		int position=0;
    		for(int i=olaVlaue.length()-1;i>=0;i--){
    			if(!String.valueOf(olaVlaue.charAt(i)).matches("[\u4e00-\u9fa5]")) {
    				position++;
    			   continue;
    			}else {
    				break;
    			}
    		}
    		olaVlaue=olaVlaue.substring(0, olaVlaue.length()-position);
    		System.out.println(olaVlaue);
    	}
    

    运行结果:
    在这里插入图片描述

    5.自定义规则进行规范数据

    @Test
    	public void test5() {
    		
    		String regex="[\\u4e00-\\u9fa5]";//自定义正则表达式(可以前端传入)
    		String str="dada张三lkdlsl李四";
    		Pattern pattern=Pattern.compile(regex);
    		Matcher matcher=pattern.matcher(str);
    		int count=0;
    		String newStr="";
    		while(matcher.find()) {
    			//start()和end() 代表的是字符串符合正则表达式的字符下标
    			 System.out.println("Start():"+matcher.start());
    			 System.out.println("end()"+matcher.end());
    			newStr+=str.substring(matcher.start(),matcher.end());
    			
    		}
    		System.out.println(newStr);
    	}
    

    在这里插入图片描述

    展开全文
  • AutoPrefixUrlMapping.javapublic class AutoPrefixUrlMapping extends RequestMappingHandlerMapping {@Value("${api-package}")private String apiPackagePath;@Overrideprotected RequestMappingInfo getMappingF...

    AutoPrefixUrlMapping.java

    public class AutoPrefixUrlMapping extends RequestMappingHandlerMapping {

    @Value("${api-package}")

    private String apiPackagePath;

    @Override

    protected RequestMappingInfo getMappingForMethod(Method method, Class> handlerType) {

    RequestMappingInfo mappingInfo = super.getMappingForMethod(method, handlerType);

    if(mappingInfo != null){

    String prefix = this.getPrefix(handlerType);

    return RequestMappingInfo.paths(prefix).build().combine(mappingInfo);

    }

    return mappingInfo;

    }

    private String getPrefix(Class> handlerType){

    String packageName = handlerType.getPackage().getName();

    String dotPath = packageName.replaceAll(this.apiPackagePath,"");

    return dotPath.replace(".", "/");

    }

    }

    AutoPrefixConfiguration.java

    @Configuration

    public class AutoPrefixConfiguration implements WebMvcRegistrations {

    @Override

    public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {

    return new AutoPrefixUrlMapping();

    }

    }

    application.yml

    api-package: com.example.demo

    DemoController

    @RestController

    @RequestMapping("/demo")

    public class DemoController {

    @GetMapping("/a")

    public ResponseEntity getUser() {

    return ResponseEntity.status(HttpStatus.OK).body("22");

    }

    目录结构

    9607f1032d6a00302dd92d96440b4e46.png

    展开全文
  • 中文分词是很多文本分析的基础。最近一个项目,输入一个地址,需要识别出地址中包含的省市区街道等单词。与以往的分词技术不同。jieba/hanlp等常用的分词技术,除了基于词典,还有基于隐马尔科夫/条件随机场等机器...

    说明

    中文分词是很多文本分析的基础。最近一个项目,输入一个地址,需要识别出地址中包含的省市区街道等单词。与以往的分词技术不同。jieba/hanlp等常用的分词技术,除了基于词典,还有基于隐马尔科夫/条件随机场等机器学习技术对未登录词的分词,有一定的概率性。而我们所使用的地址识别,要求必须基于词库进行精确的分词。这些比较高级的分词技术反而成为了不必要的风险。

    另外还有一个原因是,流行的分词技术对多用户词典和词典的动态管理支持也不是很好。本项目就实现了一个可以多词典间相互隔离的分词工具。

    基于前缀词典树的中文分词概念简单。其中使用到的trie树/有向无环图(dag)/动态规划计算最长路径等算法,可以说是教科书一样的例子。所以我就自己实现了一遍,测试下来效果还不错。

    Trie树(前缀词典树)

    trie,又称前缀树字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。 

     

    在图示中,键标注在节点中,值标注在节点之下。每一个完整的单词对应一个特定的整数。

    键不需要被显式地保存在节点中。图示中标注出完整的单词,只是为了演示trie的原理。 

    trie中的键通常是字符串,但也可以是其它的结构。trie的算法可以很容易地修改为处理其它结构的有序序列,比如一串数字或者形状的排列。比如,bitwise trie中的键是一串位元,可以用于表示整数或者内存地址。

    在本实现中,节点的值主要是单词的词频。

    初始化时,往根节点中添加一个单词,以及对应的词频。根节点生成子节点递归调用。但是这里方法并没有写成递归,而是写成了循环。因为,递归相对来说不好理解,而且debug也不显而易见。一个基本原则是,对于java这种非函数式语言,凡是使用递归的地方都可以改成循环。

    1     public void fillSegment(char[] charArray, int wordFrequency) {
    2         int count = charArray.length;
    3         CharNode charNode = this;
    4         for (int i = 0; i < count; i++) {
    5             CharNode child = charNode.searchOrAddChild(charArray[i]);
    6             charNode = child;
    7         }
    8         charNode.wordFrequency += wordFrequency;
    9     }
    View Code

    初始化后,就是搜索了。传入一个字符串,指定从哪个字符开始搜索,找到所有可能匹配的单词。这里就体现出了trie树优于hashmap的地方。在trie树中,一旦找不到子节点,就可以返回了。但hash并不具有这种特性,hash需要把字符串的所有子字符串遍历一遍才知道。

     1     public List<HitWord> match(char[] chars, int beginIndex) {
     2         List<HitWord> result = new ArrayList<>();
     3         int count = chars.length;
     4         if (beginIndex >= count - 1) {
     5             return result;
     6         }
     7         CharNode charNode = this;
     8         for (int i = beginIndex; i < count; i++) {
     9             CharNode tmpCharNode = charNode.searchChild(chars[i]);
    10             if (tmpCharNode == null) {
    11                 break;
    12             }
    13             charNode = tmpCharNode;
    14             if (tmpCharNode.wordFrequency > 0) {
    15                 HitWord hitWord = new HitWord(i, tmpCharNode.wordFrequency);
    16                 result.add(hitWord);
    17             }
    18         }
    19         return result;
    20     }
    View Code

    这里返回结果是一个list,因为一个字符串可能匹配到多个结果。比如“上海市”去匹配,词库里有“上海”和“上海市”,那返回的就是List.size() == 2的结果。

    DAG(有向无环图)

    一个语句根据词频生成一个有向无环图。分词的原理我懒得说了。看下这个链接吧。http://www.cnblogs.com/zhbzz2007/p/6084196.html。

    生成dag的关键代码如下。

     1     private List<List<HitWord>> createDag(String sentence){
     2         List<List<HitWord>> result = new ArrayList<>();
     3         char[] chars = sentence.toCharArray();
     4         int count = chars.length;
     5         for(int i = 0; i < count; i++){
     6             List<HitWord> matchList = dictionaryMgr.match(chars, i, this.dictionaryKey);
     7             result.add(matchList);
     8         }
     9         return result;
    10     }
    View Code

    生成的结果是一个二维List。第一维下标对应句子字符串下标。第二维下标对应图的路径:路径包含路径终点下标及路径权重(词频)。

    下面是基于dag寻找最优路径。这里用到了动态规划的思想。由于每个节点都是有下标的,而且路径的起点下标恒大于终点下标,基于这个特点,其实这个动态规划实现的还是比较简单粗暴的。不过还好,还算非常简单有效。

     1     private Map<Integer, Integer> calculateRouter(List<List<HitWord>> dag){
     2         int count = dag.size();
     3         Map<Integer, Integer> router = new HashMap<>(count);
     4         double[] frequencies = new double[count + 1];
     5         for(int i = count - 1; i >= 0; i--){
     6             List<HitWord> list = dag.get(i);
     7             if(list.isEmpty()){
     8                 frequencies[i] = frequencies[i + 1];
     9                 continue;
    10             }
    11             for (HitWord hitWord : list) {
    12                 int endIndex = hitWord.getEndIndex();
    13                 double tmpFrequency = hitWord.getFrequency() + frequencies[endIndex + 1];
    14                 if(tmpFrequency > frequencies[i]){
    15                     frequencies[i] = tmpFrequency;
    16                     router.put(i, endIndex);
    17                 }
    18             }
    19         }
    20         return router;
    21     }
    View Code

    分词

    有了路径,就可以分词了。路径是一个map,key为起点,value为终点。根据路径进行分词,就很简单了。

     1     private List<String> cutFromRouter(String sentence, Map<Integer, Integer> router){
     2         List<String> result = new ArrayList<>();
     3         int count = sentence.length();
     4         for(int i = 0; i < count; i++){
     5             int j = i;
     6             if(router.containsKey(i)){
     7                 j = router.get(i);
     8             }
     9             String word = sentence.substring(i, j + 1);
    10             i = j;
    11             result.add(word);
    12         }
    13         return  result;
    14     }
    View Code

    最后是分词入口,将生成dag,生成router,分词的 三个方法连起来。

    1     public List<String> cut(String sentence){
    2         List<List<HitWord>> dag = this.createDag(sentence);
    3         Map<Integer, Integer> router = this.calculateRouter(dag);
    4         return this.cutFromRouter(sentence, router);
    5     }
    View Code

    附:

    代码git,https://github.com/shlugood/wordcut 如果感兴趣,可下载下来。pom项目,还带有测试词典和UT。

    看下我跑的UT吧。

    1 [北京, 顺义区, 李桥镇, 馨, 港, 庄, 园, 8, 区, 8, 0, 号, 楼, 1, 2, 3, 单, 元, 2, 0, 1]
    2 [浙江, 杭州市, 余杭区, 五常街道, 西, 溪, 庭, 院, 9, 8, —, 2, —, 4, 4, 4]
    3 [广东, 深圳市, 宝安区, 松岗街道, 松岗镇, 溪, 头, 村, 委, 西, 六, 十, 七, 巷, 一, 百, 二, 十, 三, 号]
    View Code

     

    转载于:https://www.cnblogs.com/caoshenglu/p/9350710.html

    展开全文
  • max key length is 767 bytes 767字节是InnoDB表的前缀限制。 要解决您须要: 更新你的database.yml文件 升级到MySQL 5.7或编辑您的my.cnf 以启用innodb_large_prefix 将行格式更改成DYNAMIC 使用Ruby on Rails...
  • 著名信息学用书《算法导论》的中文版(3-1) 这是麻省理工学院2001年秋季课程《算法导论》的所有课程资料,包括有:课本(含有习题,chm格式),课堂讲稿(ppt转pdf格式),作业及其答案(pdf格式),测验及其答案(pdf...
  • 在没有升级系统之前,网上的很多方法都可以使用,用来更改Mac命令行的前缀,因为太长了,并不好看。但是升级系统之后,Mac的bash换成zsh,原来的方法不管用了,因为bash命令行修改的是/etc/bashrc文件,所以现在应该...
  • 二元前缀码:任何字符的代码不能作为其它字符代码的前缀.eg.Q={001,00,010,01}不是二元前缀代码,如序列0100001会产生歧义设C={x1,x2,…,xn}是n个字符的集合,f(xi)为xi出现的频率,d(xi)为xi的码长,i=1,2,…,n....
  • 767字节是InnoDB表的前缀限制。 要解决您需要: 更新你的 database.yml 文件 升级到MySQL 5.7或编辑您的 my.cnf  以启用 innodb_large_prefix 将行格式更改为DYNAMIC 使用Ruby on Rails迁移更改...
  • 支持中文的基于词为基本粒度的前缀树(prefix trie)python实现 Trie树,也叫字典树、前缀树。可用于”predictive text”和”autocompletion”。亦可用于统计词频(边插入Trie树边更新或加入...
  • 下面基于字典树实现一个简单的中文前缀搜索提示功能。 用户输入的时候自动提示。 # -*- encoding=utf-8 -*- # 导入包 from pytrie import StringTrie # 自定义字典树类 class Suggester(object): ...
  • Python 字符串前缀

    2019-12-28 10:16:39
    后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码。 "r"前缀 作用: 去掉反斜杠的转移机制。 (特殊字符:即那些,反斜杠加上对应字母,表示对...
  • 但是,当查找集合X中所有字符串两两都不共享前缀时,trie中出现最坏情况。除根之外,所有内部结点都自由一个子结点。此时的查找时间复杂度蜕化为O(d*(n^2) 5.JAVA源代码 class TrieNode { //存储子节点 TrieNode[] ...
  • 前缀表达式指二元运算符位于两个运算数之前,例如2+3*(7-4)+8/4的前缀表达式是:+ + 2 * 3 - 7 4 / 8 4。请设计程序计算前缀表达式的结果值。 输入格式: 输入在一行内给出不超过30个字符的前缀表达式,只包含+、-...
  • 字符串常量,前缀带不带u不影响 encode(),把str类型的字符串转换为bytes字符串。 utf-8用三个十六进制来表示一个中文字符,而gbk用二个十六进制来表示一个中文字符。 str类型的字符串,每个字符用字符本身或者\u...
  • 常见英语前缀

    千次阅读 2012-12-13 18:52:24
    中文中:  [prefix] 以结合形式出现,与一词、词根或短语开头的一个音或连续几个音相接,或书写中一个字母或连续几个字母用以产生出派生词或变化形式。汉语里指在词根前面的构词成分。如“阿哥”、“阿姨”中的...
  • Python字符串前缀

    2020-10-07 22:01:47
    字符串前缀 含义 u 表示 unicode,可存储中文。 b 表示 ASCII,不能存储中文。 r 表示 raw,不识别转义字符。 f 表示 format,格式化。 使用 print(r"tes\nt")
  • … 就是那道中文题 Description 有一天某人得到了一组数据,然后烦人的是,有位同学老是询问某一段区间[L,r]范围的平均值(只要整数部分)= =。某人无法解决,向你求救、 Input 多组测试,处理到文件末尾。一行...
  • 通用工程前缀

    2013-11-02 10:56:40
    前缀 缩写 10的乘方 中文翻译 Ciga G 10^9 吉 Mega M 10^6 兆 Kilo K 10^3 千 Mili m 10^-3 毫 Micro u 10^-6 微 Nano n 10^-9 纳 Pico p 10^-12 皮
  • 1、字符串前加 u例子:u"字符串中有中文"含义:前缀u表示该字符串是unicode编码,Python2中用,用在含有中文字符的字符串前,防止因为编码问题,导致中文出现乱码。另外一般要在文件开关标明编码方式采用utf8。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,072
精华内容 428
关键字:

中文前缀