ಜಾವಾದಲ್ಲಿ ಸ್ಟ್ರೀಮ್ಲೈನಿಂಗ್ ವರ್ಡ್ ಫ್ರೀಕ್ವೆನ್ಸಿ ಅನಾಲಿಸಿಸ್
Java 8 ಪ್ರಬಲ ಸ್ಟ್ರೀಮ್ಗಳ API ಅನ್ನು ಪರಿಚಯಿಸಿತು, ಡೆವಲಪರ್ಗಳು ಸಂಗ್ರಹಣೆಗಳು ಮತ್ತು ಡೇಟಾ ಸಂಸ್ಕರಣೆಯನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸುತ್ತಾರೆ ಎಂಬುದನ್ನು ಕ್ರಾಂತಿಗೊಳಿಸಿತು. ಈ ವೈಶಿಷ್ಟ್ಯದ ಅತ್ಯಂತ ಪ್ರಾಯೋಗಿಕ ಅನ್ವಯಗಳೆಂದರೆ ವಾಕ್ಯಗಳ ಗುಂಪಿನಲ್ಲಿ ಪದ ಆವರ್ತನಗಳನ್ನು ಎಣಿಸುವುದು. 🌟 ನೀವು ಲಾಗ್ ಫೈಲ್ಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುತ್ತಿರಲಿ ಅಥವಾ ಪಠ್ಯ ಡೇಟಾವನ್ನು ವಿಶ್ಲೇಷಿಸುತ್ತಿರಲಿ, ಪದದ ಘಟನೆಗಳನ್ನು ಸಮರ್ಥವಾಗಿ ಎಣಿಸುವ ಸಾಮರ್ಥ್ಯವು ಅಮೂಲ್ಯವಾದ ಕೌಶಲ್ಯವಾಗಿದೆ.
ನೀವು ವಾಕ್ಯಗಳ ಗುಂಪನ್ನು ಹೊಂದಿದ್ದೀರಿ ಎಂದು ಕಲ್ಪಿಸಿಕೊಳ್ಳಿ, ಪ್ರತಿಯೊಂದೂ ವಿಭಿನ್ನ ಪ್ರಮಾಣದ ವೈಟ್ಸ್ಪೇಸ್ ಮತ್ತು ಫಾರ್ಮ್ಯಾಟಿಂಗ್ ಕ್ವಿರ್ಕ್ಗಳನ್ನು ಹೊಂದಿದೆ. ಅಂತರವನ್ನು ಲೆಕ್ಕಿಸದೆಯೇ "ಸ್ಟ್ರಿಂಗ್" ಪದವನ್ನು ಸ್ಥಿರವಾಗಿ ಎಣಿಸಲಾಗಿದೆ ಎಂದು ನೀವು ಹೇಗೆ ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುತ್ತೀರಿ? ಇದನ್ನು ಪರಿಹರಿಸುವಲ್ಲಿ ಸ್ಟ್ರೀಮ್ಗಳ API ವಿಧಾನಗಳನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು ಮತ್ತು ಜಾವಾದ ಕ್ರಿಯಾತ್ಮಕ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಪರಿಕರಗಳನ್ನು ಮಾಸ್ಟರಿಂಗ್ ಮಾಡುವುದು ಒಳಗೊಂಡಿರುತ್ತದೆ.
ಅನೇಕ ಅಭಿವರ್ಧಕರು ನೇರವಾದ ವಿಧಾನಗಳೊಂದಿಗೆ ಪ್ರಾರಂಭಿಸುತ್ತಾರೆ - ತಂತಿಗಳನ್ನು ವಿಭಜಿಸುವುದು ಮತ್ತು ಅರೇಗಳ ಮೂಲಕ ಹಸ್ತಚಾಲಿತವಾಗಿ ಪುನರಾವರ್ತಿಸುವುದು. ಕ್ರಿಯಾತ್ಮಕವಾಗಿರುವಾಗ, ಈ ವಿಧಾನಗಳು ಮೌಖಿಕ ಮತ್ತು ನಿರ್ವಹಿಸಲು ಕಷ್ಟವಾಗಬಹುದು. ಒಳ್ಳೆಯ ಸುದ್ದಿ ಏನೆಂದರೆ, Java 8 ರ `ಸಂಗ್ರಾಹಕರು' ಈ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಸಂಕ್ಷಿಪ್ತ ಮತ್ತು ಸೊಗಸಾದ ಪರಿಹಾರವಾಗಿ ಸರಳೀಕರಿಸಬಹುದು. 💡
ಈ ಮಾರ್ಗದರ್ಶಿಯಲ್ಲಿ, ನಾವು ಸ್ಟ್ರೀಮ್ಗಳ API ಅನ್ನು ಬಳಸಿಕೊಂಡು ಪದ ಆವರ್ತನ ಎಣಿಕೆಯನ್ನು ಆಪ್ಟಿಮೈಜ್ ಮಾಡುವುದರ ಮೂಲಕ ನಡೆಯುತ್ತೇವೆ. ಹೆಚ್ಚುವರಿ ಸ್ಥಳಗಳಂತಹ ಸಾಮಾನ್ಯ ಮೋಸಗಳಿಂದ ಪ್ರಾಯೋಗಿಕ ಉದಾಹರಣೆಗಳವರೆಗೆ, ನಿಮ್ಮ ಜಾವಾ ಕೋಡ್ ಅನ್ನು ಹೇಗೆ ಕ್ಲೀನರ್ ಮತ್ತು ಹೆಚ್ಚು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಮಾಡುವುದು ಎಂಬುದನ್ನು ನೀವು ಕಲಿಯುವಿರಿ. ಧುಮುಕೋಣ! 🚀
ಆಜ್ಞೆ | ಬಳಕೆಯ ಉದಾಹರಣೆ |
---|---|
flatMap | ಅನೇಕ ಸ್ಟ್ರೀಮ್ಗಳನ್ನು ಒಂದೇ ಸ್ಟ್ರೀಮ್ಗೆ ಚಪ್ಪಟೆಗೊಳಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ. ಈ ಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ, ಇದು ಪ್ರತಿ ವಾಕ್ಯವನ್ನು ವೈಟ್ಸ್ಪೇಸ್ನಲ್ಲಿ ವಿಭಜಿಸುವ ಮೂಲಕ ಪದಗಳ ಸ್ಟ್ರೀಮ್ ಆಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ. |
split("\\s+") | ಈ regex-ಆಧಾರಿತ ಸ್ಪ್ಲಿಟ್ ಆಜ್ಞೆಯು ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ವೈಟ್ಸ್ಪೇಸ್ ಅಕ್ಷರಗಳಿಂದ ವಿಭಜಿಸುತ್ತದೆ, ಪದಗಳ ನಡುವಿನ ಹೆಚ್ಚುವರಿ ಸ್ಥಳಗಳನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ನಿರ್ವಹಿಸುತ್ತದೆ. |
filter(word -> !word.isEmpty()) | ಅನಿಯಮಿತ ಅಂತರ ಅಥವಾ ಟ್ರೇಲಿಂಗ್ ವೈಟ್ಸ್ಪೇಸ್ನಿಂದ ಉಂಟಾಗುವ ಖಾಲಿ ತಂತಿಗಳನ್ನು ನಿವಾರಿಸುತ್ತದೆ, ನಿಖರವಾದ ಪದ ಎಣಿಕೆಯನ್ನು ಖಾತ್ರಿಗೊಳಿಸುತ್ತದೆ. |
map(String::trim) | ಪ್ರತಿ ಪದದಿಂದ ಪ್ರಮುಖ ಮತ್ತು ಹಿಂದುಳಿದ ಜಾಗವನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ, ಹೆಚ್ಚು ವಿಶ್ವಾಸಾರ್ಹ ಪ್ರಕ್ರಿಯೆಗಾಗಿ ಇನ್ಪುಟ್ ಅನ್ನು ಪ್ರಮಾಣೀಕರಿಸುತ್ತದೆ. |
Collectors.groupingBy | ವರ್ಗೀಕರಣ ಕಾರ್ಯದ ಮೂಲಕ ಅಂಶಗಳನ್ನು ಗುಂಪುಗಳು. ಈ ಸಂದರ್ಭದಲ್ಲಿ, ಆವರ್ತನ ಎಣಿಕೆಗಾಗಿ ಇದು ಪದಗಳನ್ನು ಅವುಗಳ ನಿಖರವಾದ ಮೌಲ್ಯದಿಂದ ಗುಂಪು ಮಾಡುತ್ತದೆ. |
Collectors.counting | ಕಲೆಕ್ಟರ್ಸ್.ಗ್ರೂಪಿಂಗ್ಬೈ ರಚಿಸಿದ ಪ್ರತಿ ಗುಂಪಿನ ಘಟನೆಗಳ ಸಂಖ್ಯೆಯನ್ನು ಎಣಿಕೆ ಮಾಡುತ್ತದೆ, ಇದು ಪದ ಆವರ್ತನಗಳನ್ನು ಒದಗಿಸುತ್ತದೆ. |
String.join | ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಡಿಲಿಮಿಟರ್ನೊಂದಿಗೆ ಒಂದೇ ಸ್ಟ್ರಿಂಗ್ಗೆ ಸ್ಟ್ರಿಂಗ್ಗಳ ಒಂದು ಶ್ರೇಣಿಯನ್ನು ಸಂಯೋಜಿಸುತ್ತದೆ. ಬಹು-ಸಾಲಿನ ಇನ್ಪುಟ್ ಅನ್ನು ನಿರ್ವಹಿಸಲು ಉಪಯುಕ್ತವಾಗಿದೆ. |
Function.identity | ಅದರ ಇನ್ಪುಟ್ ಆರ್ಗ್ಯುಮೆಂಟ್ ಅನ್ನು ಹಾಗೆಯೇ ಹಿಂದಿರುಗಿಸುವ ಉಪಯುಕ್ತತೆಯ ಕಾರ್ಯ. Collectors.groupingBy ನಲ್ಲಿ ವರ್ಗೀಕರಣ ಕಾರ್ಯವಾಗಿ ಇಲ್ಲಿ ಬಳಸಲಾಗಿದೆ. |
assertEquals | ಎರಡು ಮೌಲ್ಯಗಳು ಸಮಾನವಾಗಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸುವ ಜುನಿಟ್ ಪರೀಕ್ಷಾ ವಿಧಾನ. ಪದ ಆವರ್ತನ ಔಟ್ಪುಟ್ ನಿರೀಕ್ಷಿತ ಫಲಿತಾಂಶಗಳಿಗೆ ಹೊಂದಿಕೆಯಾಗುತ್ತದೆ ಎಂಬುದನ್ನು ದೃಢೀಕರಿಸುತ್ತದೆ. |
Arrays.stream | ರಚನೆಯಿಂದ ಸ್ಟ್ರೀಮ್ ಅನ್ನು ರಚಿಸುತ್ತದೆ. ಕ್ರಿಯಾತ್ಮಕ ಪ್ರಕ್ರಿಯೆಗಾಗಿ ಇನ್ಪುಟ್ ಸ್ಟ್ರಿಂಗ್ ಅರೇ ಅನ್ನು ಸ್ಟ್ರೀಮ್ ಆಗಿ ಪರಿವರ್ತಿಸಲು ಇಲ್ಲಿ ಬಳಸಲಾಗಿದೆ. |
ಜಾವಾ ಸ್ಟ್ರೀಮ್ಗಳೊಂದಿಗೆ ವರ್ಡ್ ಫ್ರೀಕ್ವೆನ್ಸಿ ಅನಾಲಿಸಿಸ್ ಅನ್ನು ಉತ್ತಮಗೊಳಿಸುವುದು
ಮೇಲಿನ ಸ್ಕ್ರಿಪ್ಟ್ಗಳನ್ನು ಶಕ್ತಿಯುತವಾಗಿ ಬಳಸಿಕೊಂಡು ವಾಕ್ಯಗಳ ಶ್ರೇಣಿಯಲ್ಲಿ ಪದ ಆವರ್ತನಗಳನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಎಣಿಸಲು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ ಜಾವಾ 8 ಸ್ಟ್ರೀಮ್ಗಳ API. ಲಾಗ್ಗಳು ಅಥವಾ ಡಾಕ್ಯುಮೆಂಟ್ ವಿಶ್ಲೇಷಣೆಯಂತಹ ಪಠ್ಯ ಡೇಟಾವನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಇದು ವಿಶೇಷವಾಗಿ ಉಪಯುಕ್ತವಾಗಿದೆ, ಅಲ್ಲಿ ವೈಟ್ಸ್ಪೇಸ್ ಮತ್ತು ಕೇಸ್ ಸೆನ್ಸಿಟಿವಿಟಿಯ ಸ್ಥಿರ ನಿರ್ವಹಣೆ ಅತ್ಯಗತ್ಯ. ಸ್ಟ್ರಿಂಗ್ಗಳ ಇನ್ಪುಟ್ ಶ್ರೇಣಿಯನ್ನು ಪದಗಳ ಏಕೀಕೃತ ಸ್ಟ್ರೀಮ್ ಆಗಿ ಪರಿವರ್ತಿಸುವ ಮೂಲಕ ಪ್ರಾಥಮಿಕ ಹರಿವು ಪ್ರಾರಂಭವಾಗುತ್ತದೆ. ಅನಿಯಮಿತ ಅಂತರವನ್ನು ತೆಗೆದುಹಾಕುವಾಗ ಪ್ರತಿ ವಾಕ್ಯವನ್ನು ಪ್ರತ್ಯೇಕ ಪದಗಳಾಗಿ ವಿಭಜಿಸುವ `ಫ್ಲಾಟ್ಮ್ಯಾಪ್` ವಿಧಾನವನ್ನು ಬಳಸಿಕೊಂಡು ಇದನ್ನು ಸಾಧಿಸಲಾಗುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಇನ್ಪುಟ್ ಹೆಚ್ಚುವರಿ ಸ್ಥಳಗಳನ್ನು ಹೊಂದಿದ್ದರೆ, ಇವುಗಳನ್ನು ಹೆಚ್ಚುವರಿ ಕೋಡ್ ಇಲ್ಲದೆ ಆಕರ್ಷಕವಾಗಿ ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ, ಕಾರ್ಯವನ್ನು ಸರಳಗೊಳಿಸುತ್ತದೆ. 😊
ಸ್ಕ್ರಿಪ್ಟ್ಗಳ ಒಂದು ಪ್ರಮುಖ ವೈಶಿಷ್ಟ್ಯವೆಂದರೆ ಖಾಲಿ ಸ್ಟ್ರಿಂಗ್ಗಳನ್ನು ಹೊರತುಪಡಿಸಿ `ಫಿಲ್ಟರ್' ಅನ್ನು ಬಳಸುವುದು, ಇದು ಬಹು ಸ್ಥಳಗಳೊಂದಿಗೆ ವಾಕ್ಯಗಳನ್ನು ವಿಭಜಿಸುವ ಪರಿಣಾಮವಾಗಿರಬಹುದು. ನಂತರ, ಯಾವುದೇ ಉಳಿದಿರುವ ಪ್ರಮುಖ ಅಥವಾ ಹಿಂದುಳಿದ ಸ್ಥಳಗಳನ್ನು ತೆಗೆದುಹಾಕುವ ಮೂಲಕ ಪದಗಳ ಸ್ವರೂಪವನ್ನು ಪ್ರಮಾಣೀಕರಿಸಲು `ಮ್ಯಾಪ್(ಸ್ಟ್ರಿಂಗ್:: ಟ್ರಿಮ್)` ಅನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ. ಇದು "ಮಾದರಿ" ಮತ್ತು "ಮಾದರಿ" ಯಂತಹ ಪದಗಳನ್ನು ಒಂದೇ ರೀತಿಯಲ್ಲಿ ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ. ಈ ವಿಧಾನಗಳ ಸಂಯೋಜನೆಯು ಪಠ್ಯ ಪ್ರಕ್ರಿಯೆಗೆ ಸುವ್ಯವಸ್ಥಿತ ಮತ್ತು ವಿಶ್ವಾಸಾರ್ಹ ಕಾರ್ಯವಿಧಾನವನ್ನು ಒದಗಿಸುತ್ತದೆ, ವಿಶೇಷವಾಗಿ ಅನಿರೀಕ್ಷಿತ ಇನ್ಪುಟ್ ಡೇಟಾದೊಂದಿಗೆ ವ್ಯವಹರಿಸುವಾಗ.
ಪದಗಳನ್ನು ಗುಂಪು ಮಾಡುವುದು ಮತ್ತು ಎಣಿಸುವುದು `Collectors.groupingBy` ಮತ್ತು `Collectors.counting` ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ. ಈ ಎರಡು ವಿಧಾನಗಳು ನಕ್ಷೆಯನ್ನು ರಚಿಸಲು ಒಟ್ಟಿಗೆ ಕೆಲಸ ಮಾಡುತ್ತವೆ, ಅಲ್ಲಿ ಪ್ರತಿಯೊಂದು ಅನನ್ಯ ಪದವು ಒಂದು ಕೀಲಿಯಾಗಿದೆ ಮತ್ತು ಅದರ ಆವರ್ತನವು ಮೌಲ್ಯವಾಗಿರುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, "ಇದು ಮಾದರಿ ಸ್ಟ್ರಿಂಗ್" ಇನ್ಪುಟ್ನಲ್ಲಿ, "ಮಾದರಿ" ಪದವು ಇನ್ಪುಟ್ ವಾಕ್ಯಗಳಾದ್ಯಂತ ಅನೇಕ ಬಾರಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತದೆ. ಈ ವಿಧಾನವು ಅದರ ಒಟ್ಟು ಘಟನೆಗಳನ್ನು ಸೆರೆಹಿಡಿಯಲಾಗಿದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ, ಇದು ನಿಖರವಾದ ಆವರ್ತನ ಎಣಿಕೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ. `Function.identity()` ಅನ್ನು ವರ್ಗೀಕರಣವಾಗಿ ಬಳಸುವ ಮೂಲಕ, ಫಲಿತಾಂಶದ ನಕ್ಷೆಯಲ್ಲಿ ಪದವನ್ನು ಕೀಲಿಯಾಗಿ ಬಳಸಲಾಗುತ್ತದೆ.
ಅಂತಿಮವಾಗಿ, ಸ್ಕ್ರಿಪ್ಟ್ಗಳು ಮಾಡ್ಯುಲಾರಿಟಿ ಮತ್ತು ಮರುಬಳಕೆಯನ್ನು ಒಳಗೊಂಡಿರುತ್ತವೆ, ಇದು `ಕ್ಯಾಲ್ಕುಲೇಟ್ ವರ್ಡ್ಫ್ರೀಕ್ವೆನ್ಸಿಸ್' ನಂತಹ ಉಪಯುಕ್ತತೆಯ ವಿಧಾನಗಳನ್ನು ಪರಿಚಯಿಸುತ್ತದೆ, ತರ್ಕವನ್ನು ನಿರ್ವಹಿಸಲು ಮತ್ತು ದೊಡ್ಡ ಯೋಜನೆಗಳಲ್ಲಿ ಸಂಯೋಜಿಸಲು ಸುಲಭವಾಗುತ್ತದೆ. ಯುನಿಟ್ ಪರೀಕ್ಷೆಗಳ ಸೇರ್ಪಡೆಯು ಪರಿಹಾರವು ವಿವಿಧ ಒಳಹರಿವುಗಳಲ್ಲಿ ನಿರೀಕ್ಷಿಸಿದಂತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ಮತ್ತಷ್ಟು ಮೌಲ್ಯೀಕರಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಟ್ರೇಲಿಂಗ್ ಸ್ಪೇಸ್ಗಳು ಅಥವಾ ಬದಲಾಗುತ್ತಿರುವ ಪದದ ದೊಡ್ಡಕ್ಷರಗಳಂತಹ ಸಾಮಾನ್ಯ ಸಮಸ್ಯೆಗಳು ಫಲಿತಾಂಶಗಳ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುವುದಿಲ್ಲ ಎಂದು ಪರೀಕ್ಷಾ ಪ್ರಕರಣಗಳು ಪರಿಶೀಲಿಸುತ್ತವೆ. ಈ ಮಟ್ಟದ ದೃಢತೆಯು ಸ್ಕ್ರಿಪ್ಟ್ಗಳನ್ನು ನೈಜ-ಪ್ರಪಂಚದ ಸನ್ನಿವೇಶಗಳಿಗೆ ಸೂಕ್ತವಾಗಿಸುತ್ತದೆ, ಉದಾಹರಣೆಗೆ ಬಳಕೆದಾರ-ರಚಿಸಿದ ವಿಷಯವನ್ನು ವಿಶ್ಲೇಷಿಸುವುದು ಅಥವಾ ಹುಡುಕಾಟ ಲಾಗ್ಗಳನ್ನು ಪಾರ್ಸಿಂಗ್ ಮಾಡುವುದು. 🚀
ಜಾವಾ 8 ಸ್ಟ್ರೀಮ್ಗಳ API ನೊಂದಿಗೆ ಪದಗಳ ಆವರ್ತನಗಳನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಎಣಿಸುವುದು
ಈ ಪರಿಹಾರವು ಕ್ರಿಯಾತ್ಮಕ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಮತ್ತು ಪಠ್ಯ ವಿಶ್ಲೇಷಣೆಗಾಗಿ Java 8 ಸ್ಟ್ರೀಮ್ಗಳ API ಅನ್ನು ಬಳಸುತ್ತದೆ.
import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class WordFrequency {
public static void main(String[] args) {
// Input array of sentences
String[] input = {
"This is a sample string",
" string ",
"Another sample string",
"This is not a sample string"
};
// Stream pipeline for word frequency calculation
Map<String, Long> wordFrequencies = Arrays.stream(input)
.flatMap(sentence -> Arrays.stream(sentence.split("\\s+")))
.filter(word -> !word.isEmpty())
.map(String::trim)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
// Output the result
System.out.println(wordFrequencies);
}
}
ಮಾಡ್ಯುಲಾರಿಟಿಗಾಗಿ ಕಸ್ಟಮ್ ಯುಟಿಲಿಟಿ ವಿಧಾನಗಳನ್ನು ಬಳಸುವುದು
ಈ ಪರಿಹಾರವು ಮರುಬಳಕೆಗಾಗಿ ಉಪಯುಕ್ತತೆಯ ವಿಧಾನಗಳನ್ನು ಪರಿಚಯಿಸುವ ಮೂಲಕ ಮಾಡ್ಯುಲರ್ ಕೋಡ್ ಅನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ.
import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class WordFrequencyWithUtils {
public static void main(String[] args) {
String[] input = {
"This is a sample string",
" string ",
"Another sample string",
"This is not a sample string"
};
Map<String, Long> result = calculateWordFrequencies(input);
System.out.println(result);
}
public static Map<String, Long> calculateWordFrequencies(String[] sentences) {
return Arrays.stream(sentences)
.flatMap(sentence -> Arrays.stream(sentence.split("\\s+")))
.filter(word -> !word.isEmpty())
.map(String::trim)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
}
}
ವರ್ಡ್ ಫ್ರೀಕ್ವೆನ್ಸಿ ಲಾಜಿಕ್ ಅನ್ನು ಪರೀಕ್ಷಿಸುವ ಘಟಕ
ಈ ವಿಧಾನವು ಕಾರ್ಯವನ್ನು ಮೌಲ್ಯೀಕರಿಸಲು ಜುನಿಟ್ 5 ಅನ್ನು ಬಳಸುವ ಘಟಕ ಪರೀಕ್ಷೆಗಳನ್ನು ಒಳಗೊಂಡಿದೆ.
import org.junit.jupiter.api.Test;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.*;
public class WordFrequencyTest {
@Test
void testCalculateWordFrequencies() {
String[] input = {
"This is a sample string",
" string ",
"Another sample string",
"This is not a sample string"
};
Map<String, Long> result = WordFrequencyWithUtils.calculateWordFrequencies(input);
assertEquals(2, result.get("This"));
assertEquals(4, result.get("string"));
assertEquals(3, result.get("sample"));
assertEquals(1, result.get("not"));
}
}
ಸುಧಾರಿತ ಜಾವಾ ತಂತ್ರಗಳೊಂದಿಗೆ ಪಠ್ಯ ಸಂಸ್ಕರಣೆ ಮಾಸ್ಟರಿಂಗ್
ಪಠ್ಯ ಡೇಟಾವನ್ನು ವಿಶ್ಲೇಷಿಸುವಾಗ, ಕೇಸ್ ಸೆನ್ಸಿಟಿವಿಟಿ ಮತ್ತು ಸಾಮಾನ್ಯೀಕರಣವನ್ನು ನಿರ್ವಹಿಸುವುದು ನಿರ್ಣಾಯಕವಾಗಿದೆ. ಜಾವಾದಲ್ಲಿ, ದಿ ಸ್ಟ್ರೀಮ್ಗಳ API ಕನಿಷ್ಠ ಪ್ರಯತ್ನದೊಂದಿಗೆ ಈ ಸವಾಲುಗಳನ್ನು ನಿಭಾಯಿಸಲು ನಮ್ಯತೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ವಿಧಾನಗಳನ್ನು ಅನ್ವಯಿಸುವ ಮೂಲಕ map(String::toLowerCase), "ಮಾದರಿ" ಮತ್ತು "ಮಾದರಿ" ನಂತಹ ಪದಗಳನ್ನು ಒಂದೇ ರೀತಿಯಲ್ಲಿ ಪರಿಗಣಿಸಲಾಗಿದೆ, ಸ್ಥಿರತೆಯನ್ನು ಸುಧಾರಿಸುತ್ತದೆ ಎಂದು ನೀವು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬಹುದು. ಬಳಕೆದಾರರು ಕೇಸ್ ಸಂಪ್ರದಾಯಗಳಿಗೆ ಬದ್ಧವಾಗಿರದಿರುವ ಹುಡುಕಾಟ-ಸಂಬಂಧಿತ ಅಪ್ಲಿಕೇಶನ್ಗಳಲ್ಲಿ ಇದು ವಿಶೇಷವಾಗಿ ಉಪಯುಕ್ತವಾಗಿದೆ.
ಮತ್ತೊಂದು ಪ್ರಮುಖ ಪರಿಗಣನೆಯು ವಿರಾಮಚಿಹ್ನೆಯಾಗಿದೆ. "ಸ್ಟ್ರಿಂಗ್," ಮತ್ತು "ಸ್ಟ್ರಿಂಗ್" ನಂತಹ ಪದಗಳನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ವಿರಾಮಚಿಹ್ನೆಯನ್ನು ತೆಗೆದುಹಾಕದಿದ್ದರೆ ವಿಭಿನ್ನ ಟೋಕನ್ಗಳಾಗಿ ಪರಿಗಣಿಸಲಾಗುತ್ತದೆ. ಬಳಸುತ್ತಿದೆ replaceAll("[^a-zA-Z0-9 ]", ""), ಪಠ್ಯವನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವ ಮೊದಲು ನೀವು ಅನಗತ್ಯ ಅಕ್ಷರಗಳನ್ನು ತೆಗೆದುಹಾಕಬಹುದು. ಬಳಕೆದಾರರ ಕಾಮೆಂಟ್ಗಳು ಅಥವಾ ವಿಮರ್ಶೆಗಳಂತಹ ನೈಜ-ಪ್ರಪಂಚದ ಡೇಟಾಸೆಟ್ಗಳಿಗೆ ಇದು ನಿರ್ಣಾಯಕವಾಗಿದೆ, ಅಲ್ಲಿ ವಿರಾಮಚಿಹ್ನೆಯು ಸಾಮಾನ್ಯವಾಗಿದೆ. ಈ ತಂತ್ರಗಳನ್ನು ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಸಾಧನಗಳೊಂದಿಗೆ ಸಂಯೋಜಿಸುವ ಮೂಲಕ Collectors.groupingBy, ನೀವು ಕ್ಲೀನ್, ಸಾಮಾನ್ಯೀಕರಿಸಿದ ಡೇಟಾಸೆಟ್ ಅನ್ನು ರಚಿಸಬಹುದು.
ಕೊನೆಯದಾಗಿ, ದೊಡ್ಡ ಡೇಟಾಸೆಟ್ಗಳೊಂದಿಗೆ ಕೆಲಸ ಮಾಡುವಾಗ ಕಾರ್ಯಕ್ಷಮತೆಗಾಗಿ ಆಪ್ಟಿಮೈಜ್ ಮಾಡುವುದು ಮುಖ್ಯವಾಗಿದೆ. ಬಳಸುತ್ತಿದೆ parallelStream() ಬಹು ಥ್ರೆಡ್ಗಳಾದ್ಯಂತ ಡೇಟಾವನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಅನುಮತಿಸುತ್ತದೆ, ರನ್ಟೈಮ್ ಅನ್ನು ಗಮನಾರ್ಹವಾಗಿ ಕಡಿಮೆ ಮಾಡುತ್ತದೆ. ಲಕ್ಷಾಂತರ ಪದಗಳೊಂದಿಗೆ ವ್ಯವಹರಿಸುವ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ಇದು ಗೇಮ್ ಚೇಂಜರ್ ಆಗಿರಬಹುದು. ಈ ವರ್ಧನೆಗಳು, ಯೂನಿಟ್ ಪರೀಕ್ಷೆಯೊಂದಿಗೆ ಸಂಯೋಜಿಸಿದಾಗ, ಪರಿಹಾರವನ್ನು ದೃಢವಾಗಿ ಮತ್ತು ಉತ್ಪಾದನಾ ಪರಿಸರಕ್ಕೆ ಸ್ಕೇಲೆಬಲ್ ಮಾಡುತ್ತದೆ, ಇದು ವೈವಿಧ್ಯಮಯ ಪರಿಸ್ಥಿತಿಗಳಲ್ಲಿ ಉತ್ತಮವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ. 🚀
ಜಾವಾ ವರ್ಡ್ ಫ್ರೀಕ್ವೆನ್ಸಿ ಅನಾಲಿಸಿಸ್ ಬಗ್ಗೆ ಸಾಮಾನ್ಯ ಪ್ರಶ್ನೆಗಳು
- ಪದ ಆವರ್ತನ ವಿಶ್ಲೇಷಣೆಯಲ್ಲಿ ಕೇಸ್ ಸೆನ್ಸಿಟಿವಿಟಿಯನ್ನು ನಾನು ಹೇಗೆ ನಿರ್ವಹಿಸುವುದು?
- ಬಳಸಿ map(String::toLowerCase) ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವ ಮೊದಲು ಎಲ್ಲಾ ಪದಗಳನ್ನು ಸಣ್ಣಕ್ಷರಕ್ಕೆ ಪರಿವರ್ತಿಸಲು.
- ಪದಗಳನ್ನು ವಿಶ್ಲೇಷಿಸುವ ಮೊದಲು ನಾನು ವಿರಾಮಚಿಹ್ನೆಯನ್ನು ಹೇಗೆ ತೆಗೆದುಹಾಕಬಹುದು?
- ಅನ್ವಯಿಸು replaceAll("[^a-zA-Z0-9 ]", "") ಪ್ರತಿ ವಾಕ್ಯದಲ್ಲಿ ಅನಗತ್ಯ ಅಕ್ಷರಗಳನ್ನು ತೆಗೆದುಹಾಕಲು.
- ಇನ್ಪುಟ್ನಲ್ಲಿ ಖಾಲಿ ಸ್ಟ್ರಿಂಗ್ಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಉತ್ತಮ ಮಾರ್ಗ ಯಾವುದು?
- ಬಳಸಿ filter(word -> !word.isEmpty()) ಅವುಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಯಿಂದ ಹೊರಗಿಡಲು.
- ಉತ್ತಮ ಕಾರ್ಯಕ್ಷಮತೆಗಾಗಿ ನಾನು ಇನ್ಪುಟ್ ಅರೇಯನ್ನು ಸಮಾನಾಂತರವಾಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಬಹುದೇ?
- ಹೌದು, ಬಳಸುವುದು Arrays.stream(input).parallel() ಬಹು-ಥ್ರೆಡ್ ಸಂಸ್ಕರಣೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.
- ಇನ್ಪುಟ್ ಪಠ್ಯದ ಜೊತೆಗೆ ಸಂಖ್ಯಾತ್ಮಕ ಡೇಟಾವನ್ನು ಹೊಂದಿದ್ದರೆ ಏನು?
- ನೀವು ರಿಜೆಕ್ಸ್ ಅನ್ನು ಮಾರ್ಪಡಿಸಬಹುದು replaceAll ಅಗತ್ಯವಿರುವಂತೆ ಸಂಖ್ಯೆಗಳನ್ನು ಸೇರಿಸಲು ಅಥವಾ ಹೊರಗಿಡಲು.
ವರ್ಡ್ ಫ್ರೀಕ್ವೆನ್ಸಿ ಎಣಿಕೆಗಾಗಿ ಸುವ್ಯವಸ್ಥಿತ ಪರಿಹಾರಗಳು
ಪಠ್ಯ ಸಂಸ್ಕರಣೆ ಮತ್ತು ವಿಶ್ಲೇಷಣೆಗೆ ಪದ ಆವರ್ತನಗಳನ್ನು ನಿಖರವಾಗಿ ಎಣಿಸುವುದು ಅತ್ಯಗತ್ಯ. Java 8 ನ ಸ್ಟ್ರೀಮ್ಗಳ API ಅನ್ನು ಬಳಸಿಕೊಂಡು, ಹೆಚ್ಚುವರಿ ಸ್ಥಳಗಳು ಅಥವಾ ಮಿಶ್ರ ಪ್ರಕರಣಗಳಂತಹ ಅನಿಯಮಿತ ಒಳಹರಿವುಗಳನ್ನು ನಿರ್ವಹಿಸುವಾಗ ನೀವು ಸಂಕ್ಷಿಪ್ತ ಮತ್ತು ಪರಿಣಾಮಕಾರಿ ಪರಿಹಾರಗಳನ್ನು ರಚಿಸಬಹುದು. ಈ ತಂತ್ರಗಳು ಡೆವಲಪರ್ಗಳಿಗೆ ವಿವಿಧ ಡೇಟಾ ಸವಾಲುಗಳನ್ನು ಸುಲಭವಾಗಿ ನಿಭಾಯಿಸಲು ಅಧಿಕಾರ ನೀಡುತ್ತವೆ. 🌟
ದೊಡ್ಡ ಡೇಟಾಸೆಟ್ಗಳು ಅಥವಾ ಸಣ್ಣ-ಪ್ರಮಾಣದ ಯೋಜನೆಗಳಿಗಾಗಿ, ಈ ವಿಧಾನವು ದೃಢವಾದ, ಮರುಬಳಕೆ ಮಾಡಬಹುದಾದ ಮತ್ತು ಅಳೆಯಲು ಸುಲಭವಾಗಿದೆ ಎಂದು ಸಾಬೀತುಪಡಿಸುತ್ತದೆ. ಇದರ ಮಾಡ್ಯುಲರ್ ರಚನೆಯು ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್ಗೆ ಮನಬಂದಂತೆ ಸಂಯೋಜನೆಗೊಳ್ಳುವುದನ್ನು ಖಾತ್ರಿಪಡಿಸುತ್ತದೆ, ಆದರೆ ಸಾಮಾನ್ಯೀಕರಣ ಮತ್ತು ಘಟಕ ಪರೀಕ್ಷೆಯಂತಹ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು ವೈವಿಧ್ಯಮಯ ಬಳಕೆಯ ಪ್ರಕರಣಗಳಿಗೆ ವಿಶ್ವಾಸಾರ್ಹ ಪರಿಹಾರವಾಗಿದೆ. 🚀
ಜಾವಾ ವರ್ಡ್ ಫ್ರೀಕ್ವೆನ್ಸಿ ಪರಿಹಾರಗಳಿಗಾಗಿ ಮೂಲಗಳು ಮತ್ತು ಉಲ್ಲೇಖಗಳು
- ಸ್ಟ್ರೀಮ್ಗಳ API ಗಾಗಿ ಅಧಿಕೃತ ಜಾವಾ ದಾಖಲಾತಿಯಿಂದ ಪ್ರೇರಿತವಾಗಿದೆ. ಹೆಚ್ಚಿನ ವಿವರಗಳಿಗಾಗಿ, ಅಧಿಕೃತ ಸಂಪನ್ಮೂಲಕ್ಕೆ ಭೇಟಿ ನೀಡಿ: ಜಾವಾ 8 ಸ್ಟ್ರೀಮ್ಗಳ ದಾಖಲೆ .
- ನಲ್ಲಿ ಸಮುದಾಯ ಚರ್ಚೆಗಳಿಂದ ಉದಾಹರಣೆಗಳು ಮತ್ತು ತಂತ್ರಗಳನ್ನು ಅಳವಡಿಸಿಕೊಳ್ಳಲಾಗಿದೆ ಸ್ಟಾಕ್ ಓವರ್ಫ್ಲೋ , ಜಾವಾದಲ್ಲಿ ಪಠ್ಯ ಪ್ರಕ್ರಿಯೆ ಸವಾಲುಗಳ ಮೇಲೆ ಕೇಂದ್ರೀಕರಿಸುವುದು.
- ರೆಜೆಕ್ಸ್ ಹ್ಯಾಂಡ್ಲಿಂಗ್ ಮತ್ತು ಸುಧಾರಿತ ಸ್ಟ್ರಿಂಗ್ ಮ್ಯಾನಿಪ್ಯುಲೇಷನ್ ತಂತ್ರಗಳಿಂದ ಉಲ್ಲೇಖಿಸಲಾಗಿದೆ ಜಾವಾದಲ್ಲಿ ನಿಯಮಿತ ಅಭಿವ್ಯಕ್ತಿಗಳು .