0
GitHub NLPで利用可能な次のNLPの宝石を探しましたが、適切な解決策を見つけることができませんでした。指定された類似度に基づいて一括テキストをグループにグループ化する
類似のパーセンテージに基づいてテキストをグループ化するための宝石またはライブラリがありますか?上記のすべての宝石は、2つの文字列の間の類似性を見つけるのに役立ちますが、データの大量の配列をグループ化するのに多くの時間を要します。
GitHub NLPで利用可能な次のNLPの宝石を探しましたが、適切な解決策を見つけることができませんでした。指定された類似度に基づいて一括テキストをグループにグループ化する
類似のパーセンテージに基づいてテキストをグループ化するための宝石またはライブラリがありますか?上記のすべての宝石は、2つの文字列の間の類似性を見つけるのに役立ちますが、データの大量の配列をグループ化するのに多くの時間を要します。
Rubyに加えて、リストされた宝石の1つだけを使用して行うことができます。
私はここで
はあなたが宝石を使用する方法の名前を言っていたので、私はを選んだ:
require 'fuzzystringmatch'
# Create the matcher
jarow = FuzzyStringMatch::JaroWinkler.create(:native)
# Get the distance
jarow.getDistance( "jones", "johnson")
# => 0.8323809523809523
# Round it
jarow.getDistance( "jones", "johnson").round(2)
# => 0.83
あなたはフロートを取得しているので、あなたが使用して探しているの精度を定義することができますround
メソッド。
同様の結果をグループ化するには、モジュールにあるgroup_by
のメトを使用できます。
ブロックに渡し、group_by
はコレクションを反復処理します。反復ごとに、グループ化しようとしている値(この場合は距離)を返します。距離とキーとしてのハッシュと、値に一致する文字列の配列を返します。
require 'fuzzystringmatch'
jarow = FuzzyStringMatch::JaroWinkler.create(:native)
target = "jones"
precision = 2
candidates = [ "Jessica Jones", "Jones", "Johnson", "thompson", "john", "thompsen" ]
distances = candidates.group_by { |candidate|
jarow.getDistance(target, candidate).round(precision)
}
distances
# => {0.52=>["Jessica Jones"],
# 0.87=>["Jones"],
# 0.68=>["Johnson"],
# 0.55=>["thompson", "thompsen"],
# 0.83=>["john"]}
私は、これは
を役に立てば幸い