繁体   English   中英

改进Python中的模糊匹配算法

[英]Improving a fuzzy matching algorithm in 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()

问题 :可以,但是结果不是很好。 这是一个匹配示例:

Fovea Pharmaceuticals SA Kobe Pharmaceutical Univ
我不能将Diff中的最小百分比调高太多,因为我需要能够将Univ与University相匹配。 另外,我不能仅仅确保第一个单词匹配,因为某些字符串以“ The”开头,并且需要与排除“ The”的字符串匹配。 谁能指出我的方向,就会抛出技术上相似度为75%但与人类完全不相似的比赛?

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

我最终写了一个最普通的单词脚本,然后删除了最普通的单词。 正如@ e-satis在他的评论中建议的那样,这大大改善了我的结果。 但是,difflib比pylevenshtein给我更好的结果,因此我不能将他的回答标记为已接受。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM