最大匹配演算法: 分詞入門級演算法 C#實現

來源:互聯網
上載者:User

最大匹配演算法: 分詞入門級演算法,上面的是演算法流程圖, 網上各種多。

主要注意點:

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;
}

主要代碼如上, 另外沒別的。。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.