之前有點好奇有道詞典中的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進行處理。