system: [SYSTEM]

user: 3. 短文本近似字符串匹配算法 如引言中所述，如将Web表格语料库作为领域词典抽取的数据源，首先需解决的问题是数据层面的异构性。本节将解决相同实体的多重表示问题和Web表格语料库中的部分数据质量问题。首先给出两种字符串相似度，其一是带有逆文档词频权重的对称化Jaccard包含相似度，其二是基于编辑距离的相似度。接下来提出短文本近似字符串匹配算法。从而使本文中的领域知识抽取算法能适应于不同来源的、可能存在拼写错误或表格提取问题的Web表格，避免一些重要数据被后文中的映射关系挖掘算法过滤掉。 3.1. 带IDF权重的Jaccard最大包含度 首先，将字符串看作由标签组成的集合，字符串中的每一个语义单元看作一个标签，例如：将“广东省深圳市光明新区马田街道新庄社区”转化为{广东省，深圳市，光明新区，马田街道，新庄社区}。标签化不仅可以令多个表示相同意义的词指向同一个标签，解决同义词转换的问题；还可以解决一词多义问题，在处理诸如“吉林(省)吉林(市)”、不同城市的“铁西区”等元素时，尽管它们的字符串表示形式相同，但标签化足以避免混淆。 在解决上述两大问题的同时，将字符串转化为标签集后，可以用集合相似度来反映字符串间的相似性。比较典型的集合相似度衡量方式是Jaccard相似系数(Jaccard Similarity Coefficient)，是通过样本间交 集与总集之比衡量相似度的算法，用于字符串匹配时，可表示为 | Str 1 ∩ Str 2 | | Str 1 ∪ Str 2 | 。在字符串 Str 1 与字符串 Str 2 间，两者的交集越大，表示两字符串的相似度越高。Jaccard相似系数与元素(字符)在集合(字符串)中的顺序无关，仅与元素在集合中是否出现有关。但如果一个字符串完全包含于另一个长字符串时 ( Str 1 ⊃ Str 2 ， | Str 1 | ≫ | Str 2 | ) ，其相似度很高，而实际计算出的Jaccard相似系数却很低。 Jaccard包含度(Jaccard Containment) [ 13 ]，表示为JCont，其公式为 JCont ( Str 1 ， Str 2 ) = | Str 1 ∩ Str 2 | | Str 1 | (1) 公式(1)表示 Str 2 关于 Str 1 的Jaccard包含度，若 Str 1 ⊃ Str 2 ， | Str 1 | ≫ | Str 2 | ， JCont ( Str 1 ， Str 2 ) = | Str 2 | | Str 1 | ≈ 0 ，而 JCont ( Str 2 ， Str 1 ) = | Str 2 | | Str 2 | = 1 ，这在一定程度上解决了上述问题。大多数情况下 | Str 1 ∩ Str 2 | | Str 1 | ≠ | Str 1 ∩ Str 2 | | Str 2 | ， 称Jaccard包含度不对称。 在本文研究的问题中，来自不同Web表格中的数据往往将同一元素的简写或别名掺杂在一起，同时字符串也有可能会缺失部分字段，但缺失的部分有可能对其表意并没有影响，公式(1)会过度惩罚这样的字符串。当然，如果多次迭代运行本文的领域词典抽取算法，利用新发现的领域词典来替换同义词，缺失的部分会得到逐步的填充，字符串会逐步完备化，但这么做势必会大幅提高计算量。如果在计算时，令每个标签的权重随其在语料库中出现的频率逆序改变(即逆文档频率IDF，inverse document frequency)，即可解决此问题 [ 14 ]。通常，IDF作为TF-IDF (Term Frequency-Inverse Document Frequency，词频-逆文档频率)的一个分量，表示记录中某个词的重要性与它在其他记录中出现的次数成反比，IDF削弱了语料库中较高频度词语的影响，带来了较好的内容区分能力。 带有IDF权重的Jaccard包含度公式如下： JCont IDF ( Str 1 ， Str 2 ) = weight IDF ( Str 1 ∩ Str 2 ) weight IDF ( Str 1 ) (2) 与公式(1)相比，这里用IDF权重和代替了集合中元素个数，设化为标签集后的字符串为 Str = { a 1 ， a 2 ， a 3 ， ⋯ ， a n } ， weight IDF ( Str ) = ∑ 1 n IDF ( a n ) ，其中 IDF ( a n ) = log | A all | | { A m : a n ∈ A m } | + 1 ， | A all | 指表格 语料库中字符串的总数， | { A m : a n ∈ A m } | 指表格语料库中包含标签 a n 的字符串的个数。 显然，同Jaccard包含度一样，IDF加权包含度也是不对称的。在Web表格语料库中，由于初始时可能缺乏规范的完备数据，更需要一种对称化的方式去衡量两个字符串间的相似性。由最大包含度可得： MJCont IDF ( Str 1 ， Str 2 ) = max { weight IDF ( Str 1 ∩ Str 2 ) weight IDF ( Str 1 ) ， weight IDF ( Str 1 ∩ Str 2 ) weight IDF ( Str 2 ) } (3) 其中， Str 1 和 Str 2 是待匹配字符串， MJCont IDF ( Str 1 ， Str 2 ) 为 Str 1 和 Str 2 间的相似性。当两个字符串的相似度不小于阈值 θ String 时，即 MJCont IDF ( Str 1 ， Str 2 ) ≥ θ String ，可认为这两个字符串指向同一实体。 并且，如果这两个字符串 和 间的相似度很高却都不完备，可对它们取并集来获得更为完备和规范的表述 Str complete ，即 Str complete = Str 1 ∪ Str 2 。 例1：如有两个字符串，“公明区一小”、“公明第一小学”，“光明实验初中”、“光明区实验学校”，由于“区”、“第”、“学”、“学校”等词在Web表格语料库中出现的频率较高，其IDF权重相应较低，若上述每组中两个字符串间的相似度高于阈值，可归并为完整字符串“公明区第一小学”、“光明区实验初中学校”，这在一定程度上实现了缩写的补全。而更具实际意义的是，上述字符串相似度与字符串完备化方法适用于匹配表示地址的字符串，如遇到“罗湖区海山街道田东社区梧桐路1968号”和“广东省深圳市罗湖区田东社区梧桐路1968号”时，可判定这两个字符串表示相同的实体，并可补全为“广东省深圳市罗湖区海山街道田东社区梧桐路1968号”。 3.2. 相对编辑距离阈值 在这里用相对编辑距离阈值来代替传统的固定编辑距离阈值，这是因为固定的编辑距离阈值难以兼顾长、短字符串。由表1~表5中可发现，Web表格中的某些字段较短，仅有2个字，匹配时要求编辑距离阈值为0，而有的字段较长，多达10余个字符，约束可适当放宽。 设待匹配的分类值 Str 1 和 Str 2 间的编辑距离为 d ed ( Str 1 ， Str 2 ) 。当编辑距离 d ed ( Str 1 ， Str 2 ) 小于阈值 θ ed 时，即可将 Str 1 和 Str 2 视为匹配。相对编辑距离阈值可定义为 θ ed = min { ⌊ | Str 1 | ⋅ f ed ⌋ ， ⌊ | Str 2 | ⋅ f ed ⌋ ， k ed } (4) 公式(4)中的相对编辑距离阈值 θ ed 是根据字符串的长度 | Str 1 | 、 | Str 2 | 和分度值 f ed 动态确定的。选择分段表示的相对编辑距离，使所需的编辑距离随待匹配值的长度变化，其原因是在处理汉语时，短字符串必须做到完全精确匹配。更进一步，将阈值限定在固定值 k ed 以内，以避免误匹配。在本文的实验中， f ed = 0.2 ， k ed = 10 。 例2：对于“东乐花园”、“东安花园”两个字符串，如果按单字拆分，其编辑距离为1，而相对编辑距离阈值为 min { ⌊ 4 ∗ 0.2 ⌋ ， ⌊ 4 ∗ 0.2 ⌋ ， 10 } = 0 ，避免了误匹配。而进一步地，如果将“花园”整体视为一个标签，则相对编辑距离阈值为 min { ⌊ 3 ∗ 0.2 ⌋ ， ⌊ 3 ∗ 0.2 ⌋ ， 10 } = 0 ，避免误匹配的效果会更好。 3.3. 近似字符串匹配 后续章节中的算法是以近似字符串匹配算法为基础的，如果两列中元素个数分别为m、n，需要进行 O ( m n ) 级相似字符串匹配计算。设待匹配的字符串中字符数量分别为 | Str 1 | 、 | Str 2 | ，在基于动态规划矩阵的编辑距离算法中，每次匹配的时间杂度和空间复杂度均为 O ( | Str 1 | | Str 2 | ) 。这需要消耗大量的时间和空间。为提高效率，本文做如下优化：由于编辑距离阈值 θ ed 普遍较小，根据Ukkonen算法 [ 15 ]，在动态规划矩阵中，仅需计算对角线附近的较小范围内的值，这使得每次匹配的时间复杂度减小为 O ( θ ed ∗ min { | Str 1 | ， | Str 2 | } ) 。 由3.1节和3.2节，基于IDF-Jaccard最大包含度和相对编辑距离阈值，可得出近似字符串匹配算法，如算法1所示。 在算法1的伪代码中，第1行表示基于集合相似度的字符串匹配，在这里我们给它设定了较高的优先级。而第3到第19行是在编辑距离上限 θ ed 较低的前提下的高效字符串匹配算法，与Ukkonen算法类似。