之前有点好奇有道词典中的OCR功能,具体来说就是强力取词功能。我知道的最有名的OCR库是tesseract,这个库是惠普在早些年前开源的。
在用python做爬虫处理验证码的时候,就会用到这个库,对应的python封装版本名字叫pytesseract。在github上可以找到tesseract的源码。
不过,此前在有道词典安装之后的文件夹中,我并未找到tesseract库。直到最近,更新了有道词典,换了新版本,才意外在文件下找到一个名叫tessdll.dll的文件。
与此同时,我对照了一下旧版本,其中有一个叫XDLL.dll的库。查看其属性可以看到,名字叫ksense:
根据搜索结果可知,该XDLL.dll库来源于一款名叫"逍遥笔手写输入"的国产软件。值得注意的是,在加入tessdll.dll之后依然保留了XDLL.dll。
要推断其中的原因。还有一个文件值得注意,那就是OcrInfo.xml,其内容为:
<?xml version="1.0" encoding="UTF-8" ?> <Strings> <Version>1.0</Version> <Lang Name="OCRLe"> <String Name="en" Value="0" Size="3470" ReName="eng" UPDATE="0" LOAD="1"/> <String Name="es" Value="1" Size="15580" ReName="spa" UPDATE="0" LOAD="0"/> <String Name="pt" Value="2" Size="12612" ReName="por" UPDATE="0" LOAD="0"/> <String Name="de" Value="3" Size="13054" ReName="deu" UPDATE="0" LOAD="0"/> <String Name="fr" Value="4" Size="13715" ReName="fra" UPDATE="0" LOAD="0"/> <String Name="ru" Value="5" Size="15774" ReName="rus" UPDATE="0" LOAD="0"/> <String Name="ja" Value="6" Size="32298" ReName="jpn" UPDATE="0" LOAD="0"/> <String Name="ko" Value="7" Size="12998" ReName="kor" UPDATE="0" LOAD="0"/> </Lang> <Lang Name="MultiLeSelect"> <String Name="英汉互译 " Value="eng" QueryName="en" ReName="英文" LeHint ="(英语)" /> <String Name="法汉互译 " Value="fra" QueryName="fr" ReName="法文" LeHint ="(法语)" /> <String Name="日汉互译 " Value="jpn" QueryName="ja" ReName="日文" LeHint ="(日语)" /> <String Name="德汉互译 " Value="deu" QueryName="de" ReName="德文" LeHint ="(德语)" /> <String Name="韩汉互译 " Value="kor" QueryName="ko" ReName="韩文" LeHint ="(韩语)" /> <String Name="葡汉互译 " Value="por" QueryName="pt" ReName="葡萄牙文" LeHint ="(葡萄牙语)" /> <String Name="西汉互译 " Value="spa" QueryName="es" ReName="西班牙文" LeHint ="(西班牙语)" /> <String Name="俄汉互译 " Value="rus" QueryName="ru" ReName="俄文" LeHint ="(俄语)" /> </Lang> </Strings>
据此可以推断,新版的有道词典加入tesseract库,主要为了支持更多的语言,而中文的OCR可能依然是使用ksense进行处理。