問題タブ [string-metric]

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 投票する
8 に答える
1424 参照

algorithm - 「絶対」文字列メトリック

自然言語文字列の膨大な (ただし有限の) セットがあります。

各文字列を数値に変換する方法が必要です。どの文字列でも、値は毎回同じでなければなりません。

指定された 2 つの文字列が「異なる」ほど、対応する 2 つの値も異なるはずです。それらが「似ている」ほど、値の違いは少なくなります。

必要な文字列間の違いの正確な定義はまだわかりません。とにかく自然言語の解析はありません。おそらく、Levenstein のようなものである必要があります (ただし、Levenstein は相対的であり、絶対メトリックが必要です)。簡単なことから始めましょう。

寸法の更新

単一の数値ではなく、多次元 (3 次元が最適) のベクトルで解決できれば幸いです。

期待される結果の正確さに関する更新

ここここで正しく指摘されているように、ある文字列から別の文字列までの距離はMAX(firstStringLength, secondStringLength)次元を持つベクトルです。一般に、情報の損失なしに次元数を減らすことはできません。

ただし、絶対的な解決策は必要ありません。N 次元の文字列空間から 3D 空間への「十分な」変換で解決します。

また、有限の長さの有限数の文字列があることにも注意してください。(ただし、文字列の数はかなり多く、約 8000 万 (10 GB) であるため、シングルパスのステートレス アルゴリズムを選択することをお勧めします。)

参考文献をスキャンしたところ、ヒルベルトの空間充填曲線がここで役立つ可能性があるという印象を受けました。Hilbert Space-Filling Curve 記事のクラスタリング プロパティの分析のように見えますが、私の問題に近いものについて説明しています...

ヒルベルト曲線アプローチの更新

  1. 各文字列を N 次元空間のポイントにマップします。ここで、N はセット内の文字列の最大長です。ところで、文字列の i 番目の文字コードを i 番目の座標値として使用できますか?
  2. その N 次元空間を通るヒルベルト曲線をプロットします。
  3. 文字列ごとに、文字列の座標に最も近い曲線上のポイントを取得します。その点のヒルベルト値 (曲線の始点からの長さ) が、私が求める 1 次元の値です。
  4. 3D 値が必要な場合は、ヒルベルト曲線を 3D でプロットし、上で計算したヒルベルト値に一致する点を選択します。

これは正しく見えますか?ここでの計算費用はいくらになるでしょうか。

0 投票する
5 に答える
41067 参照

java - Javaでほぼ同様の文字列を比較するには? (ストリング距離測定)

2 つの文字列を比較して、どれだけ似ているかスコアを取得したいと考えています。例えば「文章がほぼ似ている」文章が似ている」など。

Java の既存のメソッドには詳しくありませんが、PHP の場合はレーベンシュタイン関数を知っています。

Javaにはより良い方法がありますか?

0 投票する
0 に答える
23 参照

string - 余分な文字の重みが低い文字列メトリック

リスト内の任意の入力に最も類似したエントリを見つけるために、文字列メトリックを見つけようとしています。部分文字列が完全に一致していても、ほとんどの一般的な文字列メトリックは無関係な文字に重きを置いているようです。たとえば、'Corvette, red 2013' と 'corvette' の一致ストアは difflib.get_close_matches() を使用して 0.11 ですが、'octet rev' と 'corvette' の一致スコアは 0.23 です。

私のリストには無関係な情報 (「red 2013」など) が含まれている可能性が高いことはわかっていますが、その無関係な情報を無視して「コルベット」が完全に一致することを知りたいと思っています。私の目的では、「Octet rev」は誤った一致としてカウントされます。

必要な方法で一致を評価する文字列一致メトリックはありますか? さらに良いことに、Python パッケージに既に実装されているものはありますか?