任务:获取两个文本文件并输出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()
问题:这有效,但效果不是很好。以下是匹配示例:
Fovea Pharmaceuticals SA Kobe Pharmaceutical Univ我无法将Diff中的最小百分比调高太多,因为我需要能够将Univ与大学相匹配。另外,我不能确保第一个单词匹配,因为某些字符串以“The”开头,需要与排除“The”的字符串匹配。任何人都可以指出我的方向会抛出技术上75%相似的匹配,但对人类来说根本不相似吗?
答案 0 :(得分:0)
我会尝试使用pylevenshtein等工具比较字符串。它允许模糊字符串比较。
答案 1 :(得分:0)
我最后编写了一个最常用的单词脚本,然后删除了最常用的单词。这显着改善了我在@ e-satisf在他的评论中提出的结果。然而,difflib给了我比pylevenshtein更好的结果,所以我无法将他的答案标记为被接受。