Python中一种模糊匹配算法的改进

2024-09-28 22:23:13 发布

您现在位置:Python中文网/ 问答频道 /正文

任务:取两个文本文件,输出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()

问题:这是可行的,但是效果不是很好。下面是一个匹配的例子:

^{pr2}$ 我不能把最小的百分比提高太多,因为我需要能够使大学与大学匹配。另外,我不能只确保第一个单词匹配,因为有些字符串以“the”开头,需要与排除“the”的字符串匹配。有人能给我指出一个方向,让我把技术上75%相似,但对人类来说根本不相似的匹配?

Tags: csvtheclosematchopenitemtryseta
2条回答

最后我写了一个最常见的单词脚本,然后删除了最常见的单词。正如@e-satis在评论中建议的那样,这大大改善了我的结果。然而,difflib给了我比pylevenshtein更好的结果,所以我不能把他的答案标记为接受。在

我会尝试用pylevenshtein之类的工具比较字符串。它允许模糊字符串比较。在

相关问题 更多 >