您的位置:首页 > 编程语言 > C#

最大匹配算法: 分词入门级算法 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;
}


主要代码如上, 另外没别的。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: