最大匹配算法: 分词入门级算法 C#实现
2010-08-09 14:11
211 查看
最大匹配算法: 分词入门级算法,上面的是算法流程图, 网上各种多。
主要注意点:
1。 读取汉字时,注意streamreader的读取格式的定义:
StreamReader sr =
new StreamReader(@wordLibPath,
System.Text.Encoding.GetEncoding("gb2312"))
;
2。 算法很简单, 但, 想清楚写, 比直接上要快, 这样个破代码, 敲了我65分钟。我晕。
结果是这样的, 但是是最简单的, 当然要进行深化,用别的更好的方法。 待续。。。
private string skipBlanks( string strInput )
{
char[] strArray = strInput.ToCharArray();
int wordLen = strInput.Length;
strInput = "";
for (int i = 0; i < wordLen; i++)
{
if (strArray[i] == ' ' || strArray[i] == '\n'
|| strArray[i] == '\t')
continue;
else
strInput += strArray[i];
}
return strInput;
}
private string maxBackfowardPatch(string strInput)
{
strInput = skipBlanks(strInput);
string strWord = "";
string strOutput = "";
int leftIdx = strInput.Length;
char[] strArray = strInput.ToCharArray();
int wordLen = leftIdx;
List<int> segPos = new List<int>(); //分段点
int subLen = 0;
/*最大后向匹配算法*/
{
while (!strInput.Equals(""))
{
bool flag = true;
while (leftIdx > 0 && subLen < maxLen)
{
strWord = strInput.Substring(--leftIdx, ++subLen);
if (wordLib.Contains(strWord))
{
segPos.Add(leftIdx);
segPos.Add(leftIdx + subLen);
flag = false;
break;
}
}
if (flag)
leftIdx = strInput.Length - 1;
strInput = strInput.Remove(leftIdx);
leftIdx = strInput.Length;
subLen = 0;
}
}
//输出窜
for (int i = 0; i < wordLen; i++) {
if (segPos.Contains(i)) strOutput += '/';
strOutput += strArray[i];
}
segPos.Clear();
return strOutput;
}
主要代码如上, 另外没别的。。
相关文章推荐
- 分词算法的python实现(正向最大匹配法)
- python实现机械分词之逆向最大匹配算法代码示例
- 最大匹配算法实现中文分词(讲解+代码)
- 一个简单最大正向匹配(Maximum Matching)MM中文分词算法的实现
- python 实现机械分词(1)-正向最大匹配算法
- 搜索引擎--范例:中英文混杂分词算法的实现--正向最大匹配算法的原理和实现
- 一个简单最大正向匹配(Maximum Matching)MM中文分词算法的实现
- C#写中文基于词表的最大逆向匹配分词算法
- Java实现的最大匹配分词算法详解
- 简单的逆向最大匹配算法实现中文分词(Python)
- 逆向最大匹配分词算法C#
- PHP实现的最大正向匹配算法示例
- 使用正向最大匹配算法实现中文分词简单模型-用trie树实现
- 分词算法:正向最大匹配算法
- python中文分词教程之前向最大正向匹配算法详解
- HDU 2063 二分匹配入门 匈牙利算法DFS实现
- Python实现基于最大长度的正向最大值匹配算法
- 最大正向匹配算法 PHP实现
- 使用正向最大匹配算法实现中文分词简单模型-用trie树实现
- poj2446 Chessboard 二分图最大匹配 思考 匈牙利算法BFS实现