逆向最大匹配分词算法C#
逆向顺序
句子:大家好我叫XX我是一名程序员
程序员 -> 序员 -> 员
名程序 -> 程序 -> 序
一名程 -> 名程 -> 程
是一名 -> 一名 -> 名
我是一 -> 是一 -> 一
X我是 -> 我是 -> 是
XX我 -> X我 -> 我
叫XX -> XX -> X
我叫X -> 叫X -> X
好我叫 -> 我叫 -> 叫
家好我 -> 好我 -> 我
大家好 -> 家好 -> 好
大家 -> 家
大

class Program
{
public static HashSet<string> dictionary = new HashSet<string>(); static void Main(string[] args)
{
Initail();
List<string> list = new List<string>();
string s = "大家好我叫XX我是一名程序员";
string[] sentences = s.Split(',');
int max = 3;
for (int i = 0; i < sentences.Length; i++)
{
string str = sentences[i];
int start = sentences[i].Length - max;
int len = sentences[i].Length - start;
while (len > 0)
{
string subWord = sentences[i].Substring((start < 0 ? 0 : start), len);
Console.WriteLine(subWord);
if (Search(subWord))
{
list.Add(subWord);
start = start - max;
if (start < 0)
{
len = start < 0 ? max + start : max;
}
}
else
{
int k = 1;
bool flag = false;
string tempWord = null;
for (; k <= subWord.Length - 1; k++)
{
tempWord = subWord.Substring(k);
Console.WriteLine(tempWord);
if (Search(tempWord))
{
flag = true;
list.Add(tempWord);
break;
}
}
if (flag)
{
start = start - tempWord.Length;
}
else
{
start--;
}
len = start < 0 ? max + start : max;
}
}
}
foreach (string x in list)
{
Console.WriteLine(x);
}
Console.ReadKey();
} public static void Initail()
{
dictionary.Add("大家");
dictionary.Add("好");
dictionary.Add("我");
dictionary.Add("一名");
dictionary.Add("程序员");
dictionary.Add("nick");
} public static bool Search(string word)
{
return dictionary.Contains(word);
}
}

逆向最大匹配分词算法C#的更多相关文章
- 【nlp】中文分词基础原则及正向最大匹配法、逆向最大匹配法、双向最大匹配法的分析
分词算法设计中的几个基本原则: 1.颗粒度越大越好:用于进行语义分析的文本分词,要求分词结果的颗粒度越大,即单词的字数越多,所能表示的含义越确切,如:“公安局长”可以分为“公安 局长”.“公安局 长” ...
- C#汉字转拼音,可识别多音字,带声调,提供正向、逆向、双向分词算法的小程序
用C#写了个汉字转拼音的小工具,和网上大部分工具不同,这个通过分词算法,解决了多音字的问题,并且提供声调,可开可关. 如题,用"银行 行不行 行家说了算"举例,如果转拼音却不能识别 ...
- 中文分词算法之最大正向匹配算法(Python版)
最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...
- 【NLP】中文分词:原理及分词算法
一.中文分词 词是最小的能够独立活动的有意义的语言成分,英文单词之间是以空格作为自然分界符的,而汉语是以字为基本的书写单位,词语之间没有明显的区分标记,因此,中文词语分析是中文信息处理的基础与关键. ...
- 分词 | 双向匹配中文分词算法python实现
本次实验内容是基于词典的双向匹配算法的中文分词算法的实现.使用正向和反向最大匹配算法对给定句子进行分词,对得到的结果进行比较,从而决定正确的分词方法. 算法描述正向最大匹配算法先设定扫描的窗口大小ma ...
- Mmseg中文分词算法解析
Mmseg中文分词算法解析 @author linjiexing 开发中文搜索和中文词库语义自己主动识别的时候,我採用都是基于mmseg中文分词算法开发的Jcseg开源project.使用场景涉及搜索 ...
- IK分词算法设计总结
IK分词算法设计思考 加载词典 IK分词算法初始化时加载了“敏感词”.“主词典”.“停词”.“量词”,如果这些词语的数量很多,怎么保证加载的时候内存不溢出 分词缓冲区 在分词缓冲区中进行分词操作,怎么 ...
- LTP 分词算法实践
参考链接: https://github.com/HIT-SCIR/ltp/blob/master/doc/install.rst http://www.xfyun.cn/index.php/serv ...
- SPOJ 4206 Fast Maximum Matching (二分图最大匹配 Hopcroft-Carp 算法 模板)
题目大意: 有n1头公牛和n2头母牛,给出公母之间的m对配对关系,求最大匹配数.数据范围: 1 <= n1, n2 <= 50000, m <= 150000 算法讨论: 第一反应 ...
随机推荐
- IntelliJ IDEA 2016.2.4下载与注册码
下载地址 https://download.jetbrains.8686c.com/idea/ideaIU-2016.2.4.dmg 注册码 43B4A73YYJ-eyJsaWNlbnNlSWQiOi ...
- Runtime 方法替换 和 动态添加实例方法 结合使用
前言: 方法替换,可以替换任意外部类的方法,而动态添加方法只能实现在被添加类创建的对象里,但是将方法替换和动态添加方法结合使用,可以实现,对任意外部类动态添加需要的方法,这个方法可以是类方法也可以是实 ...
- Android中有时候运行程序的时候会报错:An internal error occurred during:。。。。
解决办法: Project -> Properties -> Run/Debug Settings: 1. select "Launching New_configuration ...
- 大家一起和snailren学java-(三) 操作符&控制执行流程
“又是新的一周,感觉要学的东西还有好多,加油.由于第三章和第四章内容要总结的不是很多,没太多需要拿出来说的,就整合到一个帖子好了” 操作符 操组符,什么是操作符?其实就是+-*/=&^~| 等 ...
- Mysql中的存储过程
什么是存储过程 简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法: ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功 ...
- 第八章 了解tempdb数据库
1.一个sqlserver数据库实例上只能有一个tempdb数据库,这个实例上所有的用户都共享这个数据库.2.tempdb数据库在每次sqlserver重启后都会重新创建,所以数据会丢失.3.因为te ...
- java使用httpcomponents 上传文件
一.httpcomponents简介 httpcomponents 是apache下的用来负责创建和维护一个工具集的低水平Java组件集中在HTTP和相关协议的工程.我们可以用它在代码中直接发送htt ...
- php写守护进程(Daemon)
守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种很有用的进程.php也可以实现守护进程的功能. 1.基本概念 进程 ...
- 虚拟机LVM扩容
1.先在Vmware上,把虚拟机硬盘做扩展 2.现在打开虚拟机发现系统的磁盘空间已经扩了,但是硬盘分区可用空间没变,还是原来的30G [root@localhost ~]# fdisk -l Disk ...
- 08_Queue(队列UVa 10128)
问题描述:n(1<=n<=13)个身高均不相等的人站成一排,从左向右看能看见L个人,从右向左看能看见R个人,问这个队列有多少种排法? 问题分析: 1.n个人的身高可设为1~n, 2.设d ...