vladan-me / fingerprint
提供PHP中指纹和ngram算法的定制实现
1.2.2
2017-11-27 14:50 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 实现,将来可能需要将其分离。
贡献
欢迎贡献,并将得到充分认可。请参阅 CONTRIBUTING 和 CONDUCT 以获取详细信息。
许可
MIT 许可证(MIT)。有关更多信息,请参阅 LICENSE。