在日常應用中,文字比較是乙個比較常見的問題。文字比較演算法也是乙個老生常談的話題。
文字比較的核心就是比較兩個給定的文字(可以是位元組流等)之間的差異。目前,主流的比較文字之間的差異主要有兩大類。一類是基於編輯距離(edit distance)的,例如ld演算法。一類是基於最長公共子串的(longest common subsequence),例如needleman/wunsch演算法等。
ld演算法(levenshtein distance)又成為編輯距離演算法(edit distance)。他是以字串a通過插入字元、刪除字元、替換字元變成另乙個字串b,那麼操作的過程的次數表示兩個字串的差異。
例如:字串a:kitten如何變成字串b:sitting。
第一步:kitten——》sitten。k替換成s
第二步:sitten——》sittin。e替換成i
第三步:sittin——》sitting。在末尾插入g
故kitten和sitting的編輯距離為3
樓主一開始遇到這個問題的時候也是思考良久,覺得利用r語言很難實現,但是r最大的優點就是包多,經過千辛萬苦的谷歌翻牆搜尋,讓我找到了解決方法:
例題:設計乙個演算法,求下列所示專業名稱中與「電腦科學與技術」最相似的名稱:
1、電腦科學與應用,2、計算機科學技術,3、金融學電腦科學與應用,4、計算科學與技術
**如下:
k1<-「電腦科學與技術」[1] 「計算機科學技術」 「計算科學與技術」k2<-『電腦科學與應用』
k3<-『計算機科學技術』
k4<-『金融學電腦科學與應用』
k5<-『計算科學與技術』
kn<-c(k2,k3,k4,k5)
agrep(k1,kn,max =1.1, value = true,usebytes = t,costs = null)
其中引數max控制的是可以匹配的最大距離,usebytes控制的是按照字元比較還是bytes比較。
下面貼出乙個演算法,返回一組資料中所有相似的字串
[1][1] 「電腦科學與技術」 「計算機科學技術」 「計算科學與技術」
[2]
[1] 「電腦科學與應用」 「金融學電腦科學與應用」
[3]
[1] 「電腦科學與技術」 「計算機科學技術」
[4]
[1] 「金融學電腦科學與應用」
用R語言進行文字挖掘和主題建模
我們每天都會遇到各種各樣的文字資料,但大部分是非結構化的,並不是全部都是有價值的。我們閱讀的書籍,部落格,新聞文章,網頁,電子郵件等都是文字資料。所有這些文字都為我們提供了大量的資訊,並不斷增長。但是,並非所有的資料都是有用的。我們過濾掉噪音,只保留重要的資訊。這是乙個乏味的過程,但作為人類,我們需...
用R語言進行文字挖掘和主題建模
我們每天都會遇到各種各樣的文字資料,但大部分是非結構化的,並不是全部都是有價值的。我們閱讀的書籍,部落格,新聞文章,網頁,電子郵件等都是文字資料。所有這些文字都為我們提供了大量的資訊,並不斷增長。但是,並非所有的資料都是有用的。我們過濾掉噪音,只保留重要的資訊。這是乙個乏味的過程,但作為人類,我們需...
用R語言進行文字挖掘和主題建模
我們每天都會遇到各種各樣的文字資料,但大部分是非結構化的,並不是全部都是有價值的。我們閱讀的書籍,部落格,新聞文章,網頁,電子郵件等都是文字資料。所有這些文字都為我們提供了大量的資訊,並不斷增長。但是,並非所有的資料都是有用的。我們過濾掉噪音,只保留重要的資訊。這是乙個乏味的過程,但作為人類,我們需...