1

タスク:2つのテキストファイルを取得し、100%一致と75%一致を出力します。

解決策

import difflib
import csv

# Imports and parses the files
fileA = open("H:/comm.names.txt", 'r')
try:
        setA = fileA.readlines()
finally:    
        fileA.close()

fileB = open("H:/acad.names.txt", 'r')
try:
        setB = fileB.readlines()
finally:    
        fileB.close()

# 100% Match
setMatch100 = set(setA).intersection(setB)

Match100 = open("H:\Match100.txt", 'w')
try:
    for item in setMatch100:
        Match100.write(item)
finally:
    Match100.close()

# Remove 100% matches from the two lists
setA_LeftOver = set(setA).difference(setMatch100)
setB_LeftOver = set(setB).difference(setMatch100)

#Return the best match for setA_LeftOver[i] in setB_LeftOver that is at least 75% matching.
fMatch75 = open("H:\Match75.csv", 'w')
Match75 = csv.writer(fMatch75)
try:
    Match75.writerow(['File A', 'File B'])
    for item in setA_LeftOver:
                match = difflib.get_close_matches(item, setB_LeftOver, 1, 0.75)
                if len(match) > 0:
                        row = [item.rstrip(), match[0].rstrip()]
                        Match75.writerow(row)


finally:
    fMatch75.close()

問題:これは機能しますが、結果はあまり良くありません。一致の例を次に示します。

FoveaPharmaceuticalsSA神戸製薬大学
大学と大学を一致させる必要があるため、Diffの最小パーセントをあまり上げることができません。また、一部の文字列は「The」で始まり、「The」を除く文字列と一致する必要があるため、最初の単語が一致することを確認することはできません。技術的には75%似ているが、人間とはまったく似ていない試合を投げる方向に誰かが私を向けることができますか?

4

2 に答える 2

0

文字列をpylevenshteinなどのツールと比較してみます。あいまい文字列の比較が可能です。

于 2011-02-18T16:39:03.410 に答える
0

最終的に最も一般的な単語のスクリプトを作成し、次に最も一般的な単語を削除しました。@ e-satisが彼のコメントで示唆したように、これは私の結果を大幅に改善しました。ただし、difflibはpylevenshteinよりも優れた結果をもたらしたため、彼の回答を承認済みとしてマークすることはできません。

于 2011-07-13T19:09:45.373 に答える