PowerShell中的模糊字符串匹配

PowerShell中的模糊字符串匹配,powershell,fuzzy-search,Powershell,Fuzzy Search,如何在PowerShell脚本中进行模糊字符串匹配 我从不同的来源收集了不同的人名集,并将它们存储在一个数组中。当我添加一个新的名字时,我喜欢把名字和现有的名字进行比较,如果它们模糊地匹配,我会认为它们是相同的。例如,数据集为: @("George Herbert Walker Bush", "Barbara Pierce Bush", "George Walker Bush", "John Ellis (Jeb) Bush" ) 我希望看到给定输入的以下输出: "Barbara

如何在PowerShell脚本中进行模糊字符串匹配

我从不同的来源收集了不同的人名集,并将它们存储在一个数组中。当我添加一个新的名字时,我喜欢把名字和现有的名字进行比较,如果它们模糊地匹配,我会认为它们是相同的。例如,数据集为:

@("George Herbert Walker Bush",
  "Barbara Pierce Bush",
  "George Walker Bush",
  "John Ellis (Jeb) Bush"  )
我希望看到给定输入的以下输出:

"Barbara Bush" -> @("Barbara Pierce Bush")
"George Takei" -> @("")
"George Bush"  -> @("George Herbert Walker Bush","George Walker Bush")
至少,我希望看到匹配是不区分大小写的,如果可能的话,还可以灵活地处理一定程度的拼写错误

据我所知,标准库不提供此类功能。是否有一个易于安装的模块可以实现这一点?

使用术语“fuzzy”搜索,我发现这个包:

它可以简单地安装在以下位置:

PS> Install-Package Communary.PASM                                                                                                     
该项目位于GitHub中。我只是参考一下

以下是我的例子:

$colors = @("Red", "Orange", "Yellow", "Green", "Blue", "Violet", "Sky Blue" )

PS> $colors | Select-FuzzyString Red

Score Result
----- ------   
  300 Red
这是一个完美的匹配,每个角色最多100分

PS> $colors | Select-FuzzyString gren

Score Result
----- ------
  295 Green 
它可以容忍一些缺少的字符

PS> $colors | Select-FuzzyString blue

Score Result  
----- ------     
  400 Blue       
  376 Sky Blue
可以返回具有不同分数的多个值

PS> $colors | Select-FuzzyString vioret

# No output
但它不能容忍一点点拼写错误。然后我还尝试了
Select approximatesetring

PS> $colors | Select-ApproximateString vioret
Violet
它有不同的API,只返回一个匹配项或不返回任何内容。当
选择FuzzyString
时,它也可能不会返回任何内容

这是在MacOS和Communiary.PASM 1.0.43上使用PowerShell Core v6.0.0-beta.9进行测试的。

使用术语“fuzzy”搜索时,我发现此软件包:

它可以简单地安装在以下位置:

PS> Install-Package Communary.PASM                                                                                                     
该项目位于GitHub中。我只是参考一下

以下是我的例子:

$colors = @("Red", "Orange", "Yellow", "Green", "Blue", "Violet", "Sky Blue" )

PS> $colors | Select-FuzzyString Red

Score Result
----- ------   
  300 Red
这是一个完美的匹配,每个角色最多100分

PS> $colors | Select-FuzzyString gren

Score Result
----- ------
  295 Green 
它可以容忍一些缺少的字符

PS> $colors | Select-FuzzyString blue

Score Result  
----- ------     
  400 Blue       
  376 Sky Blue
可以返回具有不同分数的多个值

PS> $colors | Select-FuzzyString vioret

# No output
但它不能容忍一点点拼写错误。然后我还尝试了
Select approximatesetring

PS> $colors | Select-ApproximateString vioret
Violet
它有不同的API,只返回一个匹配项或不返回任何内容。当
选择FuzzyString
时,它也可能不会返回任何内容


这是在MacOS和Communiary.PASM 1.0.43上使用PowerShell Core v6.0.0-beta.9进行测试的。

如果它只是在其他字符串中匹配字符串,。或者。如果它只是在其他字符串中匹配字符串,。或者。