優れたパッケージ「stringdist」を発見し、それを使用して文字列の距離を計算したいと考えています。特に、一連の単語があり、「ほぼ一致」がレーベンシュタイン距離のようなアルゴリズムを介して行われるほぼ一致を出力したいと考えています。
シェル スクリプトのコードが非常に遅く、stringdist を読み込んでメトリックを含むマトリックスを生成することができました。ここで、そのマトリックスを、ほぼ一致するもののみを持つ小さなマトリックスに煮詰めたいと思います。たとえば、メトリックがゼロではなく、しきい値よりも小さい場合です。
kp <- c('leaflet','leafletr','lego','levenshtein-distance','logo')
kpm <- stringdistmatrix(kp,useNames="strings",method="lv")
> kpm
leaflet leafletr lego levenshtein-distance
leafletr 1
lego 5 6
levenshtein-distance 16 16 18
logo 6 7 1 19
m = as.matrix(kpm)
close = apply(m, 1, function(x) x>0 & x<5)
> close
leaflet leafletr lego levenshtein-distance logo
leaflet FALSE TRUE FALSE FALSE FALSE
leafletr TRUE FALSE FALSE FALSE FALSE
lego FALSE FALSE FALSE FALSE TRUE
levenshtein-distance FALSE FALSE FALSE FALSE FALSE
logo FALSE FALSE TRUE FALSE FALSE
OK、これで (大きな) dist ができました。出力が次のようになるリストに戻すにはどうすればよいですか?
leafletr,leaflet,1
logo,lego,1
メトリックが非ゼロで n=5 未満の場合のみ? テストを実行できる「apply()」を見つけたので、その使用方法を整理する必要があります。
問題は stringdist と stringdistmatrix に固有のものではなく、非常に初歩的な R ですが、それでも行き詰まっています。答えにはsubset()が含まれていると思いますが、「dist」を別のものに変換する方法がわかりません。