Ansj

基于java的中文分词工具ANSJ

淺唱寂寞╮ 提交于 2021-02-18 16:00:13
ANSJ 这是一个基于n-Gram+CRF+HMM的中文分词的java实现. 分词速度达到每秒钟大约200万字左右(mac air下测试),准确率能达到96%以上 目前实现了.中文分词. 中文姓名识别 . 用户自定义词典,关键字提取,自动摘要,关键字标记等功能 可以应用到自然语言处理等方面,适用于对分词效果要求高的各种项目. 分词的目的是创建一个高稳定可用的中文分词工具,可以利用到各种需要文字处理的场景中下面简单介绍一下Ansj中文分词的主要算法及特点. 数据结构 高度优化Trie树 在用户自定义词典以及各种类似于Map的场景中,大量使用的一个工具,众所周知,Trie具有高速的文本扫描能力,和较低的内存占用率,是最好的AC机之一,弦外之音,在我的认知范围内,貌似没有之一.相比其它结构在性能和构造上做到了很好的平衡,但是在java中,大量构建map尤其是hashmap,是一个非常昂贵的操作,通过对于一个map放入大量的key也注定其在自动拆箱装箱,以及解决冲突,大量hash匹配上做了过多的小消耗,虽然多数人认为,这种消耗属于纳秒级别的,但是对于动不动就上GB的文本来说,这个消耗是不可忽略的,所以作者在这里使用了首字母hash次字二分的方式来避免过多的消耗内存,也正应为有了这个机制.可以保证Ansj加载更多的用户自定义词典,有人问我具体的数字.大约500万词,1Gde 内存

从提高 Elasticsearch 搜索体验说开去......

ぐ巨炮叔叔 提交于 2020-10-28 07:53:43
1、实战问题 球友提问:怎么搜索才能使得结果是最好的呢? 我这边一个搜索功能,实现做法就是将用ik分词器配合multi查询实现的。 中途也追加了客户所在领域相关词汇字典。 但是客户一直反馈搜索体验不好。 如果想要提高搜索体验还能从那些方面入手呢? 来自:死磕 Elasticsearch 知识星球 这个问题非常有代表性,我在实际产品开发中也遇到过。 2、从几个例子说搜索体验 示例一:“慕X网”输入“触发器”的搜索截图。 注意:我输入的是“触发器”,返回结果第一条没有问题,其他几条有关:“触”、“发”的,可以说和我的搜索没有关系。 站在用户体验的角度,我认为:体验很差,返回了很多不相关的数据。 示例二:某题库APP,不支持跳转翻页。 如下所示,题库共1703题,包含:判断题、选择题。 只支持:点击:上一题、下一题。 实际场景: 当做了100道、200道的时候,只有选择题;到底多少选择题? 当退出后,需要点击几百下进入自己上次做到的最后一道题..... 这不是用户体验差,这是没有用户体验,开发者完全没有动脑子的设计,用户会"怀疑人生"。 示例三:电商搜索“秋天第一条秋裤”,该返回什么? 放大 查看图片,亮点自现 这是个见仁见智的问题,究竟返回什么,各个电商公司都有自己的评判。 但,单纯站在用户的角度,高下立判。 铭毅一句话点评: 拼多多 “活该你发展快”,的确返回结果就是预期结果

不限机型,手机端实时玩转3D、混合现实,快手Y-tech有黑科技

一世执手 提交于 2020-10-13 06:44:57
  机器之心报道    机器之心编辑部   深度是实现 3D 场景理解的重要信息,快手 Y-tech 利用自研的单目深度估计技术获得了高质量的深度信息,并将模型部署到移动端,结合 Y-tech 已有的多项技术研发了 3DPhoto、混合现实等多种新玩法。这些黑科技玩法不限机型,可让用户在手机上无门槛的实时体验,给用户带来全新的视觉体验和交互方式的同时,可帮助用户更好的进行创作。      这项研究主要探究了如何更好的利用三维空间的结构性信息提升单目深度估计精度,此外还针对复杂场景构建了一个新的深度数据集 HC Depth,包含六种挑战性场景,有针对性地提升模型的精度和泛化性。该论文已被 ECCV 2020 收录,论文代码和模型即将在 GitHub 上开源,作者也将在 8 月 23-28 日的 ECCV 大会线上展示他们的工作。      论文链接:https://arxiv.org/abs/2007.11256   代码链接:https://github.com/ansj11/SANet    单目深度估计的挑战   从 2D 图像恢复 3D 信息是计算机视觉的一个基础性问题,可以应用在视觉定位、场景理解和增强现实等领域。在无法通过深度传感器或者多视角获得有效的深度测量时,单目深度估计算法尤为重要。传统方法通常使用先验信息恢复图像的深度信息,例如纹理线索,物体尺寸和位置

NLPChina_ansj_seg JAVA 实现热词及分词统计

那年仲夏 提交于 2020-10-08 10:24:40
前言: 笔者最近遇到一个需求:将文章输入后输出文章中的高频词,这是个简短的需求,但细分下便会出现许多细节重点。笔者细化需求后确定了这几个步骤:1. 文章分词(包括中英文混词)——> 2. 分词统计——>3. 推荐热词。 根据上述的简单需求,我就想用原生JAVA通过某些数据结构实现,由于知识面有限且笔者目前是名在校的学生,实现了英文下的分词、中文下的分词。但是遇到中英文混排的怎么也合并不了。经过两天的各种思考各种分析结果以失败告终。在查阅资料的时候发现了阿帕奇的OpenNLP 工具,然后仔细的看了看源码。。看的也是云里雾里的,但基本思想也了解了。虽然阿帕奇的OpenNLP很牛逼,但是我还是选择了一个国人自产基于n-Gram+CRF+HMM的分词JAVA实现。具体开发文档和源码可以访问 GITHUB 。 废话不多说上源码。 工具类: package com.sim; import org.ansj.splitWord.analysis.ToAnalysis; import java.io.*; import java.util.*; public class NLPTools { public static Map<String,String> wordFrequency(String article) { Map<String, Integer> map = new HashMap

项目:可视化分析(后端爬取数据部分)

岁酱吖の 提交于 2020-08-14 11:43:50
一:项目介绍 可视化分析项目是一个将唐诗三百首的详细内容录入到MySQL,再实现一个简单的前端页面将数据以图表的形式展现出来,方便用户直观感受每个作者的诗词创作数量,和所使用频繁的词语构成的词云图等。 二:项目构思 项目主要分为两大部分 后端爬取唐诗数据录入数据库部分 提取数据库信息并通过前端网页绘图展现 我们需要爬取的数据信息来自: 原因:唐诗三百首这个网站不收费,公开的。 思考:我们如何将这一首首诗的标题,朝代,作者,正文等信息存入到MySQL中? 1.获取列表页的html文档,通过运用htmlunit第三方库中的方法获取每首诗的url. 2.分析详情页,通过Xpath获取每首诗的标题,朝代,作者,正文。 3.使用Java原生加密类MessageDigest类中的SHA-256算法防止数据重复录入数据库。 4.使用ansj-seg第三方库中的NlpAnalysis类的parse(),来计算分词,为前端网页展现词云图做铺垫。 5.使用JDBC 将数据入库。 预研阶段及技术选型: HtmlUnit(网页爬取) HtmlUnit第三方库自带http client,可以帮助我们访问服务器资源,实现html页面的请求+解析。这个库下有一些方法getElementsByAttribute(),getAttribute(),getElementsByATagName(

洛谷-P6686 混凝土数学

点点圈 提交于 2020-07-28 18:54:12
题目描述: 这里 思路: 一、 部分分算法 对于 的数据,用暴力解决即可,时间复杂度 对于另外 的数据(所有木棍长度相等),考虑用组合数学,答案为 二、 正解 我们考虑对整个序列进行 桶排序 。 我们设每个数出现的次数为 。 对于所有 ≥ 的数,加上比它小的所有数出现的次数,并加上这个数 至这个数 中所有数出现的个数。 特别的,对于所有 ≥ 的数,需要再次加上 。 但是,我们会发现这依然过不了(TLE了一个点)。 我们再次仔细观察正解的统计方式第一条,发现这可以用前缀和优化。 于是,这道题就做完了。 下面附上代码: #include <bits/stdc++.h> using namespace std; template < typename T > void read(T & x) { int f = 1 ;x = 0 ; char c = getchar(); for (;!isdigit(c);c = getchar()) if (c == ' - ' ) f = - f; for (; isdigit(c);c = getchar()) x = x * 10 + c - ' 0 ' ; x *= f; } const long long mod = 998244353 ; int a[ 200005 ]; long long bin[ 200005 ]; long

Elasticsearch简单学习9:深入了解3

北慕城南 提交于 2020-02-27 01:17:12
一、中文分词器 《1.》HanLP – 面向生产环境的自然语⾔言处理工具包 ● http://hanlp.com/ ● https://github.com/KennFalcon/elasticsearch-analysis-hanlp 《2.》IK分词器 ● https://github.com/medcl/elasticsearch-analysis-ik 1.安装HanLP D:\softhan\elasticsearch\elasticsearch\elasticsearch-7.1.0> .\bin\elasticsearch-plugin.bat install https://github.com/KennFalcon/elasticsearch-analysis-hanlp/releases/download/v7.1.0/elasticsearch-analysis-hanlp-7.1.0.zip 2.安装IK分词器 PS D:\softhan\elasticsearch\elasticsearch\elasticsearch-7.1.0> .\bin\elasticsearch-plugin.bat install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.1

Aho-Corasick算法的Java实现与分析

一世执手 提交于 2019-12-04 18:28:11
简介 Aho-Corasick算法简称AC算法,通过将模式串预处理为确定有限状态自动机,扫描文本一遍就能结束。其复杂度为O(n),即与模式串的数量和长度无关。 思想 自动机按照文本字符顺序,接受字符,并发生状态转移。这些状态缓存了“按照字符转移成功(但不是模式串的结尾)”、“按照字符转移成功(是模式串的结尾)”、“按照字符转移失败”三种情况下的跳转与输出情况,因而降低了复杂度。 基本构造 AC算法中有三个核心函数,分别是: success; 成功转移到另一个状态(也称goto表或success表) failure; 不可顺着字符串跳转的话,则跳转到一个特定的节点(也称failure表),从根节点到这个特定的节点的路径恰好是失败前的文本的一部分。 emits; 命中一个模式串(也称output表) 举例 以经典的ushers为例,模式串是he/ she/ his /hers,文本为“ushers”。构建的自动机如图: 其实上图省略了到根节点的fail边,完整的自动机如下图: 匹配过程 自动机从根节点0出发 首先尝试按success表转移(图中实线)。按照文本的指示转移,也就是接收一个u。此时success表中并没有相应路线,转移失败。 失败了则按照failure表回去(图中虚线)。按照文本指示,这次接收一个s,转移到状态3。 成功了继续按success表转移,直到失败跳转步骤2

Java实现中文词频统计

匿名 (未验证) 提交于 2019-12-02 20:41:15
昨日有个中文词频统计的需求, 百度一番后, 发现一大堆标题党文章, 讲的与内容严重不符, 这里就简单记录下自己实现的流程吧! ansj_seg 首先添加依赖: 下载jar http://maven.nlpcn.org/org/ansj/ 同时下载 nlp-lang.jar 导入到eclipse ,开始你的程序吧 maven <dependency> <groupId>org.ansj</groupId> <artifactId>ansj_seg</artifactId> <version>5.1.1</version> </dependency>基本用法为: String str = "欢迎使用ansj_seg,(ansj中文分词)在这里如果你遇到什么问题都可以联系我.我一定尽我所能.帮助大家.ansj_seg更快,更准,更自由!" ; System.out.println(ToAnalysis.parse(str)); 欢迎/v,使用/v,ansj/en,_,seg/en,,,(,ansj/en,中文/nz,分词/n,),在/p,这里/r,如果/c,你/r,遇到/v,什么/r,问题/n,都/d,可以/v,联系/v,我/r,./m,我/r,一定/d,尽我所能/l,./m,帮助/v,大家/r,./m,ansj/en,_,seg/en,更快/d,,,更/d,准/a,,,更/d,自由/a

我的架构演化笔记 10:ElasticSearch的分词器之ansj研究

拈花ヽ惹草 提交于 2019-12-02 07:49:33
架构不变,为了学习方便,直接研究ElasticSearch-rtf版本。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 关于redis---配置文件中指定 redis: pool: maxactive: 20 maxidle: 10 maxwait: 100 testonborrow: true ip: 127.0.0.1:6379 先修改为目的IP: redis: pool: maxactive: 20 maxidle: 10 maxwait: 100 testonborrow: true ip: 192.168.56.200:6379 启动redis和ElasticSearch-rtf版本。 ~~~~~~~~~~~~~~~~~~~~~~~开始研究 redis篇 Q1: ElasticSeach什么时候连接上redis的? A: root@ubuntu:/usr/local/elasticsearch-rtf/elasticsearch-rtf# lsof -i:6379 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME redis-ser 1927 root 4u IPv6 11682 0t0 TCP *:6379 (LISTEN) redis-ser 1927 root 5u IPv4