ਸਟ੍ਰਿੰਗ ਸਮਾਨਤਾ ਲਈ ਪਾਈਥਨ ਦੀ ਸੰਭਾਵਨਾ ਨੂੰ ਜਾਰੀ ਕਰਨਾ
ਕਲਪਨਾ ਕਰੋ ਕਿ ਤੁਸੀਂ ਵਾਕਾਂਸ਼ਾਂ ਦੇ ਇੱਕ ਡੇਟਾਸੈਟ ਨਾਲ ਕੰਮ ਕਰ ਰਹੇ ਹੋ ਜੋ ਇੱਕੋ ਜਿਹੇ ਜਾਪਦੇ ਹਨ ਪਰ ਸ਼ਬਦ ਕ੍ਰਮ ਜਾਂ ਕੇਸਿੰਗ ਵਿੱਚ ਵੱਖਰੇ ਹਨ। "ਹੈਲੋ ਵਰਲਡ" ਅਤੇ "ਵਰਲਡ ਹੈਲੋ" ਵਰਗੀਆਂ ਸਤਰਾਂ ਦੀ ਤੁਲਨਾ ਕਰਨਾ ਚੁਣੌਤੀਪੂਰਨ ਹੋ ਜਾਂਦਾ ਹੈ ਜਦੋਂ ਰਵਾਇਤੀ ਢੰਗ ਉਹਨਾਂ ਨੂੰ ਇੱਕੋ ਜਿਹੇ ਵਜੋਂ ਪਛਾਣਨ ਵਿੱਚ ਅਸਫਲ ਰਹਿੰਦੇ ਹਨ। ਉਹ ਹੈ ਜਿੱਥੇ Levenshtein ਦੂਰੀ ਚਮਕ ਸਕਦੀ ਹੈ.
Levenshtein ਦੂਰੀ ਮਾਪਦੀ ਹੈ ਕਿ ਇੱਕ ਸਤਰ ਨੂੰ ਦੂਜੀ ਵਿੱਚ ਬਦਲਣ ਲਈ ਕਿੰਨੇ ਸੰਪਾਦਨਾਂ ਦੀ ਲੋੜ ਹੈ। ਪਰ ਕੀ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਸ਼ਬਦ ਕ੍ਰਮ ਅਤੇ ਕੇਸ ਅਪ੍ਰਸੰਗਿਕ ਹੋ ਜਾਂਦੇ ਹਨ? ਟੈਕਸਟ ਪ੍ਰੋਸੈਸਿੰਗ ਅਤੇ ਕੁਦਰਤੀ ਭਾਸ਼ਾ ਦੇ ਕੰਮਾਂ ਵਿੱਚ ਇਹ ਇੱਕ ਅਕਸਰ ਚੁਣੌਤੀ ਹੁੰਦੀ ਹੈ, ਖਾਸ ਕਰਕੇ ਜਦੋਂ ਤੁਸੀਂ ਸ਼ੁੱਧਤਾ ਲਈ ਟੀਚਾ ਰੱਖਦੇ ਹੋ। 📊
ਬਹੁਤ ਸਾਰੇ ਡਿਵੈਲਪਰ ਸਟਰਿੰਗ ਸਮਾਨਤਾ ਦੀ ਗਣਨਾ ਕਰਨ ਲਈ FuzzyWuzzy ਵਰਗੇ ਟੂਲਸ ਵੱਲ ਮੁੜਦੇ ਹਨ। ਹਾਲਾਂਕਿ ਇਹ ਸ਼ਕਤੀਸ਼ਾਲੀ ਹੈ, ਲਾਇਬ੍ਰੇਰੀ ਦੇ ਆਉਟਪੁੱਟ ਨੂੰ ਖਾਸ ਲੋੜਾਂ ਨੂੰ ਪੂਰਾ ਕਰਨ ਲਈ ਅਕਸਰ ਹੋਰ ਪਰਿਵਰਤਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਜਿਵੇਂ ਕਿ ਇੱਕ ਉਚਿਤ Levenshtein ਮੈਟ੍ਰਿਕਸ ਬਣਾਉਣਾ। ਇਹ ਵਾਧੂ ਕਦਮ ਤੁਹਾਡੇ ਵਰਕਫਲੋ ਨੂੰ ਗੁੰਝਲਦਾਰ ਬਣਾ ਸਕਦਾ ਹੈ, ਖਾਸ ਤੌਰ 'ਤੇ ਜਦੋਂ ਵਿਆਪਕ ਡੇਟਾਸੇਟਾਂ ਦੀ ਪ੍ਰਕਿਰਿਆ ਕਰਦੇ ਹੋ। 🤔
ਇਸ ਲੇਖ ਵਿੱਚ, ਅਸੀਂ ਲੇਵੇਨਸ਼ਟੀਨ ਦੂਰੀ ਮੈਟ੍ਰਿਕਸ ਦੀ ਗਣਨਾ ਕਰਨ ਦੇ ਇੱਕ ਅਨੁਕੂਲ ਤਰੀਕੇ ਦੀ ਪੜਚੋਲ ਕਰਾਂਗੇ ਜੋ ਸ਼ਬਦ ਕ੍ਰਮ ਅਤੇ ਕੇਸ ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰਦਾ ਹੈ। ਅਸੀਂ ਵਿਕਲਪਕ ਲਾਇਬ੍ਰੇਰੀਆਂ ਨੂੰ ਵੀ ਛੂਹਾਂਗੇ ਜੋ ਤੁਹਾਡੇ ਕੰਮ ਨੂੰ ਆਸਾਨ ਬਣਾ ਸਕਦੀਆਂ ਹਨ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦੇ ਹੋਏ ਕਿ ਤੁਹਾਡੇ ਕਲੱਸਟਰਿੰਗ ਐਲਗੋਰਿਦਮ ਸਹੀ ਡੇਟਾ ਦੇ ਨਾਲ ਸਹਿਜੇ ਹੀ ਕੰਮ ਕਰਦੇ ਹਨ। ਆਓ ਅੰਦਰ ਡੁਬਕੀ ਕਰੀਏ! 🚀
ਹੁਕਮ | ਵਰਤੋਂ ਦੀ ਉਦਾਹਰਨ |
---|---|
Levenshtein.distance() | ਦੋ ਸਟ੍ਰਿੰਗਾਂ ਵਿਚਕਾਰ ਲੇਵੇਨਸ਼ਟੀਨ ਦੂਰੀ ਦੀ ਗਣਨਾ ਕਰਦਾ ਹੈ, ਇੱਕ ਸਟ੍ਰਿੰਗ ਨੂੰ ਦੂਜੀ ਵਿੱਚ ਬਦਲਣ ਲਈ ਲੋੜੀਂਦੇ ਸੰਪਾਦਨਾਂ ਦੀ ਸੰਖਿਆ ਨੂੰ ਮਾਪਣ ਲਈ ਇੱਥੇ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। |
np.zeros() | ਜ਼ੀਰੋ ਤੋਂ ਸ਼ੁਰੂ ਕੀਤਾ ਗਿਆ ਇੱਕ ਖਾਲੀ ਮੈਟ੍ਰਿਕਸ ਬਣਾਉਂਦਾ ਹੈ, ਜੋ ਬਾਅਦ ਵਿੱਚ ਗਣਿਤ ਕੀਤੀ ਲੇਵੇਨਸ਼ਟੀਨ ਦੂਰੀਆਂ ਨਾਲ ਭਰ ਜਾਂਦਾ ਹੈ। |
" ".join(sorted(s.lower().split())) | ਵਰਣਮਾਲਾ ਅਨੁਸਾਰ ਸ਼ਬਦਾਂ ਨੂੰ ਛਾਂਟ ਕੇ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਛੋਟੇ ਅੱਖਰਾਂ ਵਿੱਚ ਬਦਲ ਕੇ ਉਹਨਾਂ ਨੂੰ ਕੇਸ-ਸੰਵੇਦਨਸ਼ੀਲ ਅਤੇ ਕ੍ਰਮ-ਅਗਿਆਨੀ ਬਣਾਉਣ ਲਈ ਸਟ੍ਰਿੰਗਾਂ ਨੂੰ ਪ੍ਰੀਪ੍ਰੋਸੈਸ ਕਰਦਾ ਹੈ। |
np.where() | ਮੈਟ੍ਰਿਕਸ ਵਿੱਚ ਸਟਰਿੰਗਾਂ ਦੇ ਸੂਚਕਾਂਕ ਦੀ ਪਛਾਣ ਕਰਦਾ ਹੈ ਜੋ ਸਬੰਧਾਂ ਦੇ ਪ੍ਰਸਾਰ ਦੌਰਾਨ ਇੱਕ ਖਾਸ ਕਲੱਸਟਰ ਨਾਲ ਸਬੰਧਤ ਹਨ। |
AffinityPropagation() | ਇੰਪੁੱਟ ਦੇ ਤੌਰ 'ਤੇ ਸਮਾਨਤਾ ਮੈਟ੍ਰਿਕਸ ਨੂੰ ਲੈ ਕੇ, ਕਲੱਸਟਰਿੰਗ ਲਈ ਐਫੀਨਿਟੀ ਪ੍ਰਸਾਰ ਐਲਗੋਰਿਦਮ ਨੂੰ ਲਾਗੂ ਕਰਦਾ ਹੈ। |
affprop.fit() | ਪੂਰਵ-ਕੰਪਿਊਟਿਡ ਸਮਾਨਤਾ ਮੈਟ੍ਰਿਕਸ ਲਈ ਐਫੀਨਿਟੀ ਪ੍ਰਸਾਰ ਮਾਡਲ ਨੂੰ ਫਿੱਟ ਕਰਦਾ ਹੈ, ਕਲੱਸਟਰਾਂ ਦੀ ਪਛਾਣ ਨੂੰ ਸਮਰੱਥ ਬਣਾਉਂਦਾ ਹੈ। |
np.unique() | ਕਲੱਸਟਰਾਂ ਦੁਆਰਾ ਦੁਹਰਾਉਣ ਲਈ ਵਰਤੇ ਗਏ, ਐਫੀਨਿਟੀ ਪ੍ਰਸਾਰ ਐਲਗੋਰਿਦਮ ਦੁਆਰਾ ਨਿਰਧਾਰਤ ਵਿਲੱਖਣ ਕਲੱਸਟਰ ਲੇਬਲਾਂ ਨੂੰ ਕੱਢਦਾ ਹੈ। |
lev_similarity[i, j] = -distance | ਮੁੱਲ ਨੂੰ ਨਕਾਰ ਕੇ Levenshtein ਦੂਰੀ ਨੂੰ ਸਮਾਨਤਾ ਵਿੱਚ ਬਦਲਦਾ ਹੈ, ਕਿਉਂਕਿ ਸਬੰਧਾਂ ਦੇ ਪ੍ਰਸਾਰ ਲਈ ਸਮਾਨਤਾ ਮੈਟ੍ਰਿਕਸ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। |
unittest.TestCase | Levenshtein ਮੈਟ੍ਰਿਕਸ ਅਤੇ ਕਲੱਸਟਰਿੰਗ ਫੰਕਸ਼ਨਾਂ ਦੀ ਸ਼ੁੱਧਤਾ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰਨ ਲਈ Python ਦੇ ਯੂਨਿਟਟੈਸਟ ਫਰੇਮਵਰਕ ਵਿੱਚ ਇੱਕ ਟੈਸਟ ਕੇਸ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦਾ ਹੈ। |
unittest.main() | ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਕਿ ਲਾਗੂ ਕੀਤੇ ਫੰਕਸ਼ਨ ਵੱਖ-ਵੱਖ ਸਥਿਤੀਆਂ ਵਿੱਚ ਸਹੀ ਢੰਗ ਨਾਲ ਕੰਮ ਕਰਦੇ ਹਨ, ਸਕ੍ਰਿਪਟ ਦੇ ਅੰਦਰ ਪਰਿਭਾਸ਼ਿਤ ਸਾਰੇ ਟੈਸਟ ਕੇਸਾਂ ਨੂੰ ਚਲਾਉਂਦਾ ਹੈ। |
ਸਟਰਿੰਗ ਸਮਾਨਤਾ ਅਤੇ ਕਲੱਸਟਰਿੰਗ ਦੇ ਮਕੈਨਿਕਸ ਨੂੰ ਸਮਝਣਾ
ਸਾਡੀਆਂ ਪਾਈਥਨ ਸਕ੍ਰਿਪਟਾਂ ਵਿੱਚ, ਮੁੱਖ ਫੋਕਸ ਇੱਕ Levenshtein ਦੂਰੀ ਮੈਟ੍ਰਿਕਸ ਦੀ ਗਣਨਾ ਕਰਨਾ ਹੈ ਜੋ ਸ਼ਬਦ ਕ੍ਰਮ ਅਤੇ ਕੇਸ ਲਈ ਸੰਵੇਦਨਸ਼ੀਲ ਨਹੀਂ ਹੈ। ਇਹ ਟੈਕਸਟ ਪ੍ਰੋਸੈਸਿੰਗ ਕਾਰਜਾਂ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹੈ ਜਿੱਥੇ "ਹੈਲੋ ਵਰਲਡ" ਅਤੇ "ਵਰਲਡ ਹੈਲੋ" ਵਰਗੇ ਵਾਕਾਂਸ਼ਾਂ ਨੂੰ ਇੱਕੋ ਜਿਹਾ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਪ੍ਰੀ-ਪ੍ਰੋਸੈਸਿੰਗ ਕਦਮ ਹਰੇਕ ਸਤਰ ਵਿੱਚ ਵਰਣਮਾਲਾ ਅਨੁਸਾਰ ਸ਼ਬਦਾਂ ਨੂੰ ਛਾਂਟਦਾ ਹੈ ਅਤੇ ਉਹਨਾਂ ਨੂੰ ਛੋਟੇ ਅੱਖਰਾਂ ਵਿੱਚ ਬਦਲਦਾ ਹੈ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਸ਼ਬਦ ਕ੍ਰਮ ਜਾਂ ਕੈਪੀਟਲਾਈਜ਼ੇਸ਼ਨ ਵਿੱਚ ਅੰਤਰ ਨਤੀਜਿਆਂ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਨਹੀਂ ਕਰਦੇ ਹਨ। ਗਣਨਾ ਕੀਤੀ ਮੈਟ੍ਰਿਕਸ ਉੱਨਤ ਕਾਰਜਾਂ ਲਈ ਬੁਨਿਆਦ ਵਜੋਂ ਕੰਮ ਕਰਦੀ ਹੈ ਜਿਵੇਂ ਕਿ ਸਮਾਨ ਸਤਰਾਂ ਨੂੰ ਕਲੱਸਟਰ ਕਰਨਾ। 📊
ਪਹਿਲੀ ਸਕ੍ਰਿਪਟ ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ ਲੇਵੇਨਸ਼ਟੀਨ ਲਾਇਬ੍ਰੇਰੀ, ਜੋ ਕਿ ਇੱਕ ਸਤਰ ਨੂੰ ਦੂਜੀ ਵਿੱਚ ਬਦਲਣ ਲਈ ਲੋੜੀਂਦੇ ਸੰਪਾਦਨਾਂ ਦੀ ਗਿਣਤੀ ਦੀ ਗਣਨਾ ਕਰਨ ਦਾ ਇੱਕ ਕੁਸ਼ਲ ਤਰੀਕਾ ਪ੍ਰਦਾਨ ਕਰਦੀ ਹੈ। ਇਸ ਦੂਰੀ ਨੂੰ ਫਿਰ ਇੱਕ ਮੈਟ੍ਰਿਕਸ ਵਿੱਚ ਸਟੋਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਜੋ ਕਿ ਡੇਟਾਸੈਟਾਂ ਵਿੱਚ ਜੋੜਾ ਸਮਾਨਤਾਵਾਂ ਨੂੰ ਦਰਸਾਉਣ ਲਈ ਇੱਕ ਢਾਂਚਾਗਤ ਫਾਰਮੈਟ ਹੈ। ਦੀ ਵਰਤੋਂ NumPy ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰਦਾ ਹੈ ਕਿ ਇਸ ਮੈਟ੍ਰਿਕਸ 'ਤੇ ਓਪਰੇਸ਼ਨ ਗਤੀ ਅਤੇ ਸਕੇਲੇਬਿਲਟੀ ਲਈ ਅਨੁਕੂਲਿਤ ਹਨ, ਖਾਸ ਤੌਰ 'ਤੇ ਜਦੋਂ ਵੱਡੇ ਡੇਟਾਸੈਟਾਂ ਨਾਲ ਕੰਮ ਕਰਦੇ ਹੋ।
ਦੂਜੀ ਸਕ੍ਰਿਪਟ ਵਿੱਚ, ਫੋਕਸ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਕਲੱਸਟਰਿੰਗ ਸਟ੍ਰਿੰਗਾਂ ਵਿੱਚ ਤਬਦੀਲ ਹੋ ਜਾਂਦਾ ਹੈ ਏਫੀਨਿਟੀ ਪ੍ਰਸਾਰ ਐਲਗੋਰਿਦਮ। ਇਹ ਤਕਨੀਕ ਉਹਨਾਂ ਦੀ ਸਮਾਨਤਾ ਦੇ ਆਧਾਰ 'ਤੇ ਸਟ੍ਰਿੰਗਾਂ ਨੂੰ ਸਮੂਹ ਕਰਦੀ ਹੈ, ਜਿਵੇਂ ਕਿ ਨੈਗੇਟਿਵ ਲੇਵੇਨਸ਼ਟੀਨ ਦੂਰੀ ਦੁਆਰਾ ਨਿਰਧਾਰਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਦੂਰੀਆਂ ਨੂੰ ਸਮਾਨਤਾਵਾਂ ਵਿੱਚ ਬਦਲ ਕੇ, ਅਸੀਂ ਇੱਕ ਇਨਪੁਟ ਵਜੋਂ ਕਲੱਸਟਰਾਂ ਦੀ ਗਿਣਤੀ ਦੀ ਲੋੜ ਤੋਂ ਬਿਨਾਂ ਅਰਥਪੂਰਨ ਕਲੱਸਟਰ ਬਣਾਉਣ ਲਈ ਐਲਗੋਰਿਦਮ ਨੂੰ ਸਮਰੱਥ ਬਣਾਉਂਦੇ ਹਾਂ। ਇਹ ਪਹੁੰਚ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ ਗੈਰ-ਨਿਗਰਾਨੀ ਸਿਖਲਾਈ ਕਾਰਜਾਂ ਲਈ ਲਾਭਦਾਇਕ ਹੈ, ਜਿਵੇਂ ਕਿ ਵੱਡੇ ਟੈਕਸਟ ਕਾਰਪੋਰਾ ਨੂੰ ਸ਼੍ਰੇਣੀਬੱਧ ਕਰਨਾ। 🤖
ਸ਼ੁੱਧਤਾ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ, ਤੀਜੀ ਸਕ੍ਰਿਪਟ ਯੂਨਿਟ ਟੈਸਟਾਂ ਨੂੰ ਪੇਸ਼ ਕਰਦੀ ਹੈ। ਇਹ ਟੈਸਟ ਪ੍ਰਮਾਣਿਤ ਕਰਦੇ ਹਨ ਕਿ ਗਣਨਾ ਕੀਤੀ ਗਈ ਮੈਟ੍ਰਿਕਸ ਸਹੀ ਪ੍ਰੀਪ੍ਰੋਸੈਸਿੰਗ ਨਿਯਮਾਂ ਨੂੰ ਦਰਸਾਉਂਦੀ ਹੈ ਅਤੇ ਇਹ ਕਿ ਕਲੱਸਟਰਿੰਗ ਸੰਭਾਵਿਤ ਸਮੂਹਾਂ ਨਾਲ ਇਕਸਾਰ ਹੁੰਦੀ ਹੈ। ਉਦਾਹਰਨ ਲਈ, "ਪਤਲੇ ਕਾਗਜ਼" ਅਤੇ "ਪੇਪਰ ਥਿਨ" ਵਰਗੀਆਂ ਸਤਰਾਂ ਇੱਕੋ ਕਲੱਸਟਰ ਵਿੱਚ ਦਿਖਾਈ ਦੇਣੀਆਂ ਚਾਹੀਦੀਆਂ ਹਨ। ਇਹਨਾਂ ਸਕ੍ਰਿਪਟਾਂ ਦਾ ਮਾਡਯੂਲਰ ਡਿਜ਼ਾਈਨ ਉਹਨਾਂ ਨੂੰ ਵੱਖ-ਵੱਖ ਪ੍ਰੋਜੈਕਟਾਂ ਵਿੱਚ ਮੁੜ ਵਰਤੋਂ ਅਤੇ ਏਕੀਕ੍ਰਿਤ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਟੈਕਸਟ ਵਰਗੀਕਰਣ, ਦਸਤਾਵੇਜ਼ਾਂ ਦੀ ਡੁਪਲੀਕੇਸ਼ਨ, ਜਾਂ ਖੋਜ ਇੰਜਨ ਔਪਟੀਮਾਈਜੇਸ਼ਨ। 🚀
ਪਾਈਥਨ ਵਿੱਚ ਇੱਕ ਕੇਸ-ਸੰਵੇਦਨਸ਼ੀਲ ਲੇਵੇਂਸ਼ਟੀਨ ਦੂਰੀ ਮੈਟਰਿਕਸ ਦੀ ਗਣਨਾ ਕਰਨ ਦੇ ਵਿਕਲਪਿਕ ਤਰੀਕੇ
ਅਨੁਕੂਲਿਤ ਪ੍ਰਦਰਸ਼ਨ ਲਈ 'Levenshtein' ਲਾਇਬ੍ਰੇਰੀ ਦੇ ਨਾਲ Python ਦੀ ਵਰਤੋਂ ਕਰਨਾ
import numpy as np
import Levenshtein as lev
# Function to calculate the Levenshtein distance matrix
def levenshtein_matrix(strings):
# Preprocess strings to ignore case and word order
preprocessed = [" ".join(sorted(s.lower().split())) for s in strings]
n = len(preprocessed)
matrix = np.zeros((n, n), dtype=float)
# Populate the matrix with Levenshtein distances
for i in range(n):
for j in range(n):
matrix[i, j] = lev.distance(preprocessed[i], preprocessed[j])
return matrix
# Example usage
if __name__ == "__main__":
lst_words = ['Hello world', 'world hello', 'all hello',
'peace word', 'Word hello', 'thin paper', 'paper thin']
matrix = levenshtein_matrix(lst_words)
print(matrix)
Levenshtein ਦੂਰੀ ਵਰਤ ਕੇ ਕਲੱਸਟਰਿੰਗ ਸਤਰ
ਪਾਇਥਨ ਸਕ੍ਰਿਪਟ 'Scikit-learn' ਨੂੰ ਐਫੀਨਿਟੀ ਪ੍ਰੋਪੇਗੇਸ਼ਨ ਕਲੱਸਟਰਿੰਗ ਲਈ ਨਿਯੁਕਤ ਕਰਦੀ ਹੈ
import numpy as np
from sklearn.cluster import AffinityPropagation
import Levenshtein as lev
# Function to calculate the similarity matrix
def similarity_matrix(strings):
preprocessed = [" ".join(sorted(s.lower().split())) for s in strings]
n = len(preprocessed)
matrix = np.zeros((n, n), dtype=float)
for i in range(n):
for j in range(n):
# Convert distance to similarity
distance = lev.distance(preprocessed[i], preprocessed[j])
matrix[i, j] = -distance # Negative for affinity propagation
return matrix
# Function to perform affinity propagation
def cluster_strings(strings):
sim_matrix = similarity_matrix(strings)
affprop = AffinityPropagation(affinity="precomputed")
affprop.fit(sim_matrix)
# Display results
for cluster_id in np.unique(affprop.labels_):
cluster = np.where(affprop.labels_ == cluster_id)[0]
print(f"Cluster {cluster_id}: {[strings[i] for i in cluster]}")
# Example usage
if __name__ == "__main__":
lst_words = ['Hello world', 'world hello', 'all hello',
'peace word', 'Word hello', 'thin paper', 'paper thin']
cluster_strings(lst_words)
ਮਜ਼ਬੂਤੀ ਲਈ ਸਕ੍ਰਿਪਟਾਂ ਦੀ ਜਾਂਚ ਕਰ ਰਿਹਾ ਹੈ
ਦੋਵਾਂ ਫੰਕਸ਼ਨਾਂ ਵਿੱਚ ਸ਼ੁੱਧਤਾ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਯੂਨਿਟ ਟੈਸਟ
import unittest
class TestLevenshteinMatrix(unittest.TestCase):
def test_levenshtein_matrix(self):
strings = ['Hello world', 'world hello']
matrix = levenshtein_matrix(strings)
self.assertEqual(matrix[0, 1], 0)
self.assertEqual(matrix[1, 0], 0)
class TestClustering(unittest.TestCase):
def test_cluster_strings(self):
strings = ['Hello world', 'world hello', 'peace word']
# Expect similar strings in the same cluster
cluster_strings(strings)
if __name__ == "__main__":
unittest.main()
ਅਨੁਕੂਲਿਤ ਸਟ੍ਰਿੰਗ ਤੁਲਨਾ ਤਕਨੀਕਾਂ 'ਤੇ ਵਿਸਤਾਰ ਕਰਨਾ
ਲਿਖਤੀ ਜਾਣਕਾਰੀ ਦੇ ਵੱਡੇ ਡੇਟਾਸੈਟਾਂ ਨਾਲ ਕੰਮ ਕਰਦੇ ਸਮੇਂ, ਤਾਰਾਂ ਦੀ ਕੁਸ਼ਲਤਾ ਨਾਲ ਤੁਲਨਾ ਕਰਨਾ ਮਹੱਤਵਪੂਰਨ ਹੁੰਦਾ ਹੈ। ਬੁਨਿਆਦੀ ਲੇਵੇਨਸ਼ਟੀਨ ਦੂਰੀ ਗਣਨਾਵਾਂ ਤੋਂ ਇਲਾਵਾ, ਪ੍ਰੀਪ੍ਰੋਸੈਸਿੰਗ ਸ਼ੁੱਧਤਾ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ ਵਿੱਚ ਇੱਕ ਮੁੱਖ ਭੂਮਿਕਾ ਨਿਭਾਉਂਦੀ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਉਹਨਾਂ ਦ੍ਰਿਸ਼ਾਂ 'ਤੇ ਵਿਚਾਰ ਕਰੋ ਜਿੱਥੇ ਸਤਰ ਵਿੱਚ ਵਿਰਾਮ ਚਿੰਨ੍ਹ, ਮਲਟੀਪਲ ਸਪੇਸ, ਜਾਂ ਗੈਰ-ਅੱਖਰ ਅੰਕੀ ਅੱਖਰ ਵੀ ਸ਼ਾਮਲ ਹੋ ਸਕਦੇ ਹਨ। ਇਹਨਾਂ ਕੇਸਾਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ, ਕਿਸੇ ਵੀ ਸਮਾਨਤਾ ਐਲਗੋਰਿਦਮ ਨੂੰ ਲਾਗੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਅਣਚਾਹੇ ਅੱਖਰਾਂ ਨੂੰ ਉਤਾਰਨਾ ਅਤੇ ਸਪੇਸਿੰਗ ਨੂੰ ਆਮ ਬਣਾਉਣਾ ਜ਼ਰੂਰੀ ਹੈ। ਲਾਇਬ੍ਰੇਰੀਆਂ ਵਰਗੀਆਂ ਮੁੜ (ਰੈਗੂਲਰ ਸਮੀਕਰਨਾਂ ਲਈ) ਡਾਟਾ ਨੂੰ ਕੁਸ਼ਲਤਾ ਨਾਲ ਸਾਫ਼ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰ ਸਕਦਾ ਹੈ, ਪ੍ਰੀ-ਪ੍ਰੋਸੈਸਿੰਗ ਕਦਮਾਂ ਨੂੰ ਤੇਜ਼ ਅਤੇ ਵਧੇਰੇ ਇਕਸਾਰ ਬਣਾਉਂਦਾ ਹੈ। 🧹
ਇਕ ਹੋਰ ਕੀਮਤੀ ਪਹਿਲੂ ਸੰਦਰਭ ਦੇ ਆਧਾਰ 'ਤੇ ਸਮਾਨਤਾ ਸਕੋਰਾਂ ਦਾ ਭਾਰ ਹੈ। ਮੰਨ ਲਓ ਕਿ ਤੁਸੀਂ ਖੋਜ ਇੰਜਣ ਸਵਾਲਾਂ ਲਈ ਉਪਭੋਗਤਾ ਇੰਪੁੱਟ ਦੀ ਪ੍ਰਕਿਰਿਆ ਕਰ ਰਹੇ ਹੋ। "ਹੋਟਲ" ਅਤੇ "ਹੋਟਲ" ਵਰਗੇ ਸ਼ਬਦ ਪ੍ਰਸੰਗਿਕ ਤੌਰ 'ਤੇ ਬਹੁਤ ਮਿਲਦੇ-ਜੁਲਦੇ ਹਨ, ਭਾਵੇਂ ਉਹਨਾਂ ਦੀ ਲੇਵੇਨਸ਼ਟੀਨ ਦੂਰੀ ਛੋਟੀ ਹੋਵੇ। ਐਲਗੋਰਿਦਮ ਜੋ ਟੋਕਨ ਵੇਟਿੰਗ ਦੀ ਆਗਿਆ ਦਿੰਦੇ ਹਨ, ਜਿਵੇਂ ਕਿ TF-IDF, ਖਾਸ ਸ਼ਬਦਾਂ ਦੀ ਬਾਰੰਬਾਰਤਾ ਅਤੇ ਮਹੱਤਤਾ ਨੂੰ ਸ਼ਾਮਲ ਕਰਕੇ ਵਾਧੂ ਸ਼ੁੱਧਤਾ ਪ੍ਰਦਾਨ ਕਰ ਸਕਦਾ ਹੈ। ਦੂਰੀ ਮੈਟ੍ਰਿਕਸ ਅਤੇ ਟਰਮ ਵੇਟਿੰਗ ਦਾ ਇਹ ਸੁਮੇਲ ਟੈਕਸਟ ਕਲੱਸਟਰਿੰਗ ਅਤੇ ਡੁਪਲੀਕੇਸ਼ਨ ਕਾਰਜਾਂ ਵਿੱਚ ਬਹੁਤ ਲਾਭਦਾਇਕ ਹੈ।
ਅੰਤ ਵਿੱਚ, ਵੱਡੇ ਪੈਮਾਨੇ ਦੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਲਈ ਪ੍ਰਦਰਸ਼ਨ ਨੂੰ ਅਨੁਕੂਲ ਬਣਾਉਣਾ ਇੱਕ ਹੋਰ ਮਹੱਤਵਪੂਰਣ ਵਿਚਾਰ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਜੇਕਰ ਤੁਹਾਨੂੰ ਹਜ਼ਾਰਾਂ ਸਤਰਾਂ ਦੇ ਨਾਲ ਇੱਕ ਡੇਟਾਸੈਟ ਦੀ ਪ੍ਰਕਿਰਿਆ ਕਰਨ ਦੀ ਲੋੜ ਹੈ, ਤਾਂ ਪਾਈਥਨ ਦੇ ਨਾਲ ਸਮਾਨਾਂਤਰ ਪ੍ਰੋਸੈਸਿੰਗ ਮਲਟੀਪ੍ਰੋਸੈਸਿੰਗ ਲਾਇਬ੍ਰੇਰੀ ਗਣਨਾ ਦੇ ਸਮੇਂ ਨੂੰ ਕਾਫ਼ੀ ਘਟਾ ਸਕਦੀ ਹੈ। ਮੈਟ੍ਰਿਕਸ ਗਣਨਾਵਾਂ ਨੂੰ ਮਲਟੀਪਲ ਕੋਰਾਂ ਵਿੱਚ ਵੰਡ ਕੇ, ਤੁਸੀਂ ਇਹ ਸੁਨਿਸ਼ਚਿਤ ਕਰ ਸਕਦੇ ਹੋ ਕਿ ਕਲੱਸਟਰਿੰਗ ਵਰਗੇ ਸਰੋਤ-ਸੰਬੰਧੀ ਕਾਰਜ ਵੀ ਸਕੇਲੇਬਲ ਅਤੇ ਕੁਸ਼ਲ ਰਹਿਣ। 🚀 ਇਹਨਾਂ ਤਕਨੀਕਾਂ ਨੂੰ ਜੋੜਨ ਨਾਲ ਸਟ੍ਰਿੰਗ ਤੁਲਨਾ ਅਤੇ ਟੈਕਸਟ ਵਿਸ਼ਲੇਸ਼ਣ ਲਈ ਵਧੇਰੇ ਮਜ਼ਬੂਤ ਹੱਲ ਹੁੰਦੇ ਹਨ।
Levenshtein ਦੂਰੀ ਅਤੇ ਐਪਲੀਕੇਸ਼ਨਾਂ ਬਾਰੇ ਮੁੱਖ ਸਵਾਲ
- Levenshtein ਦੂਰੀ ਕੀ ਹੈ?
- Levenshtein ਦੂਰੀ ਇੱਕ ਸਟ੍ਰਿੰਗ ਨੂੰ ਦੂਜੀ ਵਿੱਚ ਬਦਲਣ ਲਈ ਲੋੜੀਂਦੇ ਸਿੰਗਲ-ਅੱਖਰ ਸੰਪਾਦਨਾਂ (ਸੰਮਿਲਨ, ਮਿਟਾਉਣ, ਜਾਂ ਬਦਲ) ਦੀ ਗਿਣਤੀ ਨੂੰ ਮਾਪਦੀ ਹੈ।
- ਮੈਂ Levenshtein ਦੂਰੀ ਨੂੰ ਕੇਸ-ਸੰਵੇਦਨਸ਼ੀਲ ਕਿਵੇਂ ਬਣਾ ਸਕਦਾ ਹਾਂ?
- ਨਾਲ ਸਟ੍ਰਿੰਗਸ ਨੂੰ ਪ੍ਰੀਪ੍ਰੋਸੈੱਸ ਕਰਕੇ .lower(), ਤੁਸੀਂ ਦੂਰੀ ਦੀ ਗਣਨਾ ਨੂੰ ਲਾਗੂ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਸਾਰੇ ਟੈਕਸਟ ਨੂੰ ਛੋਟੇ ਅੱਖਰਾਂ ਵਿੱਚ ਬਦਲ ਸਕਦੇ ਹੋ।
- ਲੇਵੇਂਸ਼ਟੀਨ ਦੂਰੀ ਦੀ ਤੇਜ਼ੀ ਨਾਲ ਗਣਨਾ ਕਰਨ ਲਈ ਮੈਨੂੰ ਕਿਹੜੀ ਲਾਇਬ੍ਰੇਰੀ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ?
- ਦ python-Levenshtein ਲਾਇਬ੍ਰੇਰੀ ਦੂਰੀ ਦੀ ਗਣਨਾ ਲਈ FuzzyWuzzy ਨਾਲੋਂ ਬਹੁਤ ਜ਼ਿਆਦਾ ਅਨੁਕੂਲਿਤ ਅਤੇ ਤੇਜ਼ ਹੈ।
- ਕੀ ਮੈਂ Levenshtein ਦੂਰੀ ਦੇ ਨਾਲ ਸ਼ਬਦ ਕ੍ਰਮ ਵਿੱਚ ਤਬਦੀਲੀਆਂ ਨੂੰ ਸੰਭਾਲ ਸਕਦਾ/ਸਕਦੀ ਹਾਂ?
- ਹਾਂ, ਤੁਸੀਂ ਵਰਣਮਾਲਾ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਸ਼ਬਦਾਂ ਨੂੰ ਕ੍ਰਮਬੱਧ ਕਰ ਸਕਦੇ ਹੋ " ".join(sorted(string.split())) ਤਾਰਾਂ ਦੀ ਤੁਲਨਾ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ।
- ਮੈਂ ਉਹਨਾਂ ਦੀ ਸਮਾਨਤਾ ਦੇ ਅਧਾਰ ਤੇ ਸਟ੍ਰਿੰਗਾਂ ਨੂੰ ਕਿਵੇਂ ਕਲੱਸਟਰ ਕਰਾਂ?
- ਤੁਸੀਂ ਵਰਤ ਸਕਦੇ ਹੋ scikit-learn's AffinityPropagation Levenshtein ਦੂਰੀਆਂ ਤੋਂ ਲਿਆ ਗਿਆ ਸਮਾਨਤਾ ਮੈਟ੍ਰਿਕਸ ਵਾਲਾ ਐਲਗੋਰਿਦਮ।
ਕੁਸ਼ਲ ਸਟ੍ਰਿੰਗ ਮੈਚਿੰਗ ਅਤੇ ਕਲੱਸਟਰਿੰਗ
ਪੇਸ਼ ਕੀਤੇ ਗਏ ਹੱਲ ਉਜਾਗਰ ਕਰਦੇ ਹਨ ਕਿ ਕਿਵੇਂ ਅਨੁਕੂਲਿਤ ਲਾਇਬ੍ਰੇਰੀਆਂ ਨਾਲ ਪ੍ਰੀ-ਪ੍ਰੋਸੈਸਿੰਗ ਤਕਨੀਕਾਂ ਨੂੰ ਜੋੜਨਾ ਟੈਕਸਟ ਵਿਸ਼ਲੇਸ਼ਣ ਵਿੱਚ ਅਸਲ-ਸੰਸਾਰ ਦੀਆਂ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਹੱਲ ਕਰ ਸਕਦਾ ਹੈ। ਕੇਸ-ਸੰਵੇਦਨਸ਼ੀਲਤਾ ਅਤੇ ਵਰਡ ਆਰਡਰ ਨੂੰ ਸੰਭਾਲਣਾ ਖੋਜ ਇੰਜਣਾਂ ਅਤੇ ਦਸਤਾਵੇਜ਼ਾਂ ਦੀ ਡੁਪਲੀਕੇਸ਼ਨ ਵਰਗੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਨੂੰ ਨਿਰਵਿਘਨ ਕੰਮ ਕਰਨ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ। ✨
ਵਰਗੇ ਸਾਧਨਾਂ ਦਾ ਲਾਭ ਉਠਾ ਕੇ ਲੇਵੇਨਸ਼ਟੀਨ ਅਤੇ ਕਲੱਸਟਰਿੰਗ ਐਲਗੋਰਿਦਮ, ਇੱਥੋਂ ਤੱਕ ਕਿ ਗੁੰਝਲਦਾਰ ਡੇਟਾਸੈਟਾਂ ਨੂੰ ਵੀ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਢੰਗ ਨਾਲ ਸੰਸਾਧਿਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਇਹ ਵਿਧੀਆਂ ਦਰਸਾਉਂਦੀਆਂ ਹਨ ਕਿ ਕਿਵੇਂ ਪਾਈਥਨ ਦੀ ਬਹੁਪੱਖੀਤਾ ਵਿਕਾਸਕਰਤਾਵਾਂ ਨੂੰ ਸ਼ੁੱਧਤਾ ਅਤੇ ਗਤੀ ਨਾਲ ਕੁਦਰਤੀ ਭਾਸ਼ਾ ਪ੍ਰਕਿਰਿਆ ਵਿੱਚ ਚੁਣੌਤੀਆਂ ਨਾਲ ਨਜਿੱਠਣ ਦੇ ਯੋਗ ਬਣਾਉਂਦੀ ਹੈ। 🚀
ਅਨੁਕੂਲਿਤ ਟੈਕਸਟ ਮੈਚਿੰਗ ਲਈ ਸਰੋਤ ਅਤੇ ਹਵਾਲੇ
- ਬਾਰੇ ਜਾਣਕਾਰੀ Levenshtein ਲਾਇਬ੍ਰੇਰੀ ਇਸਦੇ ਅਧਿਕਾਰਤ PyPI ਦਸਤਾਵੇਜ਼ਾਂ ਤੋਂ ਹਵਾਲਾ ਦਿੱਤਾ ਗਿਆ ਸੀ।
- ਬਾਰੇ ਵੇਰਵੇ ਏਫੀਨਿਟੀ ਪ੍ਰਸਾਰ ਸਕਿਟ-ਲਰਨ ਦੇ ਅਧਿਕਾਰਤ ਦਸਤਾਵੇਜ਼ਾਂ ਤੋਂ ਪ੍ਰਾਪਤ ਕੀਤੇ ਗਏ ਸਨ।
- ਦੀ ਵਰਤੋਂ NumPy ਮੈਟ੍ਰਿਕਸ ਓਪਰੇਸ਼ਨਾਂ ਲਈ NumPy ਦਸਤਾਵੇਜ਼ਾਂ ਵਿੱਚ ਦਿੱਤੇ ਦਿਸ਼ਾ-ਨਿਰਦੇਸ਼ਾਂ 'ਤੇ ਆਧਾਰਿਤ ਹੈ।
- ਟੈਕਸਟ ਪ੍ਰੀਪ੍ਰੋਸੈਸਿੰਗ ਲਈ ਸਭ ਤੋਂ ਵਧੀਆ ਅਭਿਆਸਾਂ ਤੋਂ ਅਨੁਕੂਲਿਤ ਕੀਤਾ ਗਿਆ ਸੀ ਪਾਈਥਨ ਨਿਯਮਤ ਸਮੀਕਰਨ ਦਸਤਾਵੇਜ਼ .