FUZZYJOIN 命令

概念信息

模糊联接

使用模糊匹配将来自两个 Analytics 表的域合并为单个新的 Analytics 表。

说明

要检测单个字符域内几乎完全相同的值(模糊重复),请参见FUZZYDUP 命令

要使用精确匹配键域值联接表,请参见JOIN 命令

语法

FUZZYJOIN {DICE PERCENT 百分比 NGRAM n 元语法长度|LEVDISTANCE DISTANCE } PKEY 主键域 SKEY 辅助键域 {FIELDS 主域|FIELDS ALL <EXCLUDE 主域 <...n>>} <WITH 辅助键域|WITH ALL <EXCLUDE 辅助键域 <...n>>> <IF 测试> <OPEN> TO 表名称 <FIRSTMATCH> <WHILE 测试> <FIRST 范围|NEXT 范围> <APPEND>

说明

您不能在本地针对服务器表运行 FUZZYJOIN命令。

您必须完整指定 FUZZYJOIN 命令名称。您不能缩略它。

参数

名称 描述
DICE PERCENT 百分比 NGRAM n 元语法长度 | LEVDISTANCE DISTANCE

要使用的模糊匹配算法。

DICE 使用 Dice 系数算法

  • PERCENT 百分比两个字符串要成为模糊匹配所允许的最小 Dice 系数

    请指定一个从 0.0000 到 1.0000 的小数部分(例如,0.7500)。请最多使用四个小数位。

    减小该值时,可通过包括具有更高模糊度即彼此差异更大的字符串来增加匹配的数量。

  • NGRAM n 元语法长度 要使用的 n 元语法长度

    请指定一个整数(1 或更大)。

    增加 n 元语法长度可使两个字符串的相似性标准更加严格。

    N 元语法是在 Dice 系数计算过程中,将比较字符串划分而成的重叠子串(字符块)。

    说明

    当您指定 DICE 时,FUZZYJOIN 命令在 IF 语句中使用 DICECOEFFICIENT( ) 函数以有条件地联接键域值。有关该函数的详细信息,请参见DICECOEFFICIENT( ) 函数

LEVDISTANCE 使用编辑距离算法

  • DISTANCE 两个字符串要成为模糊匹配所允许具有的最大编辑距离

    请指定一个整数(1 或更大)。

    增大该值时,可通过包括具有更高模糊度即彼此差异更大的字符串来增加匹配的数量。

    说明

    当您指定 LEVDISTANCE 时,FUZZYJOIN 命令在 IF 语句中使用 LEVDIST( ) 函数以有条件地联接键域值。有关该函数的详细信息,请参见LEVDIST( ) 函数

    与该函数不同的是,FUZZYJOIN 命令中的编辑距离算法自动除去前导和后继空白,并且不区分大小写。

PKEY 主键域

主表中的字符键域或表达式。

您只能指定一个主键域。

SKEY 辅助键域

辅助表中的字符键域或表达式。

您只能指定一个辅助键域。

FIELDS 主域 | FIELDS ALL

要在联接输出表中包括的来自主表的域或表达式。

  • FIELDS 主域 包括指定的一个或多个域

    这些域被按照您列出它们的顺序包括在内。

  • FIELDS ALL 包括该表中的所有域

    这些域被按照它们出现在表布局中的顺序包括在内。

说明

如果您想要将主键域包括在联接表中,则必须明确指定它。指定 FIELDS ALL 也会包括它。

EXCLUDE 主域

可选

仅在使用 FIELDS ALL 执行模糊联接时有效。

要从该命令中排除的一个或多个域。EXCLUDE 使您可以通过排除指定的域优化 FIELDS ALL。

EXCLUDE 必须紧跟在 FIELDS ALL 后面。例如:

FIELDS ALL EXCLUDE 域 1 域 2

WITH 辅助域 | WITH ALL

可选

要在联接输出表中包括的来自辅助表的域或表达式。

  • WITH 辅助域包括指定的一个或多个域

    这些域被按照您列出它们的顺序包括在内。

  • WITH ALL 包括该表中的所有域

    这些域被按照它们出现在表布局中的顺序包括在内。

说明

如果您想要将辅助键域包括在联接表中,则必须明确指定它。指定 WITH ALL 也会包括它。

EXCLUDE 辅助域

可选

仅在使用 WITH ALL 执行模糊联接时有效。

要从该命令中排除的一个或多个域。EXCLUDE 使您可以通过排除指定的域优化 WITH ALL。

EXCLUDE 必须紧跟在 WITH ALL 后面。例如:

WITH ALL EXCLUDE 域 1 域 2

IF 测试

可选

一个条件表达式,它必须为真以便处理每个记录。仅对满足条件的那些记录执行该命令。

说明

在应用任何范围参数(WHILE、FIRST、NEXT)之后,仅针对表中的剩余记录评估 IF 条件。

说明

IF 条件可以引用主表、辅助表或者两者。

OPEN

可选

在命令执行后打开该命令创建的表。仅当该命令创建输出表时有效。

TO 表名

要将命令结果发送到的位置:

  • 表名将结果保存到一个 Analytics 表

    请将表名指定为具有 .FIL 文件扩展名的带引号的字符串。例如:TO "Output.FIL"

    默认情况下,表数据文件 (.FIL) 被保存到包含 Analytics 项目的文件夹。

    请使用绝对或相对文件路径将该数据文件保存到另外的现有文件夹:

    • TO "C:\Output.FIL"
    • TO "Results\Output.FIL"

    说明

    表名称被限制为不超过 64 个字母数字字符(不包括 .FIL 扩展名)。该名称可以包括下划线字符 ( _ ),但不能包括其他特殊字符或任何空格。该名称不能以数字开头。

FIRSTMATCH

可选

请指定每个主键值仅被联接到任何辅助键匹配的第一个实例。

如果第一个实例恰好是精确匹配,则主键值的任何后续模糊匹配都不会被包括在联接输出表中。

如果您省略 FIRSTMATCH,则 FUZZYJOIN 的默认行为是将每个主键值联接到任何辅助键匹配的所有实例。

如果您只想知道两个表之间是否存在匹配(精确或模糊),并且您想要避免识别所有匹配所需的处理时间,则 FIRSTMATCH 是有用的。

如果您确信对于每个主键值,在辅助表中最多只存在一个匹配,您还可以使用 FIRSTMATCH。

WHILE 测试

可选

一个条件表达式,它必须为真以便处理每个记录。该命令被一直执行到条件的计算结果为假或者到达表的末尾为止。

说明

如果您将 WHILE 与 FIRST 或 NEXT 结合使用,请在达到一个限制时立即记下处理步骤。

FIRST 范围 | NEXT 范围

可选

要处理的记录数:

  • FIRST 从第一个记录开始处理,直到达到指定的记录数为止
  • NEXT 从当前选定的记录开始处理,直到达到指定的记录数为止

请使用范围指定要处理的记录数。

如果您省略 FIRST 和 NEXT,则会默认处理所有记录。

APPEND

可选

将命令输出附加到现有文件的末尾,而不是覆盖现有文件。

说明

您必须确保命令输出的结构和现有文件完全相同:

  • 相同的域
  • 相同的域顺序
  • 匹配的域具有相同的长度
  • 匹配的域具有相同的数据类型

Analytics 将输出附加到现有文件,而无论其结构如何。如果输出的结构和现有文件不匹配,则可能生成混乱的、不完整的或不准确的数据。

ISOLOCALE 区域设置代码

可选

说明

仅在 Unicode 版 Analytics 中可用。

采用语言_国家/地区格式的系统区域设置。例如,要使用加拿大法语,请输入 fr-ca

使用以下代码:

  • 语言 ISO 639 标准语言代码
  • 国家/地区 ISO 3166 标准国家/地区代码

    如果您未指定国家/地区代码,则使用该语言的默认国家/地区。

如果您不使用 ISOLOCALE,则会使用默认系统区域设置。

示例

使用模糊匹配联接两个表,以便发现可能还是供应商的员工

下面的示例使用地址作为公共键域(Address 域和 Vendor_Street 域)联接 Empmast 表和 Vendor 表。

FUZZYJOIN 命令创建一个包含精确匹配或者模糊匹配主记录和辅助记录的新表。结果是任何具有相同地址或者类似地址的员工和供应商的列表。

使用 Dice 系数算法执行 FUZZYJOIN

OPEN Empmast PRIMARY
OPEN Vendor SECONDARY
FUZZYJOIN DICE PERCENT 0.8000 NGRAM 2 PKEY Address SKEY Vendor_Street FIELDS Employee_Number First_Name Last_Name Address WITH Vendor_Number Vendor_Name Vendor_Street OPEN TO "Employee_Vendor_Match"

使用编辑距离算法执行 FUZZYJOIN

OPEN Empmast PRIMARY
OPEN Vendor SECONDARY
FUZZYJOIN LEVDISTANCE DISTANCE 5 PKEY Address SKEY Vendor_Street FIELDS Employee_Number First_Name Last_Name Address WITH Vendor_Number Vendor_Name Vendor_Street OPEN TO "Employee_Vendor_Match"

包括所有域

此版本的 FUZZYJOIN 命令在联接输出表中包括主表和辅助表中的所有域。

OPEN Empmast PRIMARY
OPEN Vendor SECONDARY
FUZZYJOIN LEVDISTANCE DISTANCE 5 PKEY Address SKEY Vendor_Street FIELDS ALL WITH ALL OPEN TO "Employee_Vendor_Match"

改进模糊匹配的有效性

下面的示例使用 SORTWORDS( ) 函数改进 Address 域和 Vendor_Street 域之间的模糊匹配的有效性。使用 UPPER( ) 函数可确保大小写不会影响键域值中元素的排序。

OPEN Empmast PRIMARY
OPEN Vendor SECONDARY
FUZZYJOIN LEVDISTANCE DISTANCE 5 PKEY SORTWORDS(UPPER(Address)) SKEY SORTWORDS(UPPER(Vendor_Street)) FIELDS Employee_Number First_Name Last_Name Address WITH Vendor_Number Vendor_Name Vendor_Street OPEN TO "Employee_Vendor_Match"

备注

有关此命令工作方式的详细信息,请参见模糊联接

区分大小写

FUZZYJOIN 命令不区分大小写,而无论您使用哪种模糊匹配算法。因此,"SMITH" 等效于 "smith".

前导和后继空白

FUZZYJOIN 命令自动除去域中的前导和后继空白,而无论您使用哪种模糊匹配算法。指定主键域和辅助键域后,无须使用 TRIM( ) 或 ALLTRIM( ) 函数。

改进 FUZZYJOIN 的有效性

有三个技巧可以显著提高 FUZZYJOIN 命令的有效性:

  • 对主键和辅助键域值中的各个元素进行排序
  • 从主键和辅助键域值中移除通用元素
  • 协调主键和辅助键域值

这些技巧使您可以使用更严格的模糊设置并仍然可以获得相同的模糊匹配,同时减少误报匹配的数量。您可以单独或者结合使用这些技巧。

对键域值中的各个元素进行排序

SORTWORDS( ) 函数可通过按顺序对主键和辅助键域值中的各个元素进行排序,提高 FUZZYJOIN 命令的有效性。

对元素(如地址的组成部分)进行排序,可使具有相同信息和不同格式的键域值彼此更加相似。更大的相似度可以提高键域值被选择为彼此模糊匹配的可能性。

有关详细信息,请参见SORTWORDS( ) 函数

要观看提供 SORTWORDS( ) 概览的视频,请参见使用 SORTWORDS( ) 进行模糊匹配(仅限英语)。

说明

对键域值中的元素进行排序最适合于使用编辑距离算法进行模糊联接。

在使用 Dice 系数算法执行模糊联接时对元素进行排序未必有好处。在决定是否要在生产环境中将 SORTWORDS( ) 与 Dice 系数算法结合使用之前测试一组样本数据。

注意

如果您将 SORTWORDS( ) 与 FUZZYJOIN 命令结合使用,则必须将 SORTWORDS( ) 同时应用于要比较的两个字符串或两个域。

从键域值中移除通用元素

OMIT( ) 函数可以通过从主键和辅助键域值中移除 "Corporation" 或 "Inc." 等通用元素或者逗号、句号和 & 符等字符,提高 FUZZYJOIN 命令的有效性。

移除通用元素和标点符号可使模糊匹配仅专注于可能发生有意义差异的键域值部分。

有关详细信息,请参见OMIT( ) 函数

协调键域值

REPLACE( ) 或 REGEXREPLACE( ) 函数可以通过协调主键和辅助键域值中的相同元素的变体,提高 FUZZYJOIN 命令的有效性。例如,您可以协调 "Street"、"St." 和 "St" 以使用单个值 "St"。

协调元素可使具有相同信息和不同格式的键域值彼此更加相似。更大的相似度可以提高键域值被选择为彼此模糊匹配的可能性。

有关详细信息,请参见REPLACE( ) 函数以了解简单直接的替换,参见REGEXREPLACE( ) 函数以了解更复杂的替换。