2017-11-13 4 views
-2

PowerShellスクリプト内でファジーストリングマッチングを実行するにはどうすればよいですか?PowerShellのファジーストリング一致

私は、さまざまなソースからスクレイプされた人々の名前のセットが異なり、それらを配列に格納しています。私は新しい名前を追加するときに、名前を既存の名前と比較したいと思います。もしそれらがあいまいに一致するならば、私はそれらを同じものとみなしたいと思います。例えば、データセットで:

@("George Herbert Walker Bush", 
    "Barbara Pierce Bush", 
    "George Walker Bush",  
    "John Ellis (Jeb) Bush" ) 

Iは、与えられた入力から次の出力を参照したい:少なくとも

"Barbara Bush" -> @("Barbara Pierce Bush") 
"George Takei" -> @("") 
"George Bush" -> @("George Herbert Walker Bush","George Walker Bush") 

を、Iは大文字と小文字を区別しないことが一致し、また十分な柔軟性見たいです可能であれば、あるレベルのスペルミスを処理します。

私が知る限り、標準ライブラリはそのような機能を提供していません。これを実現するモジュールを簡単にインストールできますか?

答えて

3

PowerShell Galleryで「ファジー」と検索すると、このパッケージが見つかりました:Communary.PASM

単に一緒にインストールすることができます。

PS> Install-Package Communary.PASM                          

プロジェクトはGitHubの中here発見されました。私は参考として単にを見ました。

$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を試してみました:これは、単一の一致または何も返さ異なるAPIを持つ

PS> $colors | Select-ApproximateString vioret 
Violet 

Select-FuzzyStringの場合は、何も返されないことがあります。

これは、MacOSおよびCommunary.PASM 1.0.43のPowerShell Core v6.0.0-beta.9でテストされました。

関連する問題