vladan-me/fingerprint

提供PHP中指纹和ngram算法的定制实现

1.2.2 2017-11-27 14:50 UTC

This package is auto-updated.

Last update: 2024-09-23 23:45:09 UTC


README

指纹 是由 Google Refine(后来是 OpenRefine)开发的一种算法。相对于原始算法的(可选)改进被加粗显示。

  • 删除前导和尾随空格
  • 将所有字符转换为小写表示
  • 删除所有标点符号和控制字符
  • 将扩展的西文字符规范化为它们的ASCII表示(例如 "gödel" → "godel")
  • 应用同义词
  • 应用删除操作
  • 将字符串分割成由空格分隔的标记
  • 对标记进行排序并删除重复项
  • 将标记重新组合在一起

转写是原始算法中最慢的部分,如果您主要处理英语,那么这是浪费时间。原始算法有限制,因为它忽略了所有同义词和删除操作。同义词和删除操作基于英语,因此在英语以外的语言中的应用有限。考虑以下标题

  • VP Sales and Marketing
  • Vice President Marketing & Sales
  • Vice President of Sales and Marketing
  • Vice President - Sales and Marketing ...(实际上有100多种写法)

用例

  • 简单快速的数据聚类。
  • 在数据库中标准化和分组相似值。
  • 当用户以多种方式输入城市/公司/街道/标题时,您有无数种组合...

文档

初始化 Fingerprint 类型,并将其作为参数传递给 Fingerprint。

    $type = new FingerprintType();
    $string1 = 'Quick brown fox jumps over lazy dog';    
    $fp = new Fingerprint($string1, $type);
    $fingerprintResult1 = $fp->fingerprint();
    // Outputs 'brown dog fox jumps lazy over quick'.
    
    $string2 = 'qUick Brown FOX jumps over lazy dog.';
    $fp = new Fingerprint($string2, $type);
    $fingerprintResult2 = $fp->fingerprint();
    // Outputs 'brown dog fox jumps lazy over quick'.
    // Also $fingerpintResult1 == $fingerprintResult2

更高级的使用是针对特定类型,例如

    $type = new City();
    $string1 = 'Elk Grove Vlg';    
    $fp = new Fingerprint($string1, $type);
    // Include all available synonyms for city type.
    $fp->includeAllSyn();
    $fingerprintResult1 = $fp->fingerprint();
    // Outputs 'elk grove village'.
    
    $string2 = '/Elk Grove Village';
    $fp = new Fingerprint($string2, $type);
    // Include all available synonyms for city type.
    $fp->includeAllSyn();
    $fingerprintResult2 = $fp->fingerprint();
    // Outputs 'elk grove village'.
    // Also $fingerpintResult1 == $fingerprintResult2

请查看测试的常见用法。

同义词和删除操作

它们分为两类,最常见的基本同义词/删除操作和所有其他可能的组合,这可能会对计算更加沉重。对于最快的用法,您不需要所有的同义词/删除操作。它们都是根据大型数据集的聚类手动挑选的。当然,还有很多其他同义词/删除操作,但只有有意义的才被列出。在某些情况下,同义词和删除操作同时存在,例如,对于公司类型

'corp' 首先变为 'corporation',然后被完全删除。

系统需求

需要 PHP >= 5.4.0

安装

使用 Composer 安装 fingerprint

$ composer require vladan-me/fingerprint

附加说明

还有一个名为 fingerprint-elasticsearch 的包,该包完全准备 Elasticsearch 分析器和过滤器以使用此版本的指纹算法。此项目目前也实现了 ngram 实现,将来可能需要将其分离。

贡献

欢迎贡献,并将得到充分认可。请参阅 CONTRIBUTINGCONDUCT 以获取详细信息。

许可

MIT 许可证(MIT)。有关更多信息,请参阅 LICENSE