- 浏览: 203041 次
- 性别:
- 来自: 北京
最新评论
-
毛毛虫小白:
您好,这里说的基于角色标注就是用到了字体位频率表里,在“名字内 ...
介绍一种基于角色标注+字词体位法的人名识别方式-Ansj中文分词 -
assasszt:
请问 能不能加入写入文件功能,不然的话 是每次 执行 都是一个 ...
Java版本的BloomFilter (布隆过滤器) -
lhj_6270:
楼主不错。果然不是一般人。再接再厉弄个软件出来。
Java版本的BloomFilter (布隆过滤器) -
ansjsun:
fncj 写道你好,我们最近要搞一个人名识别功能,发现有两个问 ...
介绍一种基于角色标注+字词体位法的人名识别方式-Ansj中文分词 -
fncj:
你好,我们最近要搞一个人名识别功能,发现有两个问题:1、里有不 ...
介绍一种基于角色标注+字词体位法的人名识别方式-Ansj中文分词
没什么只是.一个demo
package net.csdn.service.tag.impl; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import love.cq.util.StringUtil; import net.csdn.exception.ArgumentErrorException; import net.csdn.pojo.tag.ObjTag; import net.csdn.pojo.tag.Tag; import net.csdn.service.tag.util.domain.MyTag; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.lang.StringUtils; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.log.Log; import org.nutz.log.Logs; @IocBean public class DocTagService { private static final Log log = Logs.getLog("DocTagService"); @Inject private TagsManageService tagsManageService = null; @Inject private DocStoreRemoteService docStoreRemoteService; public boolean insert(String typeName, String jsonDate, String tagsStr) { if (StringUtils.isBlank(tagsStr)) { throw new ArgumentErrorException("tags 不可以为空"); } ObjTag objTag = null; JSONObject fromObject = JSONObject.fromObject(jsonDate); log.info(fromObject.get("id") + " " + tagsStr); String[] tags = tagsStr.split(","); String body = StringUtil.rmHtmlTag(fromObject.getString("body")); // /如果正文为空 if (StringUtil.isBlank(body) || tags == null || tags.length == 0) { return false; } String tempTagStr = null; // 删除这条记录 delete(typeName, fromObject.getInt("id")); for (int i = 0; i < tags.length; i++) { // 先查询tags是否存在于数据库中.如果不存在就创建一个 tempTagStr = tags[i].toLowerCase().trim(); if (StringUtil.isBlank(tempTagStr)) { continue; } Tag tag = tagsManageService.findTagByName(tempTagStr); if (tag == null) { tag = new Tag(); tag.setName(tempTagStr); tagsManageService.saveTag(tag); } // 插入一条记录到数据库中 objTag = new ObjTag(); objTag.setObject_id(fromObject.getInt("id")); objTag.setTag_id(tag.getId()); objTag.setCreated_at(fromObject.getLong("created_at")); try { objTag.setChannel_id(fromObject.getInt("channel_id")); } catch (Exception e) { log.info("channel get error!"); } tagsManageService.saveAbstractObjTag(typeName, objTag); } return true; } public void setTagsManageService(TagsManageService tagsManageService) { this.tagsManageService = tagsManageService; } /** * 在tag系统中删除文章 * * @param typeName * @param objectId */ public void delete(String typeName, Integer objectId) { // TODO Auto-generated method stub if (objectId == null) { throw new ArgumentErrorException("待删除文章Id 不可以为空"); } tagsManageService.deleteDocTag(typeName, objectId); } /** * 超早tag的数量 * * @param typeName * @param objectId */ public int findTagCount(String typeName, Integer objectId) { // TODO Auto-generated method stub if (objectId == null) { throw new ArgumentErrorException("待删除文章Id 不可以为空"); } return tagsManageService.findTagCount(typeName, objectId); } /** * tag补录,慎用会覆盖用户原本的tag * * @param type * @param fromId * @param endId * @return */ public void updateTagByDoc(String typeName, int fromId, int endId, RecommenderService rs, HashMap<String, Integer> tagMap, boolean needSuggestTag) { // TODO Auto-generated method stub StringBuilder sb = new StringBuilder(); fromId = Math.max(fromId, 1); for (int i = fromId; i <= endId; i++) { if (i % 100 == 0) { sb.append(i); try { insertTagsAndUpdateMongo(typeName, sb.toString(), rs, tagMap, needSuggestTag); } catch (Exception e) { // TODO Auto-generated catch block log.error(e + " " + sb); } sb = new StringBuilder(); } else { sb.append(i + ","); } } // 补录 if (sb != null && sb.length() > 0) { sb.append(0); try { insertTagsAndUpdateMongo(typeName, sb.toString(), rs, tagMap, needSuggestTag); } catch (Exception e) { // TODO Auto-generated catch block log.error(e + " " + sb); } } } /** * 插入tag * * @param typeName * @param ids * @param rs * @param tagMap */ private void insertTagsAndUpdateMongo(String typeName, String ids, RecommenderService rs, HashMap<String, Integer> tagMap, boolean needSuggestTag) { // TODO Auto-generated method stub JSONArray objs = docStoreRemoteService.findByIds(typeName, null, ids); JSONArray newObjs = new JSONArray(); // 如果mongo那什么都没查出来就不走后面的了 if (objs == null || objs.size() == 0) { return; } // 删除所有的关联 tagsManageService.deleteDocTagByIds(typeName, ids); List<ObjTag> all = new ArrayList<ObjTag>(); String title = null; String body = null; // 重新插入 for (Object object : objs) { JSONObject job = (JSONObject) object; // 防止出现空hash if (job.size() <= 3) { continue; } List<MyTag> tag_suggest = null; try { StringBuilder sb = new StringBuilder(); if (needSuggestTag) { try { title = job.getString("title"); } catch (Exception e) { } try { body = job.getString("body"); } catch (Exception e) { } tag_suggest = rs.tag_suggest(title, body, "csdn", 5); for (MyTag myTag : tag_suggest) { all.add(insertTagsAndUpdateMongo(tagMap, job, sb, myTag, typeName)); } } else { String tag = job.getString("tag"); if (StringUtil.isNotBlank(tag)) { String[] tags = tag.split(","); for (String string : tags) { if (StringUtil.isNotBlank(string)) { MyTag myTag = new MyTag(string.trim().toLowerCase(), 0, string.length()); all.add(insertTagsAndUpdateMongo(tagMap, job, sb, myTag, typeName)); } } } else { continue; } } if (StringUtil.isNotBlank(sb) && sb.length() > 1) { job.put("tag", sb.subSequence(0, sb.length() - 1)); newObjs.add(job); log.info("insert " + job.getString("tag")); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } try { // 批量保存关联 if (all.size() == 0) { log.info("not have any change to skip! " + ids.substring(0, 10)); return; } if (needSuggestTag && newObjs.size() > 0) { // 批量修改mongo中的tag log.info("update mongo ok" + newObjs.size()); docStoreRemoteService.update(typeName, newObjs); } StringBuilder sb = new StringBuilder("INSERT INTO "); sb.append(tagsManageService.getTableName(typeName)); ObjTag objTag = null; sb.append(" (tag_id,object_id,created_at,channel_id) values "); for (int i = 0; i < all.size(); i++) { objTag = all.get(i); sb.append("("); sb.append(objTag.getTag_id()); sb.append(","); sb.append(objTag.getObject_id()); sb.append(","); sb.append(objTag.getCreated_at()); sb.append(","); sb.append(objTag.getChannel_id()); if (i == all.size() - 1) { sb.append(");"); } else { sb.append("),"); } } tagsManageService.execute(sb.toString()); log.info("batchSave mysql ok" + all.size()); } catch (Exception e) { // TODO Auto-generated catch block log.error("batchSave mysql error" + ids); e.printStackTrace(); } } private ObjTag insertTagsAndUpdateMongo(HashMap<String, Integer> tagMap, JSONObject job, StringBuilder sb, MyTag myTag, String type) throws InstantiationException, IllegalAccessException { sb.append(myTag.getName() + ","); Integer tagId = tagMap.get(myTag.getName()); // 如果不在hash表中就查数据库 if (tagId == null) { Tag tag = tagsManageService.findTagByName(myTag.getName()); // 如果为空就插入一个 if (tag == null) { tag = new Tag(); tag.setName(myTag.getName()); tagsManageService.saveTag(tag); } // 设置到map中 tagMap.put(tag.getName(), tag.getId()); tagId = tag.getId(); } // 插入一条记录到数据库中 ObjTag objTag = new ObjTag(); objTag.setObject_id(job.getInt("id")); objTag.setTag_id(tagId); objTag.setCreated_at(job.getLong("created_at")); try { objTag.setChannel_id(job.getInt("channel_id")); } catch (Exception e) { objTag.setChannel_id(-1); log.error("channel get error!"); } return objTag; } }
发表评论
-
算法实现系列第六章.桶排序
2013-01-10 15:18 1391package algorithm; /** * 桶 ... -
算法实现系列第五章.viterbi算法
2013-01-10 14:57 2078package algorithm; public cl ... -
算法实现系列第四章.启发式搜索_A*搜索
2013-01-09 14:31 2393..很郁闷启发式搜索和A*搜索.自己对照文档写了下..发现和之 ... -
算法实现系列第三章.快速排序
2013-01-08 16:05 1378先剽窃jdk的... package algorith ... -
算法实现系列第二章.堆排序
2013-01-08 15:56 1374说白了就是二叉树排序..java中hashset中非基本数据类 ... -
算法实现系列第一章.冒泡排序
2013-01-08 15:47 1342package algorithm; public ... -
介绍一种基于角色标注+字词体位法的人名识别方式-Ansj中文分词
2012-09-14 13:35 7212大家好.最近在做分词.在分词中遇到了各种各样的问题 ... -
介绍一种基于角色标注+字词体位法的人名识别方式-Ansj中文分词
2012-09-14 13:04 13大家好.最近在做分词.在分词中遇到了各种各样的问题 ... -
Combining Probabilities-结合概率
2012-04-19 14:23 0这就是联合概率的计算公式 介绍..原文 htt ... -
贝叶斯学习笔记
2012-04-19 11:21 1617一.什么是贝叶斯 ... -
元宵爬虫-YuanXiaoSpider
2012-02-06 12:25 4568翻译了下..没有元宵的淫文啊....所以用PinYing吧.. ... -
一个排好序的数组,找出两数之和为m的所有组合
2012-02-02 16:34 5061public static void main(String[ ... -
<<这就是搜索引擎>>学习笔记-算法之索引压缩
2012-01-19 16:20 2322前一段时间.在微博上中奖了. 一个叫张俊林的帅锅.送了俺一本书 ... -
文本相似度计算-Levenshtein
2012-01-13 11:26 2027参见网址http://www.merriamp ... -
[转载]大数据量,海量数据 处理方法总结(转载)
2012-01-06 11:52 1657原文地址:大数据量, ... -
一个不会重复的HelloWord 随机大小写....
2011-12-01 16:53 1219一个不会重复的HelloWord 随机大小写.... 代码没有 ... -
简单版数独计算器-升级版
2011-11-03 12:28 1683只能算初级的..高级的就溢出了 就算内存无穷大.可能性超过 ... -
java算法专题-归并排序
2011-11-02 21:32 1425归并的思想就是分治.时间复杂度..忘记了 大概实现了下..还 ... -
一个关键字标红的通用类
2011-09-15 20:32 3418import java.lang.reflect.Array; ... -
二分法查找
2011-09-13 15:03 1763import java.util.Arrays; / ...
相关推荐
### 分治法求两个大整数相乘 #### 一、问题背景及描述 在计算机科学领域,处理大整数的运算是一项常见的需求,尤其是在密码学、数据加密以及某些科学计算场景中。对于传统整数类型(如 `int`, `long` 等)无法表示...
本篇文章将详细讨论如何使用C语言来实现两个1000位数字相乘的算法。这个程序是针对大数相乘问题的一个解决方案,适用于处理超过常规整型变量范围的大型整数。 首先,我们需要理解C语言的基础数据类型,如int、long...
这段代码提供了一个具体的实现思路,通过将两个大整数分别存储为字符数组,并利用逐位相乘的方法来实现乘法运算。具体步骤如下: 1. **初始化**:首先定义一个足够大的数组`s`用于存放乘法的结果,其长度等于两个...
以下是对“任意大的两个数相乘”这个知识点的详细说明。 **大数的概念** 大数是指超过常规数据类型所能表示的最大值的整数。在大多数编程语言中,如C、C++或Java,整型变量有其最大值限制,如32位系统中的int最大值...
在编程领域,尤其是在处理数值...总之,处理两个超大数相乘的问题,需要理解大数表示和高效算法,并能够熟练运用C语言进行编程实现。通过学习和实践,不仅可以掌握这一技能,还能为解决其他复杂计算问题打下坚实基础。
本文将详细介绍如何使用C语言通过链表和数组实现两个大数的相乘功能,其中大数的位数可以达到上万位。 #### 题目概述 本题目要求设计一个程序,能够处理两个大数的相乘操作,这里的“大数”指的是位数可以达到上万...
1. **输入接收**:首先,使用字符数组接收用户输入的两个大整数,这是因为C++的标准输入流`cin`无法直接处理超过`int`类型的整数。字符数组可以用来存储任意长度的字符串形式的数字。 2. **数据转换**:接收到的...
这个压缩包中的内容显然是一个关于长整型相乘的实现程序,包含两个源文件(test.cpp、LongIntMultiply.cpp)和一个头文件(LongIntMultiply.h)。这里我们将详细讨论长整型的概念、实现方法以及可能涉及的算法。 1....
在具体实现上,首先,输入的两个大整数会被转换成8的倍数,这是因为分治法的处理过程中,需要对每一位进行操作,8的倍数可以使处理更为简洁。接着,通过递归调用,将大整数逐步分解到单个数字的乘法,直到乘法操作...
那么如何实现两个大数相乘呢?我用JS实现了一下,代码如下: 代码如下: console.log(bigMut(“567”, “1234”)); // 699678 function bigMut(big, common) { big += “”; common += “”; if (big.length < ...
在传统的算术运算中,我们通常使用乘法运算符 `*` 来完成两个数字的乘法,但在处理大整数时,这种方法不再适用,因为标准数据类型无法存储这样的结果。 在C++中,我们可以利用自定义数据结构(如链表、数组等)来...
当两个整型数相乘的结果超出了该数据类型能表示的最大值,就会发生溢出(overflow)。溢出并不总是导致编译错误,而是可能导致运行时错误,因为计算结果将不再正确。例如,32位无符号整型最大能表示4294967295,如果...
假定有两个字符串表示的整形数,要求写一个函数,实现两个数字字符串的乘积,函数返回值也是字符串。我们不能直接将整形字符串转换为数字后去相乘,因为字符串表示的数字可能相当大,直接转换成数字会导致信息丢失,
1. 将两个大整数a和b分解为: a = a1 * 2^k + a0 b = b1 * 2^k + b0 其中a1和b1是a和b各自高半部分,a0和b0是低半部分,k是适当的选择。 2. 计算三个中间值: - z0 = a0 * b0 - z1 = (a0 + a1) * (b0 + b1) -...
它将两个n位数的乘法分解为三个较小的乘法和若干次加法,复杂度为O(n^1.585),比传统的O(n^2)算法更快。基本思想是将两个数各分为高位和低位两部分,然后用这三个部分的组合进行计算。 2. **Toom-Cook算法**:与...
由于两个20位的大数相乘,结果最多不超过40位,所以mResult的长度至少为2 * (MAX - 1),其中MAX为21。 2. **输入大数**:通过函数InputNumber读取用户输入的两个大数,将字符输入转换成整数数组表示。 3. **初始化...
在这个大整数相乘的问题中,我们就是用这种策略来高效地完成乘法运算。 一、基础理论 1. 大整数:大整数是指超过普通整型数据所能表示范围的整数,通常通过数组或链表等数据结构存储。 2. 分而治之:分而治之是算法...
3. **逐位乘法**:在C++中,这个过程涉及两个数组的逐个元素相乘,然后累加到结果数组。每个乘积都需要与另一个数组的相应位置进行对齐,然后根据需要进行进位操作。 4. **动态分配内存**:由于我们不知道输入的大...
标题“大数相乘c语言”和描述“两个超过计算机所能表示的数相乘,利用数组存储大数,进行相乘”所提及的就是这种技术。 大数相乘的基本思路是将每个大数拆分成数组中的每一位,然后按照传统的笔算乘法方法进行计算...