要對字串聚類,字串的距離度量是乙個問題.
使用最長公共子串行或者最長公共字串都有問題.
看到字串核函式,感覺還不錯,沒找到它的實現,自己實現了乙個效率低下的版本.
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...