大阪教育大学  国語教育講座  野浪研究室  戻る  counter

tips 10 スキャナとOCRソフトによるマークシート処理

紙送り機構がついた高速スキャナ(せめて1分10枚 10ppm ないと、嫌になってしまうだろう)と
連続処理機能を持ったOCRソフトがあれば、実用可能かな。

1 次のような用紙を印刷しておく。

該当する番号を●になるように濃く塗りつぶしてください。
学籍番号氏名
十万の位@ A B C D E F G H ◎ 
万の位@ A B C D E F G H ◎
千の位@ A B C D E F G H ◎
百の位@ A B C D E F G H ◎
十の位@ A B C D E F G H ◎
一の位@ A B C D E F G H ◎
1【 @ A B C D E F G H ◎ 】
2【 @ A B C D E F G H ◎ 】
3【 @ A B C D E F G H ◎ 】
4【 @ A B C D E F G H ◎ 】
5【 @ A B C D E F G H ◎ 】
6【 @ A B C D E F G H ◎ 】
7【 @ A B C D E F G H ◎ 】
8【 @ A B C D E F G H ◎ 】
9【 @ A B C D E F G H ◎ 】
10【 @ A B C D E F G H ◎ 】
11【 @ A B C D E F G H ◎ 】
12【 @ A B C D E F G H ◎ 】
13【 @ A B C D E F G H ◎ 】
14【 @ A B C D E F G H ◎ 】
15【 @ A B C D E F G H ◎ 】
16【 @ A B C D E F G H ◎ 】
17【 @ A B C D E F G H ◎ 】
18【 @ A B C D E F G H ◎ 】
19【 @ A B C D E F G H ◎ 】
20【 @ A B C D E F G H ◎ 】
21【 @ A B C D E F G H ◎ 】
22【 @ A B C D E F G H ◎ 】
23【 @ A B C D E F G H ◎ 】
24【 @ A B C D E F G H ◎ 】
25【 @ A B C D E F G H ◎ 】
26【 @ A B C D E F G H ◎ 】
27【 @ A B C D E F G H ◎ 】
28【 @ A B C D E F G H ◎ 】
29【 @ A B C D E F G H ◎ 】
30【 @ A B C D E F G H ◎ 】
31【 @ A B C D E F G H ◎ 】
32【 @ A B C D E F G H ◎ 】
33【 @ A B C D E F G H ◎ 】
34【 @ A B C D E F G H ◎ 】
35【 @ A B C D E F G H ◎ 】
36【 @ A B C D E F G H ◎ 】
37【 @ A B C D E F G H ◎ 】
38【 @ A B C D E F G H ◎ 】
39【 @ A B C D E F G H ◎ 】
40【 @ A B C D E F G H ◎ 】
41【 @ A B C D E F G H ◎ 】
42【 @ A B C D E F G H ◎ 】
43【 @ A B C D E F G H ◎ 】
44【 @ A B C D E F G H ◎ 】
45【 @ A B C D E F G H ◎ 】
46【 @ A B C D E F G H ◎ 】
47【 @ A B C D E F G H ◎ 】
48【 @ A B C D E F G H ◎ 】
49【 @ A B C D E F G H ◎ 】
50【 @ A B C D E F G H ◎ 】

2 用紙にマークして、OCRソフト(「読取革命v7」使用)にかける

十万の位@ABCDEFGH○
 万の位@ABCDEFGH○
 干の位@ABCDEFGH○
 百の位@ABCDEFGH○
 十の位@ABCDEFGH○
 −の位@ABCDEFGH●
1【@ABCDE●GH○】
2【@ABCD●FGH○】
3【@ABC●EFGH○】
4【@AB●DEFGH○】
5【@A●CDEFGH○】
6【@●BCDEFGH○】
7【●ABCDEFGH○】

以下略

おお、ちゃんと読みとってる。

3 mawk32用のスクリプトを書く

$0~/位/{ 
	split($0,a,"位"); 
	temp=jsubstr(a[2],1,10); 
	n=num(temp); 
	printf n; 
} 
$0~/【/{ 
	split($0,a,/[【】]/); 
	s=num(a[2]); 
	printf"\t%s",s; 
	if (a[1]==50){print""} 
} 
function num(a){ 
	ichi=jindex(a,"●"); 
	if(ichi==0){r="?"} 
	else{r=ichi} 
	if(ichi==10){r=0} 
	return(r) 
} 

処理すると

?????0	7	6	5	4	3	2	1	?
 

とタブ区切りのデータ列を出力した。
いっさいエラー処理をしていないので、ご注意。


大阪教育大学  国語教育講座  野浪研究室  頁頭  戻る

mailto: nonami@cc.osaka-kyoiku.ac.jp
スパムメール対策として、フリ−メールは受信拒否しています。