lion1102 / fuzzy
Requires
- php: >=7.0
- loilo/fuse: ^3.1
This package is not auto-updated.
Last update: 2024-09-29 04:26:00 UTC
README
此库需要 Fuse。
安装
composer require lion1102/fuzzy
用法
<?php require_once __DIR__ . '/vendor/autoload.php'; use Fuzzy\Fuzzy; $arrValidateData = [ [ 'id' => 'A1', 'name' => 'Nguyen Van Truong', ], [ 'id' => 'A2', 'name' => 'Mr. Nguyen Van Truong', ], [ 'id' => 'A3', 'name' => 'Nguyen Van Truong 様', ], [ 'id' => 'A4', 'name' => 'Nguy Van Trung 様', ], [ 'id' => 'A5', 'name' => '接待費 (Mr. Nguy Van Trung)', ], [ 'id' => 'A6', 'name' => 'PROTO Solutionラボサポート (8月分, Mr. Nguyen Van Truong)', ], ]; $arrSearchData = [ [ 'id' => 'B1', 'name' => 'Nguyen Van Truong' ], [ 'id' => 'B2', 'name' => 'Nguyen Van Trung' ], [ 'id' => 'B3', 'name' => 'Nguyen Van Trong' ], [ 'id' => 'B4', 'name' => 'Nguy Van Trung' ], ]; $arrOptions = ['keys' => ['name'], 'caseSensitive' => 'false', 'includeScore' => 'true',]; getCompareString( $arrValidateData, $arrSearchData, $arrOptions, 'id', 'name' ); /* Array ( [0] => Array ( [A1] => Array ( [Nguyen Van Truong] => Array ( [0] => Array ( [item] => Array ( [id] => B1 [name] => Nguyen Van Truong ) [score] => 0 ) [1] => Array ( [item] => Array ( [id] => B2 [name] => Nguyen Van Trung ) [score] => 0.058823529411765 ) [2] => Array ( [item] => Array ( [id] => B3 [name] => Nguyen Van Trong ) [score] => 0.058823529411765 ) [3] => Array ( [item] => Array ( [id] => B4 [name] => Nguy Van Trung ) [score] => 0.17647058823529 ) ) ) ) [1] => Array ( [A2] => Array ( [Mr. Nguyen Van Truong] => Array ( [0] => Array ( [item] => Array ( [id] => B1 [name] => Nguyen Van Truong ) [score] => 0.19047619047619 ) [1] => Array ( [item] => Array ( [id] => B2 [name] => Nguyen Van Trung ) [score] => 0.23809523809524 ) [2] => Array ( [item] => Array ( [id] => B3 [name] => Nguyen Van Trong ) [score] => 0.23809523809524 ) [3] => Array ( [item] => Array ( [id] => B4 [name] => Nguy Van Trung ) [score] => 0.33333333333333 ) ) ) ) [2] => Array ( [A3] => Array ( [Nguyen Van Truong 様] => Array ( [0] => Array ( [item] => Array ( [id] => B1 [name] => Nguyen Van Truong ) [score] => 0.10526315789474 ) [1] => Array ( [item] => Array ( [id] => B2 [name] => Nguyen Van Trung ) [score] => 0.15789473684211 ) [2] => Array ( [item] => Array ( [id] => B3 [name] => Nguyen Van Trong ) [score] => 0.15789473684211 ) [3] => Array ( [item] => Array ( [id] => B4 [name] => Nguy Van Trung ) [score] => 0.26315789473684 ) ) ) ) [3] => Array ( [A4] => Array ( [Nguy Van Trung 様] => Array ( [0] => Array ( [item] => Array ( [id] => B4 [name] => Nguy Van Trung ) [score] => 0.125 ) [1] => Array ( [item] => Array ( [id] => B2 [name] => Nguyen Van Trung ) [score] => 0.25 ) [2] => Array ( [item] => Array ( [id] => B1 [name] => Nguyen Van Truong ) [score] => 0.3125 ) [3] => Array ( [item] => Array ( [id] => B3 [name] => Nguyen Van Trong ) [score] => 0.3125 ) ) ) ) [4] => Array ( [A5] => Array ( [接待費 (Mr. Nguy Van Trung)] => Array ( [0] => Array ( [item] => Array ( [id] => B4 [name] => Nguy Van Trung ) [score] => 0.41666666666667 ) [1] => Array ( [item] => Array ( [id] => B2 [name] => Nguyen Van Trung ) [score] => 0.5 ) [2] => Array ( [item] => Array ( [id] => B1 [name] => Nguyen Van Truong ) [score] => 0.54166666666667 ) [3] => Array ( [item] => Array ( [id] => B3 [name] => Nguyen Van Trong ) [score] => 0.54166666666667 ) ) ) ) [5] => Array ( [A6] => Array ( [PROTO Solutionラボサポート (8月分, Mr. Nguyen Van Truong)] => Array ( [0] => Array ( [item] => Array ( [id] => B1 [name] => Nguyen Van Truong ) [score] => 0.5 ) [1] => Array ( [item] => Array ( [id] => B2 [name] => Nguyen Van Trung ) [score] => 0.5 ) [2] => Array ( [item] => Array ( [id] => B3 [name] => Nguyen Van Trong ) [score] => 0.5 ) [3] => Array ( [item] => Array ( [id] => B4 [name] => Nguy Van Trung ) [score] => 0.5 ) ) ) ) )*/
方法
以下方法在 Fuzzy\Fuzzy 实例上可用
getCompareString( $arrValidateData, $arrSearchData, arrOptions, $key1, $key2 );
/* @param {array} $arrValidateData The validation associative array to fuzzy search on. @param {array} $arrSearchData The pattern associative string to fuzzy search on. @param {array} arrOptions The search conditions array. @param {string} $key1, $key2 The specificed key in validation array @return {array} A list of all search matches. */
列出数组之间所有项的匹配模式和范围。
选项
keys (类型: 数组)
要搜索的属性列表。此列表支持嵌套属性、加权搜索、在字符串数组中搜索以及在关联数组中等。
$books = [ [ "title" => "Old Man's War", "author" => [ "firstName" => "John", "lastName" => "Scalzi" ] ] ]; $fuse = new \Fuse\Fuse($books, [ "keys" => [ "title", "author.firstName" ] ]);
id (类型: 字符串)
标识符属性的名称。如果指定,则返回的结果将是项标识符的列表;否则,它将是项的列表。
caseSensitive (类型: 布尔值, 默认值: false)
指示比较是否应区分大小写。
includeScore (类型: 布尔值, 默认值: false)
是否应在结果集中包含得分。得分为 0 表示完美匹配,而得分为 1 表示完全不匹配。
includeMatches (类型: 布尔值, 默认值: false)
是否应在结果集中包含匹配项。当为真时,结果集中的每条记录将包括匹配字符的索引:"indices" => [ $start, $end ]。这些可以用作突出显示目的。
shouldSort (类型: 布尔值, 默认值: true)
是否按得分对结果列表进行排序。
getFn (类型: 函数, 默认值: \Fuse\Helpers\deep_value)
当获取关联数组的属性时使用的获取函数。默认将搜索嵌套路径,如 foo.bar.baz。
/* * @param {array|object} $data The object or associative array being searched * @param {string} $path The path to the target property */ 'getFn' => function ($data, $path) { // Example using a ->get() method on objects and simple index access on arrays return is_object($data) ? $data->get($path) : $data[$path]; }
sortFn (类型: 函数, 默认值: 按得分排序)
用于排序结果列表的函数。
location (类型: 整数, 默认值: 0)
确定模式预期在文本中找到的大致位置。
threshold (类型: 浮点数, 默认值: 0.6)
在什么点匹配算法放弃。阈值为 0.0 要求完美匹配(字母和位置),阈值为 1.0 将匹配任何内容。
distance (类型: 整数, 默认值: 100)
确定匹配必须与模糊位置(由 location 指定)多近。一个精确的字母匹配,如果距离模糊位置 distance 个字符,则得分为完全不匹配。距离为 0 要求匹配在指定的精确 location 上,距离为 1000 则要求完美匹配在 location 上找到 800 个字符内,使用阈值为 0.8。
maxPatternLength (类型: 整数, 默认值: 32)
搜索模式的最大长度。模式越长,搜索操作就越密集。当模式超过 maxPatternLength 时,将引发错误。为什么这很重要?请参阅 此。
详细描述 (类型: bool,默认值: false)
将打印出步骤。对于调试很有用。
分词 (类型: bool,默认值: false)
当为true时,搜索算法将搜索单个单词 和 完整字符串,将最终得分作为两者的函数。请注意,当 tokenize 为 true 时,对于单个标记,threshold、distance 和 location 都是不相关的。
tokenSeparator (类型: string,默认值: / +/g)
用于在搜索时分离搜索模式中单词的正则表达式字符串。仅当 tokenize 为 true 时适用。
matchAllTokens (类型: bool,默认值: false)
当为 true 时,结果集将仅包括匹配所有标记的记录。仅在 tokenize 也为 true 时才有效。
findAllMatches (类型: bool,默认值: false)
当为 true 时,即使已经在字符串中找到了完美匹配,匹配函数也会继续到搜索模式的末尾。
minMatchCharLength (类型: int,默认值: 1)
当设置为包含匹配时,只有那些长度超过此值的匹配才会被返回。(例如,如果您想忽略单个字符索引返回,则设置为 2)
加权搜索
在某些情况下,您可能希望某些键具有不同的权重以获得更准确的结果。您可以给每个键提供一个自定义的 weight(其中 0 < weight <= 1)。
$fuse = new \Fuse\Fuse($books, [ "keys" => [ [ "name" => "title", "weight" => 0.3 ], [ "name" => "author", "weight" => 0.7 ] ] ]);