2011-12-15 12 views
5

文字列を引数にとり、この文字列を2つの他の文字列に変換して、最も類似した文字列と相違点の数を返す関数を記述する必要があります。2つの文字列を比較して最も類似している文字列を返す

def f(word): 
    lst=["JIBM", "NUNE", "NUMB"] 
    for i in lst: 
     d=k(word, lst) 
     return differences 
     for n in d: 
      print min(sum(n)) 

場所:

def k(word1, word2): 
    L=[] 
    for w in range(len(word1)): 
     if word1[w] != word2[w]: 
      L.append(1) 
     else: 
      L.append(0) 
    return L 

を私は例えばのリストを取得するように、[1,0,0,0]単語1 = "NUMB場合、私は試してみました

def func("LUMB"): 
    lst=["JIBM", "NUNE", "NUMB"] 
should return: 
("NUMB",1) 

"とword2 =" LUMB "

+3

[テキスト差分アルゴリズム](http://stackoverflow.com/questions/145607/text-difference-algorithm)および[ファジー文字列比較のための良いPythonモジュール](http://stackoverflow.com/questions)をご覧ください。/682367/good-python-modules-for-fuzzy-string-comparison) – Chris

+0

このリンクでも多数の回答が得られます。http://stackoverflow.com/questions/682367/good-python-modules-for-fuzzy -string-comparison –

+0

サイトにも同様の投稿があります。ここでもっと貴重な答えが得られるでしょう。http://stackoverflow.com/questions/682367/good-python-modules-for-fuzzy-string-comparison –

答えて

10

Shawn Chinが最良のソリューションを提供しているようですが、非組み込みモジュールを使用できない場合は、からには役立つかもしれない:

import difflib 
difflib.get_close_matches("LUMB", ["JIBM", "NUNE", "NUMB"], 1) 

の差の数がSequenceMatcherget_opcodes方法を使用してもらって、その戻り値で作業することができます。

>>> from Levenshtein import distance 
>>> from operator import itemgetter 
>>> lst = ["JIBM", "NUNE", "NUMB"] 
>>> min([(x, distance("LUMB", x)) for x in lst], key=itemgetter(1)) 
('NUMB', 1) 

あるいは、関数として:

from Levenshtein import distance 
from operator import itemgetter 
def closest(word, lst): 
    return min([(x, distance(word, x)) for x in lst], key=itemgetter(1)) 

print closest("NUMB", ["JIBM", "NUNE", "NUMB"]) 

P.S.をLevenshtein distanceを計算するpylevenshteinを使用

+0

これは編集距離を返しませんが、標準ライブラリのみを使用するのが好きです。 +1 –

6

追加の依存関係を避けたい場合は、距離を計算するための独自の関数を実装することができます。例えば、いくつかのバージョンがそれぞれwikibooksに提案されており、それぞれ独自の長所と短所があります。

ただし、パフォーマンスが問題になる場合は、カスタムビルドされたモジュールを使用することを検討してください。 pylevenshtein以外にも、python-levenshteinnltk.metrics.distance(すでにNLTKを使用している場合)があります。

関連する問題