0

与えられた単語と一致する順列を探し、列の位置に基づいてデータを整列したい。他の列の単語の同様の順列を見つける

IE - 私はそれがこのようなものになります、私はいくつかのwebsites.Sayから廃棄データをCSVを作成しました。その後、私は(1)Name2はで名1から各単語の順列を見つけたい

Name1  OtherVars Name2  More Vars 

Stanford 23451  Mamford  No 
MIT   yes  stanfor1d  12 
BeachBoys pie  Beatles  Sweeden 

をし、 (2)Name1からその単語を含むテーブルを印刷する+それはOtherVarsの一致する単語であり、Name2のその単語の順列+ MoreVarsの一致です。 (一致するものが見つからない場合は、単に単語を削除してください)。

結果は、この場合には次のようになります。だから、

Name1  OtherVars  Name2  More Vars 

Stanford 23451  stanford  12 

、どのように私ん:

  1. は、他の列内の単語の一致順列を探しますか?

  2. 2つの単語とそれが他の列にマップされている値を出力しますか?

PS - これは似たような質問です。しかし、それはJavaであり、それは疑似コードです。 How to find all permutations of a given word in a given text? Difflibはこれに基づいてCSVをに適していないようです:How to find the most similar word in a list in python

PS2 - 私はしかしFuzzymatchを使用することをお勧めして、私はそれがこのケースでやり過ぎだと思われます。

+1

「Name2」の2番目のエントリには1が含まれていますか? – marisbest2

+0

また、この場合の「順列」とは何ですか?また、「類似」をどのように定義していますか? – marisbest2

+0

はい@ marisbest2はそこにあることを意味します。パーミュテーションは、Levenshtein Distance、またはさらに優れたユーザ定義関数を使用できるほど類似していると定義されます。 – oba2311

答えて

0

あなたが同じ「スタンフォード」のための出力および「stanf1ord」を返す関数を探しているなら、あなたは可能性:

  • 利用小文字
  • は文字だけ
  • ソート手紙を保つ


import re 

def signature(word): 
    return sorted(re.findall('[a-z]', word.lower())) 

print(signature("Stanford")) 
# ['a', 'd', 'f', 'n', 'o', 'r', 's', 't'] 
print(signature("Stanford") == signature("stanfo1rd")) 
# True 

第1列から署名セットを作成し、第2列に一致するものがあるかどうかを確認できます。

+0

ありがとうございますが、あなたが提案しているこの正規化は、この問題の多くのうちの第一歩に過ぎないと思います。あなたのように正規化した後、単語の近くにある良い一致を検索する方法を提案しています。 検索スペース内のすべてのデータを正規化することをお勧めしますか? – oba2311

+0

@ oba2311あなたはあなたの質問でただの順列について言及しました。順列は私のコードでカバーされています。より多くのファジィ論理が必要な場合は、何を試したかを正確に定義する必要があります。 –

0

「並べ替え」ではなく、あいまいな一致が必要なようです。そこ少数のpythonファジー・マッチングライブラリがありますが、私はまたfuzzywuzzy

のような人々は、あなたがあなた自身をロールバックすることができると思います。何かのように

def ismatch(s1,s2): 
    # implement logic 
    # return boolean if match 
    pass 

def group(): 
    pairs = [(n1, v1, n2, v2) for n1 in names1 for n2 in names2 if ismatch(n1,n2)] 
    return pairs 
関連する問題