powershell - PowerShell 中的模糊字符串匹配

标签 powershell fuzzy-search

如何在 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")

至少,我希望看到匹配不区分大小写,并且尽可能灵活地处理一定程度的拼写错误。

据我所知,标准库不提供此类功能。是否有易于安装的模块可以完成此任务?

最佳答案

搜索 PowerShell Gallery使用术语“模糊”,我找到了这个包:Communary.PASM .

它可以简单地安装:

PS> Install-Package Communary.PASM                                                                                                     

找到项目here在 GitHub 中。我只是看了看this examples file供引用。

这是我的例子:

$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-ApproximateString:

PS> $colors | Select-ApproximateString vioret
Violet

它有不同的 API,它只返回一个匹配项或什么都不返回。此外,当 Select-FuzzyString 返回时,它可能不会返回任何内容。

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

关于powershell - PowerShell 中的模糊字符串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47256003/

相关文章:

ruby - 如何在 Ruby 中进行模糊子串匹配?

spring-boot - 当SpringBoot应用程序请求ElasticSearch时,是否可以将所有索引数据搜索上的Fuzzy参数设置为应用程序参数?

windows - Powershell 警告和错误处理

powershell - 将变量传递给函数会创建一个数组

iis - Powershell - 在 Windows 更新后创建 ServerManager 对象时出错

sql-server - SQL模糊匹配

在模糊@username 上查找用户匹配的算法

Solr 模糊搜索相似词

powershell - Cryptolocker 蜜 jar FileSystemWatcher

entity-framework - 从云服务项目的 powershell 运行 migrate.exe?