91网首页-91网页版-91网在线观看-91网站免费观看-91网站永久视频-91网站在线播放

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C# 比較兩文本相似度

admin
2023年3月22日 16:41 本文熱度 1456

這個(gè)比較文本用到的主要是余弦定理比較文本相似度,具體原理右轉(zhuǎn)某度,主要適用場(chǎng)景是在考試系統(tǒng)中的簡(jiǎn)答題概述,可根據(jù)權(quán)重自動(dòng)打分,感覺(jué)實(shí)用性蠻廣的。

先說(shuō)下思路:

  1. 文本分詞,中文于英文不同,規(guī)范的英文每個(gè)都有空格自動(dòng)分詞,中文則是連成長(zhǎng)串,我們只有一一比對(duì)每個(gè)詞出現(xiàn)的頻率做簡(jiǎn)單的比較,在這里使用到了SCWS的一個(gè)分詞api接口http://www.ftphp.com/scws/api.php(僅支持POST,因?yàn)橐MHttp請(qǐng)求,所以請(qǐng)求時(shí)間也是根據(jù)具體環(huán)境而定,所以可以自己手寫(xiě)一些字典,本地分詞要來(lái)的快)。但是用此接口分詞過(guò)程中,標(biāo)點(diǎn)符號(hào)不會(huì)被去掉,所以需要自己手動(dòng)寫(xiě)方法去掉標(biāo)點(diǎn)。

  2. 獲取兩個(gè)文本的去重復(fù)并集

  3. 比較每個(gè)詞出現(xiàn)的頻率

  4. 根據(jù)余弦定理計(jì)算權(quán)重

下面是具體的代碼段(請(qǐng)求是在網(wǎng)上找的,原鏈接找不到了。。)

class Program

{

    static void Main(string[] args)

    {

        Console.Write(Sim("床前明月光,疑是地上霜", "床前明月光,疑是地上霜"));

    }

    public static double Sim(string txt1, string txt2)

    {

        List<string> sl1 = Segment(txt1);

        List<string> sl2 = Segment(txt2);

        //去重

        List<string> sl = sl1.union(sl2).ToList<string>();

        //獲取重復(fù)次數(shù)

        List<int> arrA = new List<int>();

        List<int> arrB = new List<int>();


        foreach (var str in sl)

        {

            arrA.Add(sl1.where(x => x == str).Count());

            arrB.Add(sl2.where(x => x == str).Count());

        }

        //計(jì)算商

        double num = 0;

        //被除數(shù)

        double numA = 0;

        double numB = 0;

        for (int i = 0; i < sl.Count; i++)

        {

            num += arrA[i] * arrB[i];

            numA += Math.Pow(arrA[i], 2);

            numB += Math.Pow(arrB[i], 2);

        }

        double cos = num / (Math.Sqrt(numA)* Math.Sqrt(numB));

        return cos;

    }

    public static List<string> Segment(string str)

    {

        List<string> sl = new List<string>();

        try

        {

            string s = string.Empty;

            System.Net.CookieContainer cookieContainer = new System.Net.CookieContainer();

            // 將提交的字符串?dāng)?shù)據(jù)轉(zhuǎn)換成字節(jié)數(shù)組

            byte[] postData = System.Text.Encoding.ASCII.GetBytes("data=" + System.Web.HttpUtility.UrlEncode(str) + "&respond=json&charset=utf8&ignore=yes&duality=no&traditional=no&multi=0");


            // 設(shè)置提交的相關(guān)參數(shù)

            System.Net.HttpWebRequest request = System.Net.WebRequest.create("http://www.ftphp.com/scws/api.php") as System.Net.HttpWebRequest;

            request.Method = "POST";

            request.KeepAlive = false;

            request.ContentType = "application/x-www-form-urlencoded";

            request.CookieContainer = cookieContainer;

            request.ContentLength = postData.Length;


            // 提交請(qǐng)求數(shù)據(jù)

            System.IO.Stream outputStream = request.GetRequestStream();

            outputStream.Write(postData, 0, postData.Length);

            outputStream.Close();


            // 接收返回的頁(yè)面

            System.Net.HttpWebResponse response = request.GetResponse() as System.Net.HttpWebResponse;

            System.IO.Stream responseStream = response.GetResponseStream();

            System.IO.StreamReader reader = new System.IO.StreamReader(responseStream, System.Text.Encoding.GetEncoding("utf-8"));

            string val = reader.ReadToEnd();


            Newtonsoft.Json.Linq.JObject results = Newtonsoft.Json.Linq.JObject.Parse(val);

            foreach (var item in results["words"].Children())

            {

                Newtonsoft.Json.Linq.JObject word = Newtonsoft.Json.Linq.JObject.Parse(item.ToString());

                var sss = word["word"].ToString();

                //判斷是否為標(biāo)點(diǎn)符

                bool offom = false;

                foreach (char t in sss)

                {

                    if (t >= 0x4e00 && t <= 0x9fbb)

                    {

                        offom = true;

                    }

                    else

                    {

                        offom = false;

                    }

                }

                if (offom)

                {

                    sl.Add(sss);

                }

            }

        }

        catch

        {

        }


        return sl;

    }

}

  以上感覺(jué)很多地方都可以?xún)?yōu)化,以后想到更好的再重新來(lái)一遍。


該文章在 2025/2/24 14:40:07 編輯過(guò)
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專(zhuān)業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類(lèi)企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷(xiāo)售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶(hù)的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 日韩女同互慰专区 | 91国内揄拍 | 国产色在线 | 区在线播放| 国产乱轮精品一区 | 欧美亚洲色自拍 | 韩日中文字幕 | 日本国产高清免费 | 日韩va| 国产女主播精 | 国产va免费精品 | 精品乱码一卡2 | 日本一区二区三 | 中文字幕在线免费看 | 日韩大片免费观看 | 乱子伦一区二区三区 | 日韩性生活 | 无码超乳爆乳中文字幕在线看伦 | 岛国大片在线观看 | 国产成年 | 日韩高清1区2区 | 日韩午夜激情视频 | 国产精品刺激 | 午夜性爱视频免费 | 国产v亚洲v天堂在 | 成人动漫一区二区三 | 欧美亚洲精品 | 国产亚洲一区二在 | 日韩在线1区精品 | 欧美亚日 | 日韩城人影院 | 国产偷伦精品视频 | 99精品蜜臀蜜 | 看片天堂 | 日本乱理伦片在 | 日产国产精 | 青青草欧美 | 欧洲自拍拍偷综合 | 91福利导航大全 | 区二区三区免费 | 日本老妇人 |