C# 基于XML文件中声明的规则,基于同一词典中的部分键匹配词典中的字符串值
我正试图找到一种有效的方法,根据XML文件中规定的规则匹配此词典中的字符串 我将尝试从一开始就解释代码。有两个csv文件 File1.csv File2.csv XML:C# 基于XML文件中声明的规则,基于同一词典中的部分键匹配词典中的字符串值,c#,xml,dictionary,matching,string-matching,C#,Xml,Dictionary,Matching,String Matching,我正试图找到一种有效的方法,根据XML文件中规定的规则匹配此词典中的字符串 我将尝试从一开始就解释代码。有两个csv文件 File1.csv File2.csv XML: <?xml version="1.0" encoding="utf-8" ?> <FeedInfo> <Rule> <RuleInfo> <RuleName>Rule 1</RuleName> </RuleInfo> <Rule
<?xml version="1.0" encoding="utf-8" ?>
<FeedInfo>
<Rule>
<RuleInfo>
<RuleName>Rule 1</RuleName>
</RuleInfo>
<Rules>
<item name ="FirstName" NoOfChars ="ALL" number ="0"/>
<item name ="LastName" NoOfChars ="ALL" number ="1"/>
<item name ="ID" NoOfChars ="ALL" number ="2" />
</Rules>
</Rule>
</FeedInfo>
还有这样的字典XML字典
TRAROB,Ref_1==KEN|CARPENTER|67814|1122
TRAROB,Ref_2==TRAN|ROBINSON|67814|1122
TRAROB,Ref_3==TRAN|ROBINSON|67871|1122
TRAROB,Ref_4==TRAN|ROBINSON|67871|1122
MCKBAR,Ref_5==LAWSN|PERDUE|6761|2009
MCKBAR,Ref_6==MCKEN|BARNUM|6761|2009
MCKBAR,Ref_7==MCKEN|BARNUM|6768|2009
MCKBAR,Ref_8==MCKEN|BARNUM|6768|2009
TRAROB,Ref_9==TRAN|ROBINSON|67871|1122
[Rule1|0]
[Rule1|1]
[Rule1|2]
现在,在这一切之后,我被困在这里:我需要用相同的部分键匹配所有值,即SID或KEY.split(,)[0]。在最后一个字典中,基于XML中提到的数字。拆分值后数组的第0、第1和第2个位置应连接起来
我已经创建了字符串列表(int)格式的XML字典。因此,Ref_1应基于(0,1,2)与Ref_2、Ref 3、Ref_4匹配,即firstName、LastName、ID的串联。例如:
参考文献1、参考文献2、参考文献3、参考文献4都具有相同的SID(SidRefId字典)
所以我需要匹配
KENCARPENTER67814和TRAYROBINSON67814、TRAYROBINSON67871、TRAYROBINSON67871和TRAYROBINSON67871,这将为KENCARPENTER67814返回FALSE,因为所有字符串都不匹配,类似地,所需输出为:
RULE1,TRAROB,Ref_1==KEN|CARPENTER|67814|1122|FALSE
RULE1,TRAROB,Ref_2==TRAN|ROBINSON|67814|1122|FALSE
RULE1,TRAROB,Ref_3==TRAN|ROBINSON|67871|1122|TRUE
RULE1,TRAROB,Ref_4==TRAN|ROBINSON|67871|1122|TRUE
RULE1,MCKBAR,Ref_5==LAWSN|PERDUE|6761|2009|FALSE
RULE1,MCKBAR,Ref_6==MCKEN|BARNUM|6761|2009|FALSE
RULE1,MCKBAR,Ref_7==MCKEN|BARNUM|6768|2009|TRUE
RULE1,MCKBAR,Ref_8==MCKEN|BARNUM|6768|2009|TRUE
RULE1,TRAROB,Ref_9==TRAN|ROBINSON|67871|1122|TRUE
我曾想复制一份SidRefId字典,并将其相互匹配,但对于大型文件和XML文件中的多个规则,这将花费大量时间,我将要处理这些问题
有人能告诉我一个有效的方法吗?谢谢 在我看来,您似乎正在尝试开发自己的引擎以实现记录链接。也就是说,用于查找不完全重复的重复记录。如果我是你的话,我不会尝试制造自己的引擎,而是使用现有的引擎 Wikipedia曾经有一个这样的引擎列表,但是它被删除了,我不知道还有其他的列表,所以我只链接到我制作的一个。还有其他引擎 如果您坚持自己做这件事,一种方法就是您在这里所做的:为每个记录构建一个键,然后按键分组。不过,这是相当原始的,所以您应该在按键进行匹配之后进行更详细的匹配。仅按键匹配将导致许多误报 一个更复杂的方法是像我所做的那样:用Lucene这样的搜索引擎为数据编制索引,然后搜索类似的记录,并对候选人进行详细的比较。或者可以使用位置敏感哈希。或度量空间。或基于q-gram的索引
TRAROB,Ref_1==KEN|CARPENTER|67814|1122
TRAROB,Ref_2==TRAN|ROBINSON|67814|1122
TRAROB,Ref_3==TRAN|ROBINSON|67871|1122
TRAROB,Ref_4==TRAN|ROBINSON|67871|1122
MCKBAR,Ref_5==LAWSN|PERDUE|6761|2009
MCKBAR,Ref_6==MCKEN|BARNUM|6761|2009
MCKBAR,Ref_7==MCKEN|BARNUM|6768|2009
MCKBAR,Ref_8==MCKEN|BARNUM|6768|2009
TRAROB,Ref_9==TRAN|ROBINSON|67871|1122
[Rule1|0]
[Rule1|1]
[Rule1|2]
RULE1,TRAROB,Ref_1==KEN|CARPENTER|67814|1122|FALSE
RULE1,TRAROB,Ref_2==TRAN|ROBINSON|67814|1122|FALSE
RULE1,TRAROB,Ref_3==TRAN|ROBINSON|67871|1122|TRUE
RULE1,TRAROB,Ref_4==TRAN|ROBINSON|67871|1122|TRUE
RULE1,MCKBAR,Ref_5==LAWSN|PERDUE|6761|2009|FALSE
RULE1,MCKBAR,Ref_6==MCKEN|BARNUM|6761|2009|FALSE
RULE1,MCKBAR,Ref_7==MCKEN|BARNUM|6768|2009|TRUE
RULE1,MCKBAR,Ref_8==MCKEN|BARNUM|6768|2009|TRUE
RULE1,TRAROB,Ref_9==TRAN|ROBINSON|67871|1122|TRUE