【发布时间】:2017-05-02 17:59:52
【问题描述】:
我正在尝试使用朴素贝叶斯存储用于 ocr 检测的数据字符串。数据是一个尺寸为 29 X 28 的字符串。它看起来像这样:
++#####++
++######++
####+++
+##
+##+
+#+
+#++++
+######++
+###+++####+
+#+ ++###+
+##+
+##+
+##+
+##
+#
+##
++ ++#+
+#+ ++++##+
+###++#+#####++
+++####++++
要读取这些数据并将其存储到整数数组中,我尝试将 .replace '#' 和 '+' 与 '1' 和 '\n' 以及空格加 0。但是,当我尝试重建读入数组后的图像。我得到的是这样的:
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1]
[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1]
[1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1]
[1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 1 1 1]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 1 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1]
[1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1]
[1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1]
[1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]
[1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
我不明白为什么我得到一个乱码输出。我使用的代码是:
lines = data.read()
def split28(s, n):
for begin in range(0, len(s), n):
yield s[begin:begin+n]
zoenum = [] #strings are immutable
val_zoenum = []
for digit in split28(lines, 812):
zoenum.append(digit)
for i in range(len(zoenum)):
zoenum[i] = zoenum[i].replace("\n", " ")
zoenum[i] = zoenum[i].replace("+", "1").replace("#", "1").replace(" ", "0")
zoenum[i] = list(map(int, zoenum[i]))
zoenum 是此类数据字符串的列表。任何想法/建议表示赞赏。另外,如果我需要重组问题,请告诉我。
【问题讨论】:
-
您确定输入不包含制表符或任何非空格空格吗?
-
很难说。
data.read()没有给你行列表,它给你一个大字符串,可以解释为字符的迭代器。 -
输入确实包含空格(空格),我用 0 替换。 @汤米
-
是的,这就是我将其转换为整数列表的原因。 @Eric Duminil
-
在您的示例代码中,您不会在任何地方使用
lines。你为什么拥有它?zoenum包含什么?在运行循环之前print(repr(zoenum))的输出是什么?之后呢?