問題タブ [stringdist]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
869 参照

r - R - 重み付けされた単語による文字列距離

stringdistパッケージまたは別の文字列距離パッケージを使用して特定の単語に重みを付ける方法はありますか?

多くの場合、"city" や "university" などの一般的な単語を共有する文字列があり、結果として比較的近い文字列距離の一致が得られますが、非常に異なります (例: "University of Utah" と "University of Ohio"、または " XYZ市」および「ABC市」)。

アルゴリズムによって操作 (削除、挿入、置換) の重み付けが異なることは知っていますが、重み付けされた単語のリストを含める方法は見たことがありません。何かご意見は?

確かstr_removeに、一致する前にこれらの一般的な単語に対する 1 つのオプションがありますが、これには「XYZ 郡」と「XYZ 市」が同一に見えるという問題があります。

例:

「ユタ大学」と「オハイオ大学」

正規化されたストリング距離は 0.22222 です。これは比較的低いです。しかし実際には、「ユタ」と「オハイオ」の間の正規化された OSA 文字列距離は 1 です。

4 / 18 = 0.222222

ただし、「University of」や「State」などの一般的な文字列を事前に削除すると、「University of Ohio」と「Ohio State」が一致することになります。

"University of" のような文字列を重み付けして、たとえば、正規化分母で使用される実際の文字数の 0.25 をカウントすると、これらの共通部分文字列の影響が軽減されます。つまり、次のようになります。

4 / (18 * 0.25) = 0.888888。

State vs University の例で同じことを考えると、ここではあいまいになります。

16 が得られます。ただし、分母の .25 を使用すると、次のようになります。

16 / (18 * .25) = 3.55555。

おそらくより良いオプションは、LCS を使用することですが、一般的な文字列のリストに一致する部分文字列を軽量化することです。したがって、「University of Utah」と「University of Ohio」には 14 文字の共通部分文字列がありますが、「University of」がこのリストに表示された場合、その LCS 値は減少します。

編集:別の考え

tidytextpackage とを使用するとunnest_tokens、一致するすべての文字列で最も一般的な単語のリストを生成できます。データセット内の共通性に関連してこれらの単語の重みを下げることを検討することは興味深いかもしれません。それらがより一般的であるほど、それらの差別化力が少なくなるためです...

0 投票する
1 に答える
114 参照

r - R - レーベンシュタイン距離を介して n 個の一致を返す

レーベンシュタイン距離を介して、特定の文字列に最適な n 個を見つけたいと思います。Rの関数が最小距離を与えることはわかっていadistますが、結果の数をたとえば 10 にスケーリングしようとしています。以下にいくつかのコードがあります。

目的の結果は、を含むデータ フレームsource1$nameです。おそらくfromを使った何か?不明な点があればお知らせください。どんな助けでも大歓迎です。ありがとう。adistsource1$addresstop_ndplyr

0 投票する
1 に答える
323 参照

r - rでstringdistを使用した文字列マッチング?

一致させてから、後で文字列を最も近い一致に置き換えたいです。stringdist ライブラリを使用しています。以下は私のコードです

次のような出力が得られます。

「ソーラータイム30g」の方が「2リットルサムズアップ」に近いということですが、実際は「サムズアップ2L」の方が近いはずです。レーベンシュタイン法を別のものに変えましょうか?