これらのフレーズが単語のリストに保存されているとします。
** school education high support level --> support education high school level support
** school education high support level --> support education high school level level education
** school education high support level --> education high school level support education school
** school education high support level --> support education high school level support
リストのリストの要素を比較し、すべてのメンバーと最も類似しているパターンを選択する最も効率的な方法は何ですか?
[['support', 'education', 'high', 'school', 'level', 'support'],
['support', 'education', 'high', 'school', 'level', 'level', 'education'],
['education', 'high', 'school', 'level', 'support', 'education', 'school'],
['support', 'education', 'high', 'school', 'level', 'support']]
---利回り
[サポート、教育、高校、学校、レベル]
アップデート
コメントとフィードバックをお寄せいただきありがとうございます。私は漠然としていて、「本当の質問」ではないとして締めくくられましたが、完全に明確な質問ではなかったと言った方が正確だと思います.
(1)言葉の順序を確実に維持しようとする
(2) 基準は、存在するすべての要素のセットを単に保持するよりも少しトリッキーです (つまり、set(A) & set(B) は私が本当に望んでいるものではありません)
(3)「ほとんど存在するすべての要素のセット」に似たもので、ほとんどの場合、60%のケース、または70%で存在するなど、調整可能なパラメーターとして定義されている単語があります...
私は自分の関数を書くことができました (実際に書きました) が、遅くて面倒です。コレクション、itertools、または同様のモジュールから、このソリューションをより迅速に取得するためのトリックが必要であると想定しました。Collections.Counter() について学んだときのように、関数が切り替わり、はるかに高速になりました。「バッグ」または「マルチセット」オプションがあることは知っていますが、メンバーシップが物事の多くの例に存在する確率によって定義されるファジーセットのアイデアを扱うためにそれを使用していません。
だからこそ私は、これらの方針に沿った戦略についてのフィードバックと洞察を求めました。