ಸ್ಟ್ರಿಂಗ್ ಹೋಲಿಕೆಗಾಗಿ ಪೈಥಾನ್ನ ಸಂಭಾವ್ಯತೆಯನ್ನು ಸಡಿಲಿಸಲಾಗುತ್ತಿದೆ
ನೀವು ಒಂದೇ ರೀತಿಯ ಆದರೆ ಪದ ಕ್ರಮದಲ್ಲಿ ಅಥವಾ ಕವಚದಲ್ಲಿ ಭಿನ್ನವಾಗಿರುವ ಪದಗುಚ್ಛಗಳ ಡೇಟಾಸೆಟ್ನೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುತ್ತಿದ್ದೀರಿ ಎಂದು ಕಲ್ಪಿಸಿಕೊಳ್ಳಿ. ಸಾಂಪ್ರದಾಯಿಕ ವಿಧಾನಗಳು ಅವುಗಳನ್ನು ಒಂದೇ ರೀತಿಯಲ್ಲಿ ಗುರುತಿಸಲು ವಿಫಲವಾದಾಗ "ಹಲೋ ವರ್ಲ್ಡ್" ಮತ್ತು "ವರ್ಲ್ಡ್ ಹಲೋ" ನಂತಹ ತಂತಿಗಳನ್ನು ಹೋಲಿಸುವುದು ಸವಾಲಾಗುತ್ತದೆ. ಅಲ್ಲಿಯೇ ಲೆವೆನ್ಸ್ಟೈನ್ ದೂರವು ಹೊಳೆಯಬಹುದು.
Levenshtein ದೂರವು ಒಂದು ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಇನ್ನೊಂದಕ್ಕೆ ತಿರುಗಿಸಲು ಎಷ್ಟು ಸಂಪಾದನೆಗಳ ಅಗತ್ಯವಿದೆ ಎಂಬುದನ್ನು ಅಳೆಯುತ್ತದೆ. ಆದರೆ ಪದ ಕ್ರಮ ಮತ್ತು ಪ್ರಕರಣವು ಅಪ್ರಸ್ತುತವಾದಾಗ ಏನಾಗುತ್ತದೆ? ಪಠ್ಯ ಸಂಸ್ಕರಣೆ ಮತ್ತು ನೈಸರ್ಗಿಕ ಭಾಷಾ ಕಾರ್ಯಗಳಲ್ಲಿ ಇದು ಆಗಾಗ್ಗೆ ಸವಾಲಾಗಿದೆ, ವಿಶೇಷವಾಗಿ ನೀವು ನಿಖರವಾಗಿ ಗುರಿಯಿರಿಸಿದಾಗ. 📊
ಸ್ಟ್ರಿಂಗ್ ಹೋಲಿಕೆಯನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಲು ಅನೇಕ ಡೆವಲಪರ್ಗಳು FuzzyWuzzy ಯಂತಹ ಸಾಧನಗಳಿಗೆ ತಿರುಗುತ್ತಾರೆ. ಇದು ಶಕ್ತಿಯುತವಾಗಿದ್ದರೂ, ಸರಿಯಾದ Levenshtein ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಅನ್ನು ರಚಿಸುವಂತಹ ನಿರ್ದಿಷ್ಟ ಅವಶ್ಯಕತೆಗಳನ್ನು ಪೂರೈಸಲು ಲೈಬ್ರರಿಯ ಔಟ್ಪುಟ್ಗೆ ಹೆಚ್ಚಿನ ರೂಪಾಂತರದ ಅಗತ್ಯವಿರುತ್ತದೆ. ಈ ಹೆಚ್ಚುವರಿ ಹಂತವು ನಿಮ್ಮ ಕೆಲಸದ ಹರಿವನ್ನು ಸಂಕೀರ್ಣಗೊಳಿಸಬಹುದು, ವಿಶೇಷವಾಗಿ ವ್ಯಾಪಕವಾದ ಡೇಟಾಸೆಟ್ಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವಾಗ. 🤔
ಈ ಲೇಖನದಲ್ಲಿ, ಪದ ಕ್ರಮ ಮತ್ತು ಪ್ರಕರಣವನ್ನು ನಿರ್ಲಕ್ಷಿಸುವ Levenshtein ದೂರದ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಅನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಲು ನಾವು ಆಪ್ಟಿಮೈಸ್ಡ್ ವಿಧಾನವನ್ನು ಅನ್ವೇಷಿಸುತ್ತೇವೆ. ನಿಮ್ಮ ಕ್ಲಸ್ಟರಿಂಗ್ ಅಲ್ಗಾರಿದಮ್ಗಳು ನಿಖರವಾದ ಡೇಟಾದೊಂದಿಗೆ ಮನಬಂದಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದನ್ನು ಖಾತ್ರಿಪಡಿಸುವ ಮೂಲಕ ನಿಮ್ಮ ಕೆಲಸವನ್ನು ಸುಲಭಗೊಳಿಸಬಹುದಾದ ಪರ್ಯಾಯ ಲೈಬ್ರರಿಗಳನ್ನು ಸಹ ನಾವು ಸ್ಪರ್ಶಿಸುತ್ತೇವೆ. ಧುಮುಕೋಣ! 🚀
ಆಜ್ಞೆ | ಬಳಕೆಯ ಉದಾಹರಣೆ |
---|---|
Levenshtein.distance() | ಎರಡು ತಂತಿಗಳ ನಡುವಿನ Levenshtein ಅಂತರವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುತ್ತದೆ, ಒಂದು ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಇನ್ನೊಂದಕ್ಕೆ ಪರಿವರ್ತಿಸಲು ಅಗತ್ಯವಿರುವ ಸಂಪಾದನೆಗಳ ಸಂಖ್ಯೆಯನ್ನು ಅಳೆಯಲು ಇಲ್ಲಿ ಬಳಸಲಾಗುತ್ತದೆ. |
np.zeros() | ಶೂನ್ಯಕ್ಕೆ ಆರಂಭಿಸಲಾದ ಖಾಲಿ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ, ನಂತರ ಅದನ್ನು ಲೆಕ್ಕಹಾಕಿದ ಲೆವೆನ್ಶ್ಟೈನ್ ಅಂತರಗಳಿಂದ ತುಂಬಿಸಲಾಗುತ್ತದೆ. |
" ".join(sorted(s.lower().split())) | ಪದಗಳನ್ನು ವರ್ಣಮಾಲೆಯಂತೆ ವಿಂಗಡಿಸುವ ಮೂಲಕ ಮತ್ತು ಅವುಗಳನ್ನು ಸಣ್ಣ ಅಕ್ಷರಕ್ಕೆ ಪರಿವರ್ತಿಸುವ ಮೂಲಕ ಅವುಗಳನ್ನು ಕೇಸ್-ಇನ್ಸೆನ್ಸಿಟಿವ್ ಮತ್ತು ಆರ್ಡರ್-ಅಜ್ಞೇಯತಾವಾದಿಯನ್ನಾಗಿ ಮಾಡಲು ಸ್ಟ್ರಿಂಗ್ಗಳನ್ನು ಪೂರ್ವ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತದೆ. |
np.where() | ಅಫಿನಿಟಿ ಪ್ರಸರಣದ ಸಮಯದಲ್ಲಿ ನಿರ್ದಿಷ್ಟ ಕ್ಲಸ್ಟರ್ಗೆ ಸೇರಿದ ಮ್ಯಾಟ್ರಿಕ್ಸ್ನಲ್ಲಿನ ತಂತಿಗಳ ಸೂಚ್ಯಂಕಗಳನ್ನು ಗುರುತಿಸುತ್ತದೆ. |
AffinityPropagation() | ಕ್ಲಸ್ಟರಿಂಗ್ಗಾಗಿ ಅಫಿನಿಟಿ ಪ್ರಸರಣ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುತ್ತದೆ, ಹೋಲಿಕೆಯ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಅನ್ನು ಇನ್ಪುಟ್ ಆಗಿ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ. |
affprop.fit() | ಪೂರ್ವ ಕಂಪ್ಯೂಟೆಡ್ ಹೋಲಿಕೆಯ ಮ್ಯಾಟ್ರಿಕ್ಸ್ಗೆ ಅಫಿನಿಟಿ ಪ್ರಸರಣ ಮಾದರಿಯನ್ನು ಹೊಂದುತ್ತದೆ, ಕ್ಲಸ್ಟರ್ಗಳ ಗುರುತಿಸುವಿಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ. |
np.unique() | ಅಫಿನಿಟಿ ಪ್ರಸರಣ ಅಲ್ಗಾರಿದಮ್ನಿಂದ ನಿಯೋಜಿಸಲಾದ ಅನನ್ಯ ಕ್ಲಸ್ಟರ್ ಲೇಬಲ್ಗಳನ್ನು ಹೊರತೆಗೆಯುತ್ತದೆ, ಇದನ್ನು ಕ್ಲಸ್ಟರ್ಗಳ ಮೂಲಕ ಪುನರಾವರ್ತಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ. |
lev_similarity[i, j] = -distance | ಮೌಲ್ಯವನ್ನು ನಿರಾಕರಿಸುವ ಮೂಲಕ Levenshtein ಅಂತರವನ್ನು ಹೋಲಿಕೆಗೆ ಪರಿವರ್ತಿಸುತ್ತದೆ, ಏಕೆಂದರೆ ಸಂಬಂಧದ ಪ್ರಚಾರಕ್ಕೆ ಹೋಲಿಕೆಯ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಅಗತ್ಯವಿರುತ್ತದೆ. |
unittest.TestCase | ಲೆವೆನ್ಸ್ಟೈನ್ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಮತ್ತು ಕ್ಲಸ್ಟರಿಂಗ್ ಫಂಕ್ಷನ್ಗಳ ಸರಿಯಾದತೆಯನ್ನು ಮೌಲ್ಯೀಕರಿಸಲು ಪೈಥಾನ್ನ ಯುನಿಟೆಸ್ಟ್ ಫ್ರೇಮ್ವರ್ಕ್ನಲ್ಲಿ ಪರೀಕ್ಷಾ ಪ್ರಕರಣವನ್ನು ವಿವರಿಸುತ್ತದೆ. |
unittest.main() | ಕಾರ್ಯಗತಗೊಳಿಸಿದ ಕಾರ್ಯಗಳು ವಿವಿಧ ಸನ್ನಿವೇಶಗಳಲ್ಲಿ ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾದ ಎಲ್ಲಾ ಪರೀಕ್ಷಾ ಪ್ರಕರಣಗಳನ್ನು ರನ್ ಮಾಡುತ್ತದೆ. |
ಸ್ಟ್ರಿಂಗ್ ಸಿಮಿಲಾರಿಟಿ ಮತ್ತು ಕ್ಲಸ್ಟರಿಂಗ್ ಯಂತ್ರಶಾಸ್ತ್ರವನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು
ನಮ್ಮ ಪೈಥಾನ್ ಸ್ಕ್ರಿಪ್ಟ್ಗಳಲ್ಲಿ, ವರ್ಡ್ ಆರ್ಡರ್ ಮತ್ತು ಕೇಸ್ಗೆ ಸೂಕ್ಷ್ಮವಲ್ಲದ ಲೆವೆನ್ಸ್ಟೈನ್ ದೂರದ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಅನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುವುದು ಮುಖ್ಯ ಗಮನ. "ಹಲೋ ವರ್ಲ್ಡ್" ಮತ್ತು "ವರ್ಲ್ಡ್ ಹಲೋ" ನಂತಹ ಪದಗುಚ್ಛಗಳನ್ನು ಒಂದೇ ರೀತಿ ಪರಿಗಣಿಸಬೇಕಾದ ಪಠ್ಯ ಪ್ರಕ್ರಿಯೆ ಕಾರ್ಯಗಳಿಗೆ ಇದು ನಿರ್ಣಾಯಕವಾಗಿದೆ. ಪ್ರಿಪ್ರೊಸೆಸಿಂಗ್ ಹಂತವು ಪ್ರತಿ ಸ್ಟ್ರಿಂಗ್ನಲ್ಲಿನ ಪದಗಳನ್ನು ವರ್ಣಮಾಲೆಯಂತೆ ವಿಂಗಡಿಸುತ್ತದೆ ಮತ್ತು ಅವುಗಳನ್ನು ಸಣ್ಣ ಅಕ್ಷರಕ್ಕೆ ಪರಿವರ್ತಿಸುತ್ತದೆ, ಪದ ಕ್ರಮದಲ್ಲಿ ಅಥವಾ ದೊಡ್ಡಕ್ಷರದಲ್ಲಿನ ವ್ಯತ್ಯಾಸಗಳು ಫಲಿತಾಂಶಗಳ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ. ಲೆಕ್ಕಹಾಕಿದ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಒಂದೇ ರೀತಿಯ ತಂತಿಗಳನ್ನು ಕ್ಲಸ್ಟರಿಂಗ್ ಮಾಡುವಂತಹ ಮುಂದುವರಿದ ಕಾರ್ಯಗಳಿಗೆ ಅಡಿಪಾಯವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. 📊
ಮೊದಲ ಸ್ಕ್ರಿಪ್ಟ್ ಬಳಸುತ್ತದೆ ಲೆವೆನ್ಸ್ಟೀನ್ ಲೈಬ್ರರಿ, ಇದು ಒಂದು ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಇನ್ನೊಂದಕ್ಕೆ ಪರಿವರ್ತಿಸಲು ಅಗತ್ಯವಿರುವ ಸಂಪಾದನೆಗಳ ಸಂಖ್ಯೆಯನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಲು ಸಮರ್ಥ ಮಾರ್ಗವನ್ನು ಒದಗಿಸುತ್ತದೆ. ಈ ದೂರವನ್ನು ನಂತರ ಮ್ಯಾಟ್ರಿಕ್ಸ್ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ, ಇದು ಡೇಟಾಸೆಟ್ಗಳಲ್ಲಿ ಜೋಡಿಯಾಗಿ ಹೋಲಿಕೆಗಳನ್ನು ಪ್ರತಿನಿಧಿಸಲು ಸೂಕ್ತವಾದ ರಚನಾತ್ಮಕ ಸ್ವರೂಪವಾಗಿದೆ. ಬಳಕೆ NumPy ವಿಶೇಷವಾಗಿ ದೊಡ್ಡ ಡೇಟಾಸೆಟ್ಗಳೊಂದಿಗೆ ವ್ಯವಹರಿಸುವಾಗ ಈ ಮ್ಯಾಟ್ರಿಕ್ಸ್ನಲ್ಲಿನ ಕಾರ್ಯಾಚರಣೆಗಳು ವೇಗ ಮತ್ತು ಸ್ಕೇಲೆಬಿಲಿಟಿಗಾಗಿ ಆಪ್ಟಿಮೈಸ್ ಆಗಿರುವುದನ್ನು ಖಚಿತಪಡಿಸುತ್ತದೆ.
ಎರಡನೇ ಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ, ಕ್ಲಸ್ಟರಿಂಗ್ ಸ್ಟ್ರಿಂಗ್ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಗಮನವು ಬದಲಾಗುತ್ತದೆ ಅಫಿನಿಟಿ ಪ್ರಸರಣ ಅಲ್ಗಾರಿದಮ್. ಈ ತಂತ್ರವು ಋಣಾತ್ಮಕ Levenshtein ಅಂತರದಿಂದ ನಿರ್ಧರಿಸಲ್ಪಟ್ಟಂತೆ ಅವುಗಳ ಹೋಲಿಕೆಯ ಆಧಾರದ ಮೇಲೆ ತಂತಿಗಳನ್ನು ಗುಂಪು ಮಾಡುತ್ತದೆ. ದೂರವನ್ನು ಹೋಲಿಕೆಗಳಾಗಿ ಪರಿವರ್ತಿಸುವ ಮೂಲಕ, ಕ್ಲಸ್ಟರ್ಗಳ ಸಂಖ್ಯೆಯನ್ನು ಇನ್ಪುಟ್ನಂತೆ ಅಗತ್ಯವಿಲ್ಲದೇ ಅರ್ಥಪೂರ್ಣ ಕ್ಲಸ್ಟರ್ಗಳನ್ನು ರಚಿಸಲು ನಾವು ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತೇವೆ. ದೊಡ್ಡ ಪಠ್ಯ ಕಾರ್ಪೊರಾವನ್ನು ವರ್ಗೀಕರಿಸುವಂತಹ ಮೇಲ್ವಿಚಾರಣೆಯಿಲ್ಲದ ಕಲಿಕೆಯ ಕಾರ್ಯಗಳಿಗೆ ಈ ವಿಧಾನವು ವಿಶೇಷವಾಗಿ ಉಪಯುಕ್ತವಾಗಿದೆ. 🤖
ಸರಿಯಾಗಿರುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು, ಮೂರನೇ ಸ್ಕ್ರಿಪ್ಟ್ ಯುನಿಟ್ ಪರೀಕ್ಷೆಗಳನ್ನು ಪರಿಚಯಿಸುತ್ತದೆ. ಈ ಪರೀಕ್ಷೆಗಳು ಲೆಕ್ಕಾಚಾರ ಮಾಡಲಾದ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಉದ್ದೇಶಿತ ಪೂರ್ವ ಸಂಸ್ಕರಣಾ ನಿಯಮಗಳನ್ನು ನಿಖರವಾಗಿ ಪ್ರತಿಬಿಂಬಿಸುತ್ತದೆ ಮತ್ತು ಕ್ಲಸ್ಟರಿಂಗ್ ನಿರೀಕ್ಷಿತ ಗುಂಪುಗಳೊಂದಿಗೆ ಹೊಂದಾಣಿಕೆಯಾಗುತ್ತದೆ ಎಂದು ಮೌಲ್ಯೀಕರಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, "ತೆಳುವಾದ ಕಾಗದ" ಮತ್ತು "ಕಾಗದ ತೆಳುವಾದ" ನಂತಹ ತಂತಿಗಳು ಒಂದೇ ಕ್ಲಸ್ಟರ್ನಲ್ಲಿ ಗೋಚರಿಸಬೇಕು. ಈ ಸ್ಕ್ರಿಪ್ಟ್ಗಳ ಮಾಡ್ಯುಲರ್ ವಿನ್ಯಾಸವು ಅವುಗಳನ್ನು ಮರುಬಳಕೆ ಮಾಡಲು ಮತ್ತು ಪಠ್ಯ ವರ್ಗೀಕರಣ, ಡಾಕ್ಯುಮೆಂಟ್ ಡಿಪ್ಲಿಕೇಶನ್ ಅಥವಾ ಸರ್ಚ್ ಇಂಜಿನ್ ಆಪ್ಟಿಮೈಸೇಶನ್ನಂತಹ ವಿವಿಧ ಯೋಜನೆಗಳಲ್ಲಿ ಸಂಯೋಜಿಸಲು ಅನುಮತಿಸುತ್ತದೆ. 🚀
ಪೈಥಾನ್ನಲ್ಲಿ ಕೇಸ್-ಇನ್ಸೆನ್ಸಿಟಿವ್ ಲೆವೆನ್ಸ್ಟೈನ್ ಡಿಸ್ಟೆನ್ಸ್ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಅನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಲು ಪರ್ಯಾಯ ಮಾರ್ಗಗಳು
ಆಪ್ಟಿಮೈಸ್ಡ್ ಕಾರ್ಯಕ್ಷಮತೆಗಾಗಿ `Levenshtein` ಲೈಬ್ರರಿಯೊಂದಿಗೆ ಪೈಥಾನ್ ಅನ್ನು ಬಳಸುವುದು
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 ದೂರವನ್ನು ಬಳಸಿಕೊಂಡು ಕ್ಲಸ್ಟರಿಂಗ್ ತಂತಿಗಳು
ಅಫಿನಿಟಿ ಪ್ರಸರಣ ಕ್ಲಸ್ಟರಿಂಗ್ಗಾಗಿ ಪೈಥಾನ್ ಸ್ಕ್ರಿಪ್ಟ್ `ಸ್ಕಿಕಿಟ್-ಲರ್ನ್` ಅನ್ನು ಬಳಸಿಕೊಳ್ಳುತ್ತಿದೆ
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()
ಆಪ್ಟಿಮೈಸ್ಡ್ ಸ್ಟ್ರಿಂಗ್ ಹೋಲಿಕೆ ತಂತ್ರಗಳನ್ನು ವಿಸ್ತರಿಸಲಾಗುತ್ತಿದೆ
ಪಠ್ಯ ಮಾಹಿತಿಯ ದೊಡ್ಡ ಡೇಟಾಸೆಟ್ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ, ತಂತಿಗಳನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಹೋಲಿಸುವುದು ನಿರ್ಣಾಯಕವಾಗಿದೆ. ಮೂಲಭೂತ Levenshtein ದೂರದ ಲೆಕ್ಕಾಚಾರಗಳನ್ನು ಮೀರಿ, ಪೂರ್ವ ಸಂಸ್ಕರಣೆಯು ನಿಖರತೆಯನ್ನು ಖಾತ್ರಿಪಡಿಸುವಲ್ಲಿ ಪ್ರಮುಖ ಪಾತ್ರವನ್ನು ವಹಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ತಂತಿಗಳು ವಿರಾಮಚಿಹ್ನೆ, ಬಹು ಸ್ಥಳಗಳು ಅಥವಾ ಆಲ್ಫಾನ್ಯೂಮರಿಕ್ ಅಲ್ಲದ ಅಕ್ಷರಗಳನ್ನು ಒಳಗೊಂಡಿರುವ ಸನ್ನಿವೇಶಗಳನ್ನು ಪರಿಗಣಿಸಿ. ಈ ಪ್ರಕರಣಗಳನ್ನು ನಿರ್ವಹಿಸಲು, ಯಾವುದೇ ಹೋಲಿಕೆಯ ಅಲ್ಗಾರಿದಮ್ ಅನ್ನು ಅನ್ವಯಿಸುವ ಮೊದಲು ಅನಗತ್ಯ ಅಕ್ಷರಗಳನ್ನು ತೆಗೆದುಹಾಕುವುದು ಮತ್ತು ಅಂತರವನ್ನು ಸಾಮಾನ್ಯಗೊಳಿಸುವುದು ಅತ್ಯಗತ್ಯ. ಗ್ರಂಥಾಲಯಗಳು ಇಷ್ಟ ಮರು (ನಿಯಮಿತ ಅಭಿವ್ಯಕ್ತಿಗಳಿಗಾಗಿ) ಡೇಟಾವನ್ನು ಸಮರ್ಥವಾಗಿ ಸ್ವಚ್ಛಗೊಳಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ, ಪೂರ್ವ ಸಂಸ್ಕರಣಾ ಹಂತಗಳನ್ನು ವೇಗವಾಗಿ ಮತ್ತು ಹೆಚ್ಚು ಸ್ಥಿರಗೊಳಿಸುತ್ತದೆ. 🧹
ಮತ್ತೊಂದು ಮೌಲ್ಯಯುತವಾದ ಅಂಶವೆಂದರೆ ಸಂದರ್ಭದ ಆಧಾರದ ಮೇಲೆ ಹೋಲಿಕೆಯ ಅಂಕಗಳನ್ನು ತೂಕ ಮಾಡುವುದು. ಹುಡುಕಾಟ ಎಂಜಿನ್ ಪ್ರಶ್ನೆಗಳಿಗಾಗಿ ನೀವು ಬಳಕೆದಾರರ ಇನ್ಪುಟ್ ಅನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತಿದ್ದೀರಿ ಎಂದು ಭಾವಿಸೋಣ. "ಹೋಟೆಲ್" ಮತ್ತು "ಹೋಟೆಲ್ಗಳು" ನಂತಹ ಪದಗಳು ಸಾಂದರ್ಭಿಕವಾಗಿ ಹೋಲುತ್ತವೆ, ಅವುಗಳ ಲೆವೆನ್ಸ್ಟೈನ್ ಅಂತರವು ಚಿಕ್ಕದಾಗಿದ್ದರೂ ಸಹ. ಟೋಕನ್ ತೂಕವನ್ನು ಅನುಮತಿಸುವ ಅಲ್ಗಾರಿದಮ್ಗಳು, ಉದಾಹರಣೆಗೆ TF-IDF, ನಿರ್ದಿಷ್ಟ ಪದಗಳ ಆವರ್ತನ ಮತ್ತು ಪ್ರಾಮುಖ್ಯತೆಯನ್ನು ಸಂಯೋಜಿಸುವ ಮೂಲಕ ಹೆಚ್ಚಿನ ನಿಖರತೆಯನ್ನು ಒದಗಿಸಬಹುದು. ಈ ದೂರದ ಮಾಪನಗಳು ಮತ್ತು ಟರ್ಮ್ ವೇಟಿಂಗ್ ಸಂಯೋಜನೆಯು ಪಠ್ಯ ಕ್ಲಸ್ಟರಿಂಗ್ ಮತ್ತು ಡಿಡ್ಪ್ಲಿಕೇಶನ್ ಕಾರ್ಯಗಳಲ್ಲಿ ಹೆಚ್ಚು ಪ್ರಯೋಜನಕಾರಿಯಾಗಿದೆ.
ಅಂತಿಮವಾಗಿ, ದೊಡ್ಡ-ಪ್ರಮಾಣದ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಉತ್ತಮಗೊಳಿಸುವುದು ಮತ್ತೊಂದು ನಿರ್ಣಾಯಕ ಪರಿಗಣನೆಯಾಗಿದೆ. ಉದಾಹರಣೆಗೆ, ನೀವು ಸಾವಿರಾರು ತಂತಿಗಳೊಂದಿಗೆ ಡೇಟಾಸೆಟ್ ಅನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಬೇಕಾದರೆ, ಪೈಥಾನ್ನೊಂದಿಗೆ ಸಮಾನಾಂತರ ಪ್ರಕ್ರಿಯೆ ಬಹುಸಂಸ್ಕರಣೆ ಗ್ರಂಥಾಲಯವು ಗಣನೆಯ ಸಮಯವನ್ನು ಗಮನಾರ್ಹವಾಗಿ ಕಡಿಮೆ ಮಾಡುತ್ತದೆ. ಬಹು ಕೋರ್ಗಳಲ್ಲಿ ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಲೆಕ್ಕಾಚಾರಗಳನ್ನು ವಿಭಜಿಸುವ ಮೂಲಕ, ಕ್ಲಸ್ಟರಿಂಗ್ನಂತಹ ಸಂಪನ್ಮೂಲ-ತೀವ್ರ ಕಾರ್ಯಗಳು ಸಹ ಸ್ಕೇಲೆಬಲ್ ಮತ್ತು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಉಳಿಯುತ್ತವೆ ಎಂದು ನೀವು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬಹುದು. 🚀 ಈ ತಂತ್ರಗಳನ್ನು ಸಂಯೋಜಿಸುವುದರಿಂದ ಸ್ಟ್ರಿಂಗ್ ಹೋಲಿಕೆ ಮತ್ತು ಪಠ್ಯ ವಿಶ್ಲೇಷಣೆಗೆ ಹೆಚ್ಚು ದೃಢವಾದ ಪರಿಹಾರಗಳು ದೊರೆಯುತ್ತವೆ.
Levenshtein ದೂರ ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್ಗಳ ಕುರಿತು ಪ್ರಮುಖ ಪ್ರಶ್ನೆಗಳು
- Levenshtein ಅಂತರ ಎಂದರೇನು?
- Levenshtein ದೂರವು ಒಂದು ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಇನ್ನೊಂದಕ್ಕೆ ಪರಿವರ್ತಿಸಲು ಅಗತ್ಯವಿರುವ ಏಕ-ಅಕ್ಷರ ಸಂಪಾದನೆಗಳ (ಅಳವಡಿಕೆಗಳು, ಅಳಿಸುವಿಕೆಗಳು ಅಥವಾ ಪರ್ಯಾಯಗಳು) ಸಂಖ್ಯೆಯನ್ನು ಅಳೆಯುತ್ತದೆ.
- ನಾನು Levenshtein ದೂರ ಕೇಸ್-ಸೆನ್ಸಿಟಿವ್ ಅನ್ನು ಹೇಗೆ ಮಾಡಬಹುದು?
- ಇದರೊಂದಿಗೆ ಸ್ಟ್ರಿಂಗ್ಗಳನ್ನು ಪೂರ್ವ ಸಂಸ್ಕರಣೆ ಮಾಡುವ ಮೂಲಕ .lower(), ದೂರದ ಲೆಕ್ಕಾಚಾರವನ್ನು ಅನ್ವಯಿಸುವ ಮೊದಲು ನೀವು ಎಲ್ಲಾ ಪಠ್ಯವನ್ನು ಸಣ್ಣ ಅಕ್ಷರಕ್ಕೆ ಪರಿವರ್ತಿಸಬಹುದು.
- ವೇಗವಾದ Levenshtein ದೂರದ ಲೆಕ್ಕಾಚಾರಗಳಿಗಾಗಿ ನಾನು ಯಾವ ಲೈಬ್ರರಿಯನ್ನು ಬಳಸಬೇಕು?
- ದಿ python-Levenshtein ದೂರದ ಲೆಕ್ಕಾಚಾರಗಳಿಗಾಗಿ ಲೈಬ್ರರಿಯು ಹೆಚ್ಚು ಹೊಂದುವಂತೆ ಮತ್ತು FuzzyWuzzy ಗಿಂತ ವೇಗವಾಗಿರುತ್ತದೆ.
- ನಾನು ಲೆವೆನ್ಶ್ಟೈನ್ ದೂರದೊಂದಿಗೆ ಪದ ಕ್ರಮದ ಬದಲಾವಣೆಗಳನ್ನು ನಿಭಾಯಿಸಬಹುದೇ?
- ಹೌದು, ನೀವು ಪದಗಳನ್ನು ವರ್ಣಮಾಲೆಯಂತೆ ವಿಂಗಡಿಸಬಹುದು " ".join(sorted(string.split())) ತಂತಿಗಳನ್ನು ಹೋಲಿಸುವ ಮೊದಲು.
- ಅವುಗಳ ಹೋಲಿಕೆಯ ಆಧಾರದ ಮೇಲೆ ನಾನು ತಂತಿಗಳನ್ನು ಹೇಗೆ ಕ್ಲಸ್ಟರ್ ಮಾಡುವುದು?
- ನೀವು ಬಳಸಬಹುದು scikit-learn's AffinityPropagation ಲೆವೆನ್ಸ್ಟೈನ್ ದೂರದಿಂದ ಪಡೆದ ಹೋಲಿಕೆಯ ಮ್ಯಾಟ್ರಿಕ್ಸ್ನೊಂದಿಗೆ ಅಲ್ಗಾರಿದಮ್.
ಸಮರ್ಥ ಸ್ಟ್ರಿಂಗ್ ಮ್ಯಾಚಿಂಗ್ ಮತ್ತು ಕ್ಲಸ್ಟರಿಂಗ್
ಪ್ರಸ್ತುತಪಡಿಸಿದ ಪರಿಹಾರಗಳು ಆಪ್ಟಿಮೈಸ್ಡ್ ಲೈಬ್ರರಿಗಳೊಂದಿಗೆ ಪ್ರಿಪ್ರೊಸೆಸಿಂಗ್ ತಂತ್ರಗಳನ್ನು ಹೇಗೆ ಸಂಯೋಜಿಸುವುದು ಪಠ್ಯ ವಿಶ್ಲೇಷಣೆಯಲ್ಲಿ ನೈಜ-ಪ್ರಪಂಚದ ಸಮಸ್ಯೆಗಳನ್ನು ಪರಿಹರಿಸಬಹುದು ಎಂಬುದನ್ನು ಎತ್ತಿ ತೋರಿಸುತ್ತದೆ. ಕೇಸ್-ಇನ್ಸೆನ್ಸಿಟಿವಿಟಿ ಮತ್ತು ವರ್ಡ್ ಆರ್ಡರ್ ಅನ್ನು ನಿರ್ವಹಿಸುವುದು ಸರ್ಚ್ ಇಂಜಿನ್ಗಳು ಮತ್ತು ಡಾಕ್ಯುಮೆಂಟ್ ಡಿಡ್ಪ್ಲಿಕೇಶನ್ನಂತಹ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಮನಬಂದಂತೆ ಕೆಲಸ ಮಾಡುತ್ತದೆ. ✨
ಮುಂತಾದ ಪರಿಕರಗಳನ್ನು ಸದುಪಯೋಗಪಡಿಸಿಕೊಳ್ಳುವ ಮೂಲಕ ಲೆವೆನ್ಸ್ಟೀನ್ ಮತ್ತು ಕ್ಲಸ್ಟರಿಂಗ್ ಅಲ್ಗಾರಿದಮ್ಗಳು, ಸಂಕೀರ್ಣ ಡೇಟಾಸೆಟ್ಗಳನ್ನು ಸಹ ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಬಹುದು. ಈ ವಿಧಾನಗಳು ಪೈಥಾನ್ನ ಬಹುಮುಖತೆಯು ಡೆವಲಪರ್ಗಳಿಗೆ ನೈಸರ್ಗಿಕ ಭಾಷಾ ಸಂಸ್ಕರಣೆಯಲ್ಲಿನ ಸವಾಲುಗಳನ್ನು ನಿಖರ ಮತ್ತು ವೇಗದೊಂದಿಗೆ ಹೇಗೆ ನಿಭಾಯಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ತೋರಿಸುತ್ತದೆ. 🚀
ಆಪ್ಟಿಮೈಸ್ಡ್ ಪಠ್ಯ ಹೊಂದಾಣಿಕೆಗಾಗಿ ಮೂಲಗಳು ಮತ್ತು ಉಲ್ಲೇಖಗಳು
- ಬಗ್ಗೆ ಮಾಹಿತಿ Levenshtein ಗ್ರಂಥಾಲಯ ಅದರ ಅಧಿಕೃತ PyPI ದಾಖಲಾತಿಯಿಂದ ಉಲ್ಲೇಖಿಸಲಾಗಿದೆ.
- ಬಗ್ಗೆ ವಿವರಗಳು ಅಫಿನಿಟಿ ಪ್ರಸರಣ ಸ್ಕಿಕಿಟ್-ಲರ್ನ್ ಅಧಿಕೃತ ದಾಖಲಾತಿಯಿಂದ ಪಡೆಯಲಾಗಿದೆ.
- ಬಳಕೆ NumPy ಮ್ಯಾಟ್ರಿಕ್ಸ್ ಕಾರ್ಯಾಚರಣೆಗಳಿಗಾಗಿ NumPy ದಾಖಲಾತಿಯಲ್ಲಿ ಒದಗಿಸಲಾದ ಮಾರ್ಗಸೂಚಿಗಳನ್ನು ಆಧರಿಸಿದೆ.
- ಪಠ್ಯ ಪೂರ್ವ ಸಂಸ್ಕರಣೆಗೆ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳಲಾಗಿದೆ ಪೈಥಾನ್ ನಿಯಮಿತ ಅಭಿವ್ಯಕ್ತಿಗಳ ದಾಖಲೆ .