lion1102/fuzzy

此软件包最新版本(v0.1)没有可用的许可证信息。

v0.1 2017-09-28 11:11 UTC

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时,搜索算法将搜索单个单词 完整字符串,将最终得分作为两者的函数。请注意,当 tokenizetrue 时,对于单个标记,thresholddistancelocation 都是不相关的。

tokenSeparator (类型: string,默认值: / +/g

用于在搜索时分离搜索模式中单词的正则表达式字符串。仅当 tokenizetrue 时适用。

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
    ]
  ]
]);