0

我正在创建一个程序,该程序将分析两个数据网格并找到它们之间存在的可能匹配项。这两个数据网格将保存有关地毯的信息。这两个网格是在两个不同时间进行的库存,它们之间存在很大差异。这些地毯的尺寸可能略有不同,描述也有很大差异。我希望这个程序找到两个网格之间可能的匹配并将它们合并为一个。

我正在寻找有关如何开始真正的编程内容的想法,寻找可能的匹配项。这将是这个程序中最耗时的部分,我不知道从哪里开始。

这将是一个用 C# 编写的 Windows 程序。我有 C# 编程经验,但非常感谢示例和/或主要思想。

4

2 回答 2

1

此答案适用于没有简单答案的数据。如果您有数据密钥,请使用它。

在编写任何代码之前,我首先会问自己要搜索什么。“匹配”这两者的搜索参数是什么?关键词?你的地毯上有某种标识符吗?也许通过模式?在触摸键盘之前,我会先尝试解决这个问题。按大小搜索可能不是一个好主意。毕竟,两张 8x8 的地毯可能有数百种不同的可能性。

但也许描述之间有一些相似之处。如果描述本身是简单的英语,我会看看我是否找不到删除一些非常常见的单词以及标点符号并用空格替换它们的方法。 编辑:还使用 ToLower() 函数调用删除大写

List<String> CommonWords; 
foreach(string a in CommonWords) 
{
    DataBaseA.DescriptionString.replace(a, " "); 
    DataBaseB.DescriptionString.replace(b, " ");
}

例如,假设地毯描述 1 如下:“这款地毯是任何房间的绝妙补充,红色花卉图案与米色质朴外观相结合”

地毯描述 2 是:“时尚质朴的花卉图案,搭配现代的红色和米色”

运行 'common word remover' 会删除,比如'A'、'with'、'and'、'this'、'is'、'to'

你会拥有: 地毯美妙的添加任何房间红色花卉图案结合米色质朴的外观

“时尚质朴的花卉图案完整的当代红米色”

然后您可以遍历字符串并进行字符串匹配,如果匹配超过一定数量,则触发“数据网格”匹配。

string[] ArrayStringA = DataBaseA.DescriptionString.split(" ");
string[] ArrayStringB = DataBaseB.DescriptionString.split(" ");
int DataCounter = 0;

for(int i = 0; i < ArrayStringA.Length; i++)
{
    for(int j = 0; j < ArrayStringB.Length; j++)
    { 
        if(ArrayStringB[j] == ArrayString[i])
            DataCounter++;
    }
}

if(DataCounter > 4) //Match

现在请记住,这并不漂亮。这样做可能会花费大量时间来比较和维护,这绝不是万无一失的。但是,这是一个想法,希望您至少可以使用其中的一点点来提出更好的解决方案。

编辑二:当你的程序运行时,我不认为这是你想要一遍又一遍地发生的事情。所以我要做的是运行程序并构建匹配的 DataGrid。然后,一旦您找到匹配项并且一切看起来都不错,请将唯一标识符键添加到您的新数据中。通过这种方式,您将能够准确地知道未来哪个是哪个。

于 2012-07-05T20:22:42.477 回答
0

真的,这些数据将在数据网格中这一事实并不重要。数据网格将由列表或表格支持,而这个“源”数据将是您必须处理的。

回答这个问题很困难,因为您承认您不知道如何比较数据。在我看来,这些是重要的问题:

  1. 这两个来源是否按列匹配?
  2. 请问KEY,如果没有那么这提供了一个简单的匹配方法。如果不是,那么可以使用哪些字段进行匹配?
  3. 对新数据集的更新是否可信,如果不可信,为什么?
  4. 你为什么要进行这种匹配?是定期的还是一次性的?

如果 1-3 为真,那么答案很简单。遍历一个表,在另一个表中找到匹配的键,并使用您的逻辑(可能是更新时间)来确定哪些信息是准确的。

于 2012-07-05T19:58:35.180 回答