找出兩個字串中相同的詞語,返回乙個分值

2021-08-29 18:04:45 字數 1268 閱讀 9017

由於筆者工作的需求,給定乙個字串,需要從一堆字串中找出與其最相似的字串,網路的一些演算法發現跟自己的需求不匹配,於是自己寫了乙個,話不多說,請看下文。

給定兩個字串,能將兩個字串中相同詞語的相似度返回乙個分值。

分值跟次數的個數有關,具體舉例如下:

source="我有乙個小毛驢,我從來都不騎"

target="我哈乙個哈哈哈,我從來哈哈哈"

上邊兩個詞語中,相同的字有「我,乙個,我從來」,因為我們說的是詞,所以我不算

所以相同詞語為「乙個,我從來」,「乙個」有兩個字,記兩分,「我從來」有三個字記三分,共計5分。

取source的第乙個詞「我有」,看target中是否包含,如果不包含則不計分,繼續看下乙個詞「有一」,如果包含,繼續擴大

詞的長度「有乙個」,還是繼續前邊的方法,直到將source全部遍歷完,

本文選用c#來實現**,如果讀者使用其他語言,看**注釋自己修改一下即可,注釋寫的很詳細。

/// /// 目標:

/// 給定兩個字串,能將兩個字串中相同詞語的相似度返回乙個分值

/// 計分方式:

/// 分值跟次數的個數有關,具體舉例如下:

/// source="我有乙個小毛驢,我從來都不騎"

/// target="我哈乙個哈哈哈,我從來哈哈哈"

/// 上邊兩個詞語中,相同的字有「我,乙個,我從來」,因為我們說的是詞,所以我不算

/// 所以相同詞語為「乙個,我從來」,「乙個」有兩個字,記兩分,「我從來」有三個字記三分,共計5分。

/// **思想:

/// 取source的第乙個詞「我有」,看target中是否包含,如果不包含則不計分,繼續看下乙個詞「有一」,如果包含,繼續擴大

/// 詞的長度「有乙個」,還是繼續前邊的方法,直到將source全部遍歷完,

///

///

///

/// 分數

public static int countsamewords(string source,string target)

if (rowsize == 0)

//定義乙個集合,用來儲存相同的詞語,防止乙個字串中出現重複詞語,重複計分

arraylist templist=new arraylist();

//遍歷source的詞語,

for (int i=0;i2) }}

return sum;

}

找出兩個字串陣列中的相同元素

public static listgetallsameelement1 string strarr1,string strarr2 list strlist1 new arraylist arrays.aslist strarr1 段1 liststrlist2 new arraylist arr...

查詢兩個字串中相同字元

for 歷遍第乙個字串的字元,過程中用 in 檢測字元是否存在於第二個字串中。若是在則將其新增在列表中。一 函式檔案 def intersect seq1,seq2 定義交集函式,函式名及變數 res 定義空列表用來盛放相同字元 for x in seq1 歷遍字串1 if x in seq2 歷遍...

判斷兩個字串是否相同

data segment mess1 db computer software mess2 db computer software data ends code segment assume ds data,cs code start mov ax,data mov ds,ax mov es,ax...