gpt4 book ai didi

Java HashMap 大小限制? Bigram Frequency Count 中的某些键正在消失

转载 作者:行者123 更新时间:2023-11-29 07:53:33 25 4
gpt4 key购买 nike

我正在用 Java 编写一个简单的二元组频率计数算法,遇到了一个我不知道如何解决的问题。

我的源文件是一个 9MB 的 .txt 文件,其中包含随机单词,以空格分隔。

当我运行将输入限制为前 100 行的脚本时,我得到的二元组“嘿那里”的频率值为 1。

但是,当我取消只扫描前 100 行而不是扫描整个文件的限制时,对于相同的二元搜索,我得到了 null 值。 HashMap 中的键/值对现在为空。

我将所有二元语法存储在 HashMap 中,并使用 BufferedReader 读取文本文件。

是什么导致二元组(键)从 HashMap 中删除或覆盖?我是在阅读整个文件还是只阅读文件的第一部分并不重要。

public class WordCount {

public static ArrayList<String> words = new ArrayList<String>();
public static Map<String, Integer> bi_count = new HashMap<String, Integer>();

public static void main(String[] args) {

BufferedReader br = null;

try {

String sCurrentLine;

br = new BufferedReader(new FileReader(args[0]));
System.out.println("\nProcessing file...");

while (br.readLine() != null) {
// for (int i = 0; i < 53; i++ ) {
sCurrentLine = br.readLine();
if (sCurrentLine != null) {
String[] input_words = sCurrentLine.split("\\s+");
for (int j = 0; j < input_words.length; j++) {
words.add(input_words[j]);
}
}
}
}
catch (IOException e) {
e.printStackTrace();
}
finally {
try {
if (br != null)br.close();
countWords();
} catch (IOException ex) {
ex.printStackTrace();
}
}

}

private static void countWords() {

for (int k = 0; k < words.size(); k++) {
String word = words.get(k);
String next = "";
if (k != words.size() - 1) {
next = words.get(k+1);
}

String two_word = word + " " + next;

if (bi_count.containsKey(two_word)) {
int current_count = bi_count.get(two_word);
bi_count.put (two_word, current_count + 1);
}
else {
bi_count.put( two_word, 1);
}

}

System.out.println("File processed successfully.\n");
}

最佳答案

我不完全相信这是你问题的原因,你没有阅读输入文件的所有行。

while (br.readLine() != null) {
sCurrentLine = br.readLine();

在 if() 语句中读取的行根本没有被处理——你缺少备用行。

试试这个:

while ((sCurrentline = nr.readLine()) != null) {
//now use sCurrentLine...
}

关于Java HashMap 大小限制? Bigram Frequency Count 中的某些键正在消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19470918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com