テキストファイル内の単語の頻度を数えようとしています。しかし、私は別のアプローチを使用する必要があります。たとえば、ファイルにBRAIN-ISCHEMIAとISCHEMIA-BRAINが含まれている場合、BRAIN-ISCHEMIAを2回カウントする(およびISCHEMIA-BRAINを残す)必要があります。その逆も同様です。これが私のコードです-
// Mapping of String->Integer (word -> frequency)
HashMap<String, Integer> frequencyMap = new HashMap<String, Integer>();
// Iterate through each line of the file
String[] temp;
String currentLine;
String currentLine2;
while ((currentLine = in.readLine()) != null) {
// Remove this line if you want words to be case sensitive
currentLine = currentLine.toLowerCase();
temp=currentLine.split("-");
currentLine2=temp[1]+"-"+temp[0];
// Iterate through each word of the current line
// Delimit words based on whitespace, punctuation, and quotes
StringTokenizer parser = new StringTokenizer(currentLine);
while (parser.hasMoreTokens()) {
String currentWord = parser.nextToken();
Integer frequency = frequencyMap.get(currentWord);
// Add the word if it doesn't already exist, otherwise increment the
// frequency counter.
if (frequency == null) {
frequency = 0;
}
frequencyMap.put(currentWord, frequency + 1);
}
StringTokenizer parser2 = new StringTokenizer(currentLine2);
while (parser2.hasMoreTokens()) {
String currentWord2 = parser2.nextToken();
Integer frequency = frequencyMap.get(currentWord2);
// Add the word if it doesn't already exist, otherwise increment the
// frequency counter.
if (frequency == null) {
frequency = 0;
}
frequencyMap.put(currentWord2, frequency + 1);
}
}
// Display our nice little Map
System.out.println(frequencyMap);
しかし、次のファイルの場合-
ISCHEMIA-GLUTAMATE ISCHEMIA-BRAIN GLUTAMATE-BRAIN BRAIN-TOLERATE BRAIN-TOLERATE TOLERATE-BRAIN GLUTAMATE-ISCHEMIA ISCHEMIA-GLUTAMATE
次の出力が得られます-
{glutamate-brain = 1、ischemia-glutamate = 3、ischemia-brain = 1、glutamate-ischemia = 3、brain-tolerate = 3、brain-ischemia = 1、tolerate-brain = 3、brain-glutamate = 1}
問題はブロック中の2番目だと思います。この問題についての光は高く評価されます。