ஜாவாவில் வார்த்தை அதிர்வெண் பகுப்பாய்வுகளை நெறிப்படுத்துதல்
ஜாவா 8 சக்திவாய்ந்த ஸ்ட்ரீம்ஸ் API ஐ அறிமுகப்படுத்தியது, டெவலப்பர்கள் சேகரிப்புகள் மற்றும் தரவு செயலாக்கத்தை எவ்வாறு கையாளுகிறார்கள் என்பதில் புரட்சியை ஏற்படுத்தியது. இந்த அம்சத்தின் மிகவும் நடைமுறை பயன்பாடுகளில் ஒன்று வாக்கியங்களின் தொகுப்பில் வார்த்தை அதிர்வெண்களை எண்ணுவது. 🌟 நீங்கள் பதிவுக் கோப்புகளைச் செயலாக்கினாலும் அல்லது உரைத் தரவை பகுப்பாய்வு செய்தாலும், வார்த்தை நிகழ்வுகளை திறமையாக எண்ணும் திறன் மதிப்புமிக்க திறமையாகும்.
உங்களிடம் ஒரு வாக்கியங்கள் இருப்பதாக கற்பனை செய்து பாருங்கள், ஒவ்வொன்றும் வெவ்வேறு அளவு இடைவெளிகள் மற்றும் வடிவமைத்தல் வினோதங்களுடன். இடைவெளியைப் பொருட்படுத்தாமல், "சரம்" என்ற வார்த்தை தொடர்ந்து கணக்கிடப்படுவதை எவ்வாறு உறுதிப்படுத்துவது? இதைத் தீர்ப்பதில் ஸ்ட்ரீம்ஸ் ஏபிஐ முறைகளைப் புரிந்துகொள்வது மற்றும் ஜாவாவின் செயல்பாட்டு நிரலாக்கக் கருவிகளில் தேர்ச்சி பெறுவது ஆகியவை அடங்கும்.
பல டெவலப்பர்கள் நேரடியான அணுகுமுறைகளுடன் தொடங்குகிறார்கள் - சரங்களைப் பிரித்து கைமுறையாக வரிசைகள் மூலம் மீண்டும் செய்கிறார்கள். செயல்படும் போது, இந்த முறைகள் வாய்மொழியாகவும், பராமரிக்க கடினமாகவும் இருக்கும். நல்ல செய்தி என்னவென்றால், Java 8 இன் `சேகரிப்பாளர்கள்' இந்த செயல்முறையை ஒரு சுருக்கமான மற்றும் நேர்த்தியான தீர்வாக நெறிப்படுத்த முடியும். 💡
இந்த வழிகாட்டியில், ஸ்ட்ரீம்ஸ் API ஐப் பயன்படுத்தி வார்த்தை அதிர்வெண் எண்ணிக்கையை மேம்படுத்துவோம். கூடுதல் இடைவெளிகள் போன்ற பொதுவான சிக்கல்கள் முதல் நடைமுறை எடுத்துக்காட்டுகள் வரை, உங்கள் ஜாவா குறியீட்டை எவ்வாறு சுத்தமாகவும் திறமையாகவும் மாற்றுவது என்பதை நீங்கள் கற்றுக் கொள்வீர்கள். உள்ளே நுழைவோம்! 🚀
கட்டளை | பயன்பாட்டின் உதாரணம் |
---|---|
flatMap | பல நீரோடைகளை ஒரே நீரோட்டத்தில் சமன் செய்யப் பயன்படுகிறது. இந்த ஸ்கிரிப்ட்டில், ஒவ்வொரு வாக்கியத்தையும் இடைவெளியில் பிரிப்பதன் மூலம் வார்த்தைகளின் ஸ்ட்ரீமாக மாற்றுகிறது. |
split("\\s+") | இந்த regex-அடிப்படையிலான ஸ்பிலிட் கட்டளை சரத்தை ஒன்று அல்லது அதற்கு மேற்பட்ட இடைவெளி எழுத்துகளால் பிரிக்கிறது, வார்த்தைகளுக்கு இடையே உள்ள கூடுதல் இடைவெளிகளை திறம்பட கையாளுகிறது. |
filter(word -> !word.isEmpty()) | ஒழுங்கற்ற இடைவெளி அல்லது பின்தங்கிய இடைவெளியின் விளைவாக ஏற்படும் வெற்று சரங்களை நீக்குகிறது, துல்லியமான வார்த்தை எண்ணுதலை உறுதி செய்கிறது. |
map(String::trim) | ஒவ்வொரு வார்த்தையிலிருந்தும் முன்னணி மற்றும் பின்தங்கிய இடைவெளியை நீக்குகிறது, மேலும் நம்பகமான செயலாக்கத்திற்கான உள்ளீட்டை தரப்படுத்துகிறது. |
Collectors.groupingBy | வகைப்படுத்தி செயல்பாட்டின் மூலம் கூறுகளைக் குழுவாக்குகிறது. இந்த வழக்கில், அதிர்வெண் எண்ணுக்கான சரியான மதிப்பின் மூலம் சொற்களை இது தொகுக்கிறது. |
Collectors.counting | கலெக்டர்கள்.groupingBy ஆல் உருவாக்கப்பட்ட ஒவ்வொரு குழுவின் நிகழ்வுகளின் எண்ணிக்கையையும், சொல் அதிர்வெண்களை வழங்குகிறது. |
String.join | சரங்களின் வரிசையை ஒரு குறிப்பிட்ட டிலிமிட்டருடன் ஒற்றை சரமாக இணைக்கிறது. பல வரி உள்ளீட்டைக் கையாளப் பயன்படுகிறது. |
Function.identity | உள்ளீட்டு வாதத்தை அப்படியே வழங்கும் ஒரு பயன்பாட்டு செயல்பாடு. கலெக்டர்கள்.groupingBy இல் வகைப்படுத்தி செயல்பாடாக இங்கே பயன்படுத்தப்படுகிறது. |
assertEquals | இரண்டு மதிப்புகள் சமமாக உள்ளதா என்பதைச் சரிபார்க்கும் ஒரு ஜூனிட் சோதனை முறை. வார்த்தை அதிர்வெண் வெளியீடு எதிர்பார்த்த முடிவுகளுடன் பொருந்துகிறது என்பதை சரிபார்க்கிறது. |
Arrays.stream | அணிவரிசையிலிருந்து ஸ்ட்ரீமை உருவாக்குகிறது. உள்ளீட்டு சரம் வரிசையை செயல்பாட்டு செயலாக்கத்திற்கான ஸ்ட்ரீமாக மாற்ற இங்கே பயன்படுத்தப்படுகிறது. |
ஜாவா ஸ்ட்ரீம்களுடன் வார்த்தை அதிர்வெண் பகுப்பாய்வை மேம்படுத்துதல்
மேலே உள்ள ஸ்கிரிப்டுகள் சக்திவாய்ந்தவற்றைப் பயன்படுத்தி வாக்கியங்களின் வரிசையில் வார்த்தை அதிர்வெண்களை திறமையாக கணக்கிட வடிவமைக்கப்பட்டுள்ளன ஜாவா 8 ஸ்ட்ரீம்ஸ் ஏபிஐ. பதிவுகள் அல்லது ஆவணப் பகுப்பாய்வு போன்ற உரைத் தரவைச் செயலாக்குவதற்கு இது மிகவும் பயனுள்ளதாக இருக்கும், அங்கு இடைவெளி மற்றும் கேஸ் சென்சிட்டிவிட்டியின் சீரான கையாளுதல் அவசியம். சரங்களின் உள்ளீட்டு வரிசையை வார்த்தைகளின் ஒருங்கிணைந்த ஸ்ட்ரீமாக மாற்றுவதன் மூலம் முதன்மை ஓட்டம் தொடங்குகிறது. இது `பிளாட்மேப்` முறையைப் பயன்படுத்தி அடையப்படுகிறது, இது ஒவ்வொரு வாக்கியத்தையும் தனித்தனி வார்த்தைகளாகப் பிரிக்கிறது, அதே நேரத்தில் ஒழுங்கற்ற இடைவெளியை நீக்குகிறது. எடுத்துக்காட்டாக, உள்ளீட்டில் கூடுதல் இடைவெளிகள் இருந்தால், இவை கூடுதல் குறியீடு இல்லாமல் அழகாகக் கையாளப்பட்டு, பணியை எளிதாக்கும். 😊
ஸ்கிரிப்ட்களின் ஒரு முக்கிய அம்சம், வெற்று சரங்களைத் தவிர்க்க `வடிகட்டி'யைப் பயன்படுத்துவதாகும், இது பல இடைவெளிகளுடன் வாக்கியங்களைப் பிரிப்பதன் விளைவாக இருக்கலாம். பின்னர், `வரைபடம்(ஸ்ட்ரிங்::ட்ரிம்)` எஞ்சியுள்ள முன்னணி அல்லது பின்தங்கிய இடைவெளிகளை அகற்றுவதன் மூலம் வார்த்தைகளின் வடிவமைப்பை தரப்படுத்த பயன்படுத்தப்படுகிறது. இது "மாதிரி" மற்றும் "மாதிரி" போன்ற சொற்கள் ஒரே மாதிரியாகக் கருதப்படுவதை உறுதி செய்கிறது. இந்த முறைகளின் கலவையானது உரை செயலாக்கத்திற்கான நெறிப்படுத்தப்பட்ட மற்றும் நம்பகமான பொறிமுறையை வழங்குகிறது, குறிப்பாக கணிக்க முடியாத உள்ளீட்டுத் தரவைக் கையாளும் போது.
வார்த்தைகளை தொகுத்தல் மற்றும் எண்ணுதல் `Collectors.groupingBy` மற்றும் `Collectors.counting` மூலம் கையாளப்படுகிறது. இந்த இரண்டு முறைகளும் இணைந்து ஒரு வரைபடத்தை உருவாக்குகின்றன, அங்கு ஒவ்வொரு தனிப்பட்ட வார்த்தையும் ஒரு முக்கிய மற்றும் அதன் அதிர்வெண் மதிப்பு. எடுத்துக்காட்டாக, "இது ஒரு மாதிரி சரம்" உள்ளீட்டில், "மாதிரி" என்ற வார்த்தை உள்ளீட்டு வாக்கியங்களில் பல முறை தோன்றும். இந்த அணுகுமுறை அதன் மொத்த நிகழ்வுகள் கைப்பற்றப்படுவதை உறுதிசெய்கிறது, இது துல்லியமான அதிர்வெண் எண்ணிக்கையை வழங்குகிறது. வகைப்படுத்தியாக `Function.identity()` ஐப் பயன்படுத்துவதன் மூலம், அந்த வார்த்தையே விளைந்த வரைபடத்தில் திறவுகோலாகப் பயன்படுத்தப்படுகிறது.
இறுதியாக, ஸ்கிரிப்ட்களில் மட்டுப்படுத்தல் மற்றும் மறுபயன்பாடு ஆகியவை அடங்கும், `கால்குலேட் வேர்ட்ஃப்ரீக்வென்சிஸ்` போன்ற பயன்பாட்டு முறைகளை அறிமுகப்படுத்தி, தர்க்கத்தை எளிதாகப் பராமரிக்கவும் பெரிய திட்டங்களில் ஒருங்கிணைக்கவும் செய்கிறது. யூனிட் சோதனைகளைச் சேர்ப்பது, தீர்வு பல்வேறு உள்ளீடுகளில் எதிர்பார்த்தபடி செயல்படுவதை மேலும் உறுதிப்படுத்துகிறது. எடுத்துக்காட்டாக, ட்ரைலிங் ஸ்பேஸ்கள் அல்லது மாறுபட்ட சொல் கேப்பிடலைசேஷன் போன்ற பொதுவான சிக்கல்கள் முடிவுகளைப் பாதிக்காது என்பதை சோதனைச் சூழல்கள் சரிபார்க்கின்றன. பயனர் உருவாக்கிய உள்ளடக்கத்தை பகுப்பாய்வு செய்தல் அல்லது தேடல் பதிவுகளைப் பாகுபடுத்துதல் போன்ற நிஜ உலகக் காட்சிகளுக்கு இந்த வலிமையான நிலை ஸ்கிரிப்ட்களை ஏற்றதாக ஆக்குகிறது. 🚀
ஜாவா 8 ஸ்ட்ரீம்ஸ் ஏபிஐ மூலம் வார்த்தை அதிர்வெண்களை திறம்பட எண்ணுகிறது
இந்த தீர்வு செயல்பாட்டு நிரலாக்கத்திற்கும் உரை பகுப்பாய்வுக்கும் Java 8 Streams 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() ஸ்கிரிப்டை பல இழைகளில் தரவை செயலாக்க அனுமதிக்கிறது, இது இயக்க நேரத்தை கணிசமாகக் குறைக்கிறது. மில்லியன் கணக்கான சொற்களைக் கையாளும் பயன்பாடுகளுக்கு இது கேம்-சேஞ்சராக இருக்கும். இந்த மேம்பாடுகள், யூனிட் சோதனையுடன் இணைந்தால், தீர்வை வலுவானதாகவும், உற்பத்தி சூழல்களுக்கு அளவிடக்கூடியதாகவும் ஆக்குகிறது, இது பல்வேறு நிலைமைகளின் கீழ் சிறப்பாக செயல்படுவதை உறுதி செய்கிறது. 🚀
Java Word Frequency Analysis பற்றிய பொதுவான கேள்விகள்
- சொல் அதிர்வெண் பகுப்பாய்வில் வழக்கு உணர்திறனை எவ்வாறு கையாள்வது?
- பயன்படுத்தவும் map(String::toLowerCase) செயலாக்கத்திற்கு முன் அனைத்து சொற்களையும் சிற்றெழுத்துக்கு மாற்ற.
- வார்த்தைகளை பகுப்பாய்வு செய்வதற்கு முன் நிறுத்தற்குறிகளை எவ்வாறு அகற்றுவது?
- விண்ணப்பிக்கவும் replaceAll("[^a-zA-Z0-9 ]", "") ஒவ்வொரு வாக்கியத்திலும் தேவையற்ற எழுத்துக்களை அகற்ற வேண்டும்.
- உள்ளீட்டில் வெற்று சரங்களைக் கையாள சிறந்த வழி எது?
- பயன்படுத்தவும் filter(word -> !word.isEmpty()) அவற்றை செயலாக்கத்திலிருந்து விலக்க வேண்டும்.
- சிறந்த செயல்திறனுக்காக உள்ளீட்டு வரிசையை இணையாகச் செயல்படுத்த முடியுமா?
- ஆம், பயன்படுத்தி Arrays.stream(input).parallel() பல திரிக்கப்பட்ட செயலாக்கத்தை செயல்படுத்துகிறது.
- உள்ளீட்டில் உரையுடன் எண் தரவு இருந்தால் என்ன செய்வது?
- நீங்கள் regex ஐ மாற்றலாம் replaceAll தேவைக்கேற்ப எண்களைச் சேர்க்க அல்லது விலக்க.
வார்த்தை அதிர்வெண் எண்ணிக்கைக்கான நெறிப்படுத்தப்பட்ட தீர்வுகள்
உரை செயலாக்கம் மற்றும் பகுப்பாய்விற்கு வார்த்தை அதிர்வெண்களை துல்லியமாக எண்ணுவது அவசியம். Java 8 இன் ஸ்ட்ரீம்ஸ் API ஐப் பயன்படுத்தி, கூடுதல் இடைவெளிகள் அல்லது கலப்பு வழக்குகள் போன்ற ஒழுங்கற்ற உள்ளீடுகளைக் கையாளும் போது நீங்கள் சுருக்கமான மற்றும் திறமையான தீர்வுகளை உருவாக்கலாம். இந்த நுட்பங்கள் பல்வேறு தரவு சவால்களை எளிதாகச் சமாளிக்க டெவலப்பர்களுக்கு அதிகாரம் அளிக்கின்றன. 🌟
பெரிய தரவுத்தொகுப்புகள் அல்லது சிறிய அளவிலான திட்டங்களுக்கு, இந்த அணுகுமுறை வலுவானது, மீண்டும் பயன்படுத்தக்கூடியது மற்றும் அளவிட எளிதானது. அதன் மாடுலர் அமைப்பு எந்தவொரு பயன்பாட்டிலும் தடையின்றி ஒருங்கிணைக்கப்படுவதை உறுதி செய்கிறது, அதே நேரத்தில் இயல்பாக்கம் மற்றும் அலகு சோதனை போன்ற சிறந்த நடைமுறைகள் பல்வேறு பயன்பாட்டு நிகழ்வுகளுக்கு நம்பகமான தீர்வாக அமைகின்றன. 🚀
ஜாவா வேர்ட் அதிர்வெண் தீர்வுகளுக்கான ஆதாரங்கள் மற்றும் குறிப்புகள்
- ஸ்ட்ரீம்ஸ் ஏபிஐக்கான அதிகாரப்பூர்வ ஜாவா ஆவணத்தால் ஈர்க்கப்பட்டது. மேலும் விவரங்களுக்கு, அதிகாரப்பூர்வ ஆதாரத்தைப் பார்வையிடவும்: ஜாவா 8 ஸ்ட்ரீம்கள் ஆவணப்படுத்தல் .
- இல் சமூக விவாதங்களில் இருந்து எடுத்துக்காட்டுகள் மற்றும் நுட்பங்கள் மாற்றியமைக்கப்பட்டன ஸ்டாக் ஓவர்ஃப்ளோ , ஜாவாவில் உரை செயலாக்க சவால்களில் கவனம் செலுத்துகிறது.
- Regex கையாளுதல் மற்றும் மேம்பட்ட சரம் கையாளுதல் நுட்பங்கள் குறிப்பிடப்படுகின்றன ஜாவாவில் வழக்கமான வெளிப்பாடுகள் .