日本xxxx18视频在线观看-日本xxxx1819-日本xxxwww在线观看-日本xxx-日本xx-日本www在线视频

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C# 中如何判斷字符串的相似度

admin
2023年3月22日 17:12 本文熱度 1333

基于 F23.StringSimilarity.dll  組件,Github 上可以搜索到該組件。

核心方法:

var l = new Levenshtein();

double tempValue = l.Distance("我是中國人", "我是中國人。"); // 將返回 1?

下面是我擴展的方法,從一個集合中找到與目標字符串最相似的一個或多個字符串。

比如:["我是中國人", "我是美國人", "我的中國心", "我是中國通"]  ,現在要找到 和 “我是中國” 最接近的字符串(可能有多個)。

如果用我下面的擴展方法。返回值

SimilarityValue = 1,  SimilarityTargetList = ["我是中國人", "我是中國通"]

有需要的請拿走,不謝。

using F23.StringSimilarity;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace Demo

{

    /// <summary>

    /// 相似度結果信息

    /// </summary>

    /// <typeparam name="TSource">源集合的類型</typeparam>

    public class SimilarityResultInfo<TSource>

    {

        /// <summary>

        /// 相似度值。值越小,表示差異越小。等于 1 表示只有一個字符差異。等于 0 表示完全相等。

        /// </summary>

        public double SimilarityValue { get; set; }

 

        /// <summary>

        /// 相似度等于 1 表示只有一個字符差異,則最接近的可能有一個或多個字符串

        /// </summary>

        public IEnumerable<TSource> SimilarityTargetList { get; set; }

    }

 

    /// <summary>

    /// IEnumerable的擴展類,擴展了一個名為 Similarity 的方法

    /// </summary>

    public static class EnumerableMethodSimilarityExtension

    {

        /// <summary>

        /// 獲取集合中和目標字符串最相似的集合(備注:比如:相似度等于 1 表示只有一個字符差異,則最接近的可能有一個或多個字符串)

        /// </summary>

        /// <param name="source">源集合</param>

        /// <param name="targetText">目標字符串</param>

        /// <returns>如果 source 沒有元素,則返回 NULL。否則,返回值不為 NULL</returns>

        public static SimilarityResultInfo<string> Similarity(this IEnumerable<string> source, string targetText)

        {

            return Similarity<string>(source, c => c, targetText);

        }

 

        /// <summary>

        /// 獲取集合中和目標字符串最相似的集合(備注:比如:相似度等于 1 表示只有一個字符差異,則最接近的可能有一個或多個字符串)

        /// </summary>

        /// <typeparam name="TSource">源集合的類型</typeparam>

        /// <param name="source">源集合</param>

        /// <param name="textselector">源集合要比較的屬性</param>

        /// <param name="targetText">目標字符串</param>

        /// <returns>如果 source 沒有元素,則返回 NULL。否則,返回值不為 NULL</returns>

        public static SimilarityResultInfo<TSource> Similarity<TSource>(this IEnumerable<TSource> source, Func<TSource, string> textselector, string targetText)

        {

            if (source == null)

            {

                throw new ArgumentNullException("source");

            }

            if (textselector == null)

            {

                throw new ArgumentNullException("textselector");

            }

            var l = new Levenshtein(); // 檢查 2 個字符串的相似度。

            double? minStringSimilarityValue = null;

            List<TSource> similarityTargetList = null;

            foreach (var item in source)

            {

                string elementTextValue = textselector(item);

                if (string.IsNullOrEmpty(elementTextValue))

                {

                    continue;

                }

                double tempValue = l.Distance(elementTextValue, targetText);

                if (!minStringSimilarityValue.HasValue)

                {

                    //說明是第一次比較。http://music.cnblogs.com

                    minStringSimilarityValue = tempValue;

                    similarityTargetList = new List<TSource>() { item };

                    continue;

                }

                if (tempValue < minStringSimilarityValue.Value)

                {

                    minStringSimilarityValue = tempValue;

                    similarityTargetList.Clear();

                    similarityTargetList.Add(item);

                    continue;

                }

                if (tempValue == minStringSimilarityValue.Value)

                {

                    similarityTargetList.Add(item);

                    continue;

                }

            }

            if (!minStringSimilarityValue.HasValue)

            {

                //說明集合是空的

                return null;

            }

            SimilarityResultInfo<TSource> result = new SimilarityResultInfo<TSource>();

            result.SimilarityValue = minStringSimilarityValue.Value;

            result.SimilarityTargetList = similarityTargetList;

            return result;

        }

    }

}?

謝謝瀏覽!


該文章在 2025/2/24 14:46:40 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产亚洲欧美日韩在线看片 | 国产亚洲制服免视频 | 宝贝把腿张开让我添添 | 欧美mv亚洲mv在线天堂 | 欧洲亚洲一区二区三区导航 | 99这里只有免费费精品 | 国产一区二区丝袜高跟 | 99精产国品一二三产区区别 | 国产中文字幕视频在线观看 | 国产日韩欧美第二页 | 久青青在线观看视频国产 | 日韩电影手机免费在线看 | 成年免费视频 | 九一视频国产欧美日韩 | 日韩精品亚洲电影天堂 | 国产精品香蕉在线一区 | 国产欧洲野花视频www | 91视频这里只有精品 | 国产日韩中文字幕制服 | 日本高清不卡 | 99在线这精品视频 | 成人性生交大片免费看 | 国产日韩传媒一区二区三区四区 | 九九亚洲精品唯美女同互添 | 国内精品免费视频 | 国产高清不卡一区二区 | 精品一区二区三区四区日产 | 国产一级精品视频 | 精品福利私拍 | 国产日韩a在线观看免费视频 | 日韩欧美制服丝袜在线播放 | 国产又色又爽又黄的 | 日本色淫特级视频网站 | 国产一级免费在线观看 | 国产黄大片在线观看好吊色 | 欧美一区二区三区视频 | 日韩精品 | 精品国产aⅴ | 性感美女| 国产欧美日本综合在线 | 国产午夜人做人免费视频 |