一个小应用与机器学习
要不要去“占坑”机器学习
对于我这样一个技术人来说,一项火热的技术,有一种由衷的热爱。但理性让我思考,这是不是泡沫,其本质是什么,我要不要投入生命中最为宝贵之一的时间去学习…这些问题,我必须回答自己。
首先,机器学习是AI的一个分支,作为创造者的人来说,机器拥有智能是多么让人激动的事情;
其次,机器学习是一类算法,一种被称为“学习算法”,在计算机领域(或者其他)对算法的研究始终是永恒的话题;
再者,当今人类活动速度之快,我认为急需要一种较为智慧的机器来做更多一些繁琐、不是那么简单的事情,解放部分人;
故而,机器学习势必会成为一种趋势,发挥它的力量;而自己有必要为将来积蓄一定力量,应用该技术来解决些事情。
一个小应用解决的事情
原由
有人给了pdf的电子扫描文件,大概有5、6百也,主要内容是一些条款项。结果是要将上面的文字条款提取出来录入数据库中保存起来,由应用系统统一管理;
分析
一种方式是让人抄录上面的文字,叫几个人,十天半个月也能搞定,这么做得人,我必须佩服呀!
一种是采用某种技术来处理,比如把扫描文档每一页变为一张图片,然后从图片上提取文字信息,这也是我选择的方式。
具体实现
package identi;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import java.io.*;
/**
-
Created with IntelliJ IDEA.
-
图片像素越高,那么图片识别度越好。
*/
public class IDentifi {public static void main(String[] args) {
int count = 162;
String result = “”;
File file = new File(“D:\png\file.txt”);
long start = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
File imageFile;
if (i < 10) {//根据图片名称规律处理
imageFile = new File(“D:\png\14114106\14114106_0” + i + “.png”);
} else {
imageFile = new File(“D:\png\14114106\14114106_” + i + “.png”);
}
if (!imageFile.exists()) {
break;
}
Tesseract instance = new Tesseract();
//设置训练库的位置
instance.setDatapath(“D:\shibie\src\main\resources\tessdata”);
//中文识别
instance.setLanguage(“chi_sim”);
try {
result = instance.doOCR(imageFile);
} catch (TesseractException e) {
e.printStackTrace();
}
try {
//追加文本模式
FileWriter fileWriter = new FileWriter(file, true);
fileWriter.write(result);
fileWriter.write("***********************************************************\r\n");
fileWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
long end = System.currentTimeMillis();
System.out.println("--------共耗时:----------" + (end - start) / 1000);
}
}
maven依赖:
net.sourceforge.tess4j
tess4j
4.0.2
net.sourceforge.jexcelapi
jxl
2.6.12
总结
ocr技术原理
研究了一下Java OCR技术,在Google上找到了tesseract-ocr,最后找到了其对应的Java API版本 Tess4J;
https://blog.csdn.net/marketadviser/article/details/36626571
https://www.jianshu.com/p/921c1da740b5