字串核函式的簡單python實現

2021-07-13 21:38:48 字數 1671 閱讀 4159

要對字串聚類,字串的距離度量是乙個問題.

使用最長公共子串行或者最長公共字串都有問題.

看到字串核函式,感覺還不錯,沒找到它的實現,自己實現了乙個效率低下的版本.

def list2dict(li):

'''[[3,4],[3,5],[4,2]]->

'''di =

for i in li:

return di

def nincreasingindex(s, e, n):

x = range(s, e)

if n < 1:

return

if n == 1:

return [[i] for i in x]

if s == e:

return

ans =

for i in x:

for j in nincreasingindex(i + 1, e, n - 1):

j.insert(0, i)

return ans

def getitemsofindexs(li, indexs):

return [li[i] for i in indexs]

def stringkernel(a, b, n, lambdaa):

'''string kernel function

@author: psmlbj

@date: 2016.06.23

'''def span(indexs):

return indexs[-1] - indexs[0] + 1

subsalist = [[''.join(getitemsofindexs(a, indexs)), indexs]

for indexs in nincreasingindex(0, len(a), n)]

subsadict = list2dict(subsalist)

subsblist = [[''.join(getitemsofindexs(b, indexs)), indexs]

for indexs in nincreasingindex(0, len(b), n)]

subsbdict = list2dict(subsblist)

inters = set(subsadict.keys()) & set(subsbdict.keys())

subsadict =

subsbdict =

transvection = 0

for k in subsadict.keys():

for sa in subsadict[k]:

for sb in subsbdict[k]:

transvection += lambdaa**(span(sa) + span(sb))

return transvection

def strkernelstand(a, b, n=2, lambdaa=0.8):

return (stringkernel(a, b, n, lambdaa) /

(1+(stringkernel(a, a, n, lambdaa) *

stringkernel(b, b, n, lambdaa))**0.5))

python字串函式

對於月份不足兩位補零操作如下 stryearmonth str year str month zfill 2 不足兩位補充0 生成字串變數 strcpy sstr1,sstr2 sstr1 strcpy sstr2 sstr1 sstr1 strcpy2 print sstr2 比較字串 strcm...

python 字串函式

str.count sub 返回 sub在str中出現的次數 str.find sub 返回 從左開始,查詢sub在str中第一次出現的位置。如果str中不包含sub,返回 1 str.index sub 返回 從左開始,查詢sub在str中第一次出現的位置。如果str中不包含sub,舉出錯誤 st...

Python 字串函式

注意cmp函式的輸出結果和c語言的strcmp是一樣的。還可以用 aaa bbb 來比較字串。擷取字串 特別注意 下標從0開始 str 0 3 不包含下標為3的字元。str 0123456789 print str 0 3 擷取第一位到第三位的字元 print str 擷取字串的全部字元 print...