前向匹配算法(c#实现)
2021/7/1 14:51:15
本文主要是介绍前向匹配算法(c#实现),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1 前向最大匹配算法
实例: 以“我们经常有意见分歧”这一句为例,进行分词,流程如下:![](/upload/202107/01/202107011451152904.png)
2 前向匹配算法的步骤
- 设定最大匹配的字符串长度N;
-
从index = word_len开始,选取N个字(符);
-
判断选取的字符串在语料库中是否存在,如果是,选中的字符分词成功,转到步骤(4),否则删除当前字符串中最后一个字符,循环步骤(3)直到分词成功。
-
指针移动sentence_length-word_len位,重复步骤(3);
注:其中,sentence_length表示整个待分词的句子长度,word_len位表示所有已经成功分词的字符串长度。
3 算法实现public static List<string> SplitSeq1(string senquence, List<string> corpus, int maxLength) { var result = new List<string>(); var alreadySplitWord = string.Empty; while (senquence.Length > 0) { var tempStr = senquence.Length >= maxLength ? senquence.Substring(0, maxLength) : senquence; // 逐个移除字符并匹配 while (tempStr.Length > 0) { if (corpus.Contains(tempStr)) { result.Add(tempStr); alreadySplitWord += tempStr; senquence = senquence.Remove(0, tempStr.Length); break; } tempStr = tempStr.Remove(tempStr.Length - 1, 1); } } return result; } public static string Print(List<string> words) { var result = string.Empty; foreach (var item in words) { result += $"{item}|"; } return result; }
业务调用:
static void Main(string[] args) { var corpus = new List<string>(){"我们", "经常", "有", "意见", "分歧"}; var splitResult = SplitSeq1("我们经常有意见分歧", corpus, 5); var result = Print(splitResult); Console.WriteLine(result); }
运行结果为:
这篇关于前向匹配算法(c#实现)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#
- 2024-01-24Advanced .Net Debugging 1:你必须知道的调试工具
- 2024-01-24.NET集成IdGenerator生成分布式全局唯一ID
- 2024-01-23用CI/CD工具Vela部署Elasticsearch + C# 如何使用
- 2024-01-23.NET开源的简单、快速、强大的前后端分离后台权限管理系统