2013-02-09 83 views
-1

Python中是否有内置函数,其功能类似于Ngram.Compare('text','text2')字符串比较。我不想安装N-gram模块。我尝试了所有公共和私有函数,通过做dir('text')内置的Python函数用于字符串比较,如N-gram

我想得到一个比较两个字符串比较匹配。

+0

可能重复的[快n-gram中的计算](http://stackoverflow.com/questions/7591258/fast-n-gram-calculation) – 2013-02-09 06:39:22

+0

@thewolf对不起,我不想要Ngrams。我需要两个字符串的百分比匹配 – 2013-02-09 06:42:30

+0

“百分比”匹配是什么意思?你能提供一些样本输入/输出吗? – Volatility 2013-02-09 06:43:30

回答

5

标准库difflib

你也可以做一个Levenshtein距离:

def lev(seq1, seq2): 
    oneago = None 
    thisrow = range(1, len(seq2) + 1) + [0] 
    for x in xrange(len(seq1)): 
     twoago, oneago, thisrow = oneago, thisrow, [0] * len(seq2) + [x + 1] 
     for y in xrange(len(seq2)): 
      delcost = oneago[y] + 1 
      addcost = thisrow[y - 1] + 1 
      subcost = oneago[y - 1] + (seq1[x] != seq2[y]) 
      thisrow[y] = min(delcost, addcost, subcost) 
    return thisrow[len(seq2) - 1] 

def di(seq1,seq2): 
    return float(lev(seq1,seq2))/min(len(seq1),len(seq2)) 

print lev('spa','spam') 
print di('spa','spam') 
+0

感谢标准lib ... – 2013-02-09 09:18:52