狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

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

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

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

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

核心方法:

  1. var l = new Levenshtein();

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

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

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

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

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

有需要的請拿走,不謝。

  1. using F23.StringSimilarity;

  2. using System;

  3. using System.Collections.Generic;

  4. using System.Linq;

  5. using System.Text;

  6. using System.Threading.Tasks;

  7.  

  8. namespace Demo

  9. {

  10.    /// <summary>

  11.    /// 相似度結(jié)果信息

  12.    /// </summary>

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

  14.    public class SimilarityResultInfo<TSource>

  15.    {

  16.        /// <summary>

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

  18.        /// </summary>

  19.        public double SimilarityValue { get; set; }

  20.  

  21.        /// <summary>

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

  23.        /// </summary>

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

  25.    }

  26.  

  27.    /// <summary>

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

  29.    /// </summary>

  30.    public static class EnumerableMethodSimilarityExtension

  31.    {

  32.        /// <summary>

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

  34.        /// </summary>

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

  36.        /// <param name="targetText">目標(biāo)字符串</param>

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

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

  39.        {

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

  41.        }

  42.  

  43.        /// <summary>

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

  45.        /// </summary>

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

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

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

  49.        /// <param name="targetText">目標(biāo)字符串</param>

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

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

  52.        {

  53.            if (source == null)

  54.            {

  55.                throw new ArgumentNullException("source");

  56.            }

  57.            if (textselector == null)

  58.            {

  59.                throw new ArgumentNullException("textselector");

  60.            }

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

  62.            double? minStringSimilarityValue = null;

  63.            List<TSource> similarityTargetList = null;

  64.            foreach (var item in source)

  65.            {

  66.                string elementTextValue = textselector(item);

  67.                if (string.IsNullOrEmpty(elementTextValue))

  68.                {

  69.                    continue;

  70.                }

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

  72.                if (!minStringSimilarityValue.HasValue)

  73.                {

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

  75.                    minStringSimilarityValue = tempValue;

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

  77.                    continue;

  78.                }

  79.                if (tempValue < minStringSimilarityValue.Value)

  80.                {

  81.                    minStringSimilarityValue = tempValue;

  82.                    similarityTargetList.Clear();

  83.                    similarityTargetList.Add(item);

  84.                    continue;

  85.                }

  86.                if (tempValue == minStringSimilarityValue.Value)

  87.                {

  88.                    similarityTargetList.Add(item);

  89.                    continue;

  90.                }

  91.            }

  92.            if (!minStringSimilarityValue.HasValue)

  93.            {

  94.                //說明集合是空的

  95.                return null;

  96.            }

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

  98.            result.SimilarityValue = minStringSimilarityValue.Value;

  99.            result.SimilarityTargetList = similarityTargetList;

  100.            return result;

  101.        }

  102.    }

  103.  

  104. }

謝謝瀏覽!


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