gpt4 book ai didi

Java - 马尔可夫链文本生成器 - 解析文本文件

转载 作者:行者123 更新时间:2023-11-30 07:46:54 27 4
gpt4 key购买 nike

我需要使用“两个城市的故事”的纯文本文件(由古腾堡项目提供)为我的算法类创建一个马尔可夫链文本生成器。我目前陷入了第一阶段,即解析文本文件并从字符中生成键值对,以便将它们添加到符号表中,以便完成其余的工作(实际上生成新文本) )。

澄清一下,这就是我想要的键值对(假设字母表是文本文件):

  • abc = 键| d = 值
  • bcd = 键| e = 值
  • cde = 键 | f = 值
  • 等等

我使用 BufferedReader 读取每一行,然后解析每一行,但我这样做的方式是错误的,我无法找到解决方法。为了迭代每行中的字符,我使用 for 循环到达当前字符,然后到达当前字符+1,依此类推。本质上,我最终必须到达下一行(尚未读取)并收到 StringIndexOutOfBounds 异常。我需要一种方法来移动到下一行并继续对整个文件进行迭代。

这是我到目前为止所拥有的:

import java.io.BufferedReader;
import java.io.IOException;

public class MarkovTextGenerator {
public static void main(String[] args) throws IOException {
/***********************************************************
* Begin parsing through text file, character by character *
***********************************************************/
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
String line;
while ((line = br.readLine()) != null) {
for (int i = 0; i < line.length(); i++) {
String char1 = line.substring(i, i + 1);
String char2 = line.substring(i + 1, i + 2);
String char3 = line.substring(i + 2, i + 3);
char value = line.charAt(i + 3);
String key = char1 + char2 + char3;
System.out.println(key);
System.out.println(value);
}
}
}
/******************
* End of parsing *
******************/
}
}

最佳答案

for 循环的迭代应该只转到 i < line.length() - 3StringIndexOutOfBounds抛出异常是因为 line.substring调用将超过字符串的最后一个字符。

例如

"abc".substring(2,3)会抛出异常,因为字符串后面没有剩余字符。

关于Java - 马尔可夫链文本生成器 - 解析文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33808220/

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