SlideShare a Scribd company logo
ODICA 開発日記
webスクレイピングとあいまい検索
リヒト
ODICA オフライン辞書カメラ
• Androidアプリ
• 英・仏・独・伊・ポルトガル・スペインの辞書を内蔵していてオフラインで使える
• カメラで文字認識機能もついてる
• あいまい検索機能で誤認識しても正しく辞書を検索できる様にした
2
出会い
100万ダウンロードで
月500万円だ…と…?
目指せ100万ダウンロード!
• どうしたら便利?
• 言語の壁を破りたい!だから翻訳が欲しい!(前提)
• 気づき
• 今の辞書って基本オンライン検索だけど海外とか基本オフラインだよね
▫ 国内でも宮城の田舎とか行くと普通にオフライン(wimax)
▫ 自分はタブレットなので結構オフライン頻度が高い
▫ オンラインは遅い。ぱっぱぱっぱ出てきて欲しい
• 入力が難しい言語ってあるよね
▫ ギリシャ語 「Σε Αγαπώ」
▫ ロシア語 「Люблю Тебя」
4
目指せ100万ダウンロード!
英語、フランス語、ドイツ語、スペイン語、ポルトガル語、イタリア語…
多言語がオフラインで1つのアプリで翻訳出来たら嬉しいよね
ギリシャ語とかドイツ語とか入力の仕方がよくわからん文字があるのは
カメラで写すだけで翻訳してくれたら嬉しいよね
5
目指せ100万ダウンロード!
英語、フランス語、ドイツ語、スペイン語、ポルトガル語、イタリア語、ギ
リシャ語、ロシア語、中国語、韓国語、タイ語、日本語…
全ての言語がオフラインで1つのアプリで翻訳出来たら嬉しいよね
ギリシャ語とかドイツ語とか入力の仕方がよくわからん文字があるのは
カメラで写すだけで翻訳してくれたら嬉しいよね
世界辞書を内臓!
世界文字認識!
6
本題
• 全世界辞書を作ろう
• 辞書作成の流れ
• ①単語を集める
• ②翻訳する
• 終わり
• 簡単!
• 結果的に言うと②は簡単だった。
• Google翻訳、Microsoft翻訳のAPIを使った
• ①は悩ましかった。
• もちろん自分はポルトガル語とか全然知らないので単語を集めるとか手作業で
は無理だった
7
単語を集めろ
• そうだ!ウェブスクレイピング(クローラ)だ!
• ポルトガル語の単語を全部集めたい
• ポルトガルのWebニュースからスクレイピングスタート
• ページ内の単語を全てDB登録
• ページ内にあるリンク先にジャンプ
• ページ内の単語を全てDB登録
• ページ内にあるリンク先にジャンプ
• ページ内の単語を全てDB登録
• ・
• ・
• 朝起きたら辞書が出来ている
という寸法
8
単語を集めろ
• 豆知識
• 今ヨーロッパ周辺のウェブニュースはギリシャの話題で満ちている
▫ 「破産」とか「政府」とか「許さない」とかの文字の出現頻度が異常に高い
• もちろんノイズが入ります
▫ ポルトガル辞書の中に英語が混ざったりしている
▫ “Jquery”とかいう単語が混ざったりしている
▫ でも大した問題じゃないよね
• 「文字化け」問題は世界共通だった
▫ ポルトガルのアクセント文字 ARÁNとかも普通に文字化けする
▫ 文字コードの扱いは厄介だった
▫ レンダリング問題とかも厄介だった
9
あいまい検索しろ
• OCRは誤認識してバッシングされるのは宿命
• 誤認識しても正しく辞書が検索できれば問題ない!
• よくある誤認識
• Distance→D;stance
• Kindness→Kinclness
• つまり辞書がd;stanceで検索しても「距離」って出れば良いだけだよね
10
あいまい検索しろ
• D;stanceからdistanceを導く
• まず(Ngramという手法らしい?)3文字ずつに分割する
• D;stance→d;s, ;st, sta, tan, anc, nceの6語に分割
• 辞書の中からd;s, ;st, sta, tan, anc, nceを含む単語を全部撮ってくる
▫ Stand, tango, ancle, onceとか色々出てくる。
▫ Distanceも出てくる
• 出てきた単語と元の語d;stanceとの距離(JaroWinkler距離らしい)を測る
▫ D;stanceとdistanceは距離1
▫ D;stanceとonceは距離4
▫ D;stanceとtangoは距離5
• 距離が近いものがヒット
• OSS(Lucene)の一部にJaroWinklerを実装しているメソッドを参考にした
11
スピードをあげろ
• あいまい検索が思ったより遅い
• PCだと十分速い(0.2sでレスポンス来る)けど、Androidだと5sかかった
りする。(androidなめてた)
12
ODICA!
• 窓の中に文字を入れると上に(リアルタイ
ムで)文字認識結果が出る
13
ODICA!
• 少し遅れて意味が出てきます
▫ ここスピードアップしたいです
14
ODICA!
• もちろんキーボードで入力して辞書と使ってもOK
• むしろそっちの使い方がメインだと思ってる
15
ODICA!
• どや顔のあいまい検索
16
プログラム
• 例(python)
• ページ内のリンク(hrefタグ)を取得
し、重複チェックしてnewurlsに格納
def getlink(urls):
for targeturl in urls:
try:
html = urllib2.urlopen(targeturl['base']).read()
dom = lxml.html.fromstring(html)
dom.make_links_absolute(targeturl['absolute'])
links_from_targeturl = dom.xpath("//@href")
for urlele in links_from_targeturl:
if urlele.find('http') or urlele.find('https'):
existingflag = False
for targeturl_sub in newurls:
if targeturl_sub['base'] == urlele:
existingflag = True
if existingflag == False:
newurl_dic = {'base': urlele,
'absolute': targeturl['absolute']}
newurls.append(newurl_dic)
except Exception, e:
pass
return newurls

More Related Content

Similar to webスクレイピングとあいまい検索で作るオフライン辞書カメラ ODICA

私の(なんくるないさぁ)勉強法
私の(なんくるないさぁ)勉強法私の(なんくるないさぁ)勉強法
私の(なんくるないさぁ)勉強法
Naoki Takaesu
 
Swiftビギナーズ勉強会 第一回@Co-Edo
Swiftビギナーズ勉強会 第一回@Co-EdoSwiftビギナーズ勉強会 第一回@Co-Edo
Swiftビギナーズ勉強会 第一回@Co-Edo
Kanako Kobayashi
 
ガジェットひとつで英語を勉強する方法
ガジェットひとつで英語を勉強する方法ガジェットひとつで英語を勉強する方法
ガジェットひとつで英語を勉強する方法
Hisashi Nakatsuyama
 
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...
Bin Matsui
 
Swift勉強会2
Swift勉強会2Swift勉強会2
Swift勉強会2
Hikari Yanagihara
 
趣味プログラマの先輩からのアドバイス
趣味プログラマの先輩からのアドバイス趣味プログラマの先輩からのアドバイス
趣味プログラマの先輩からのアドバイス
Hiroaki Murayama
 
アドベント2015ios基礎
アドベント2015ios基礎アドベント2015ios基礎
アドベント2015ios基礎
ppengotsu Name
 

Similar to webスクレイピングとあいまい検索で作るオフライン辞書カメラ ODICA (8)

私の(なんくるないさぁ)勉強法
私の(なんくるないさぁ)勉強法私の(なんくるないさぁ)勉強法
私の(なんくるないさぁ)勉強法
 
Swiftビギナーズ勉強会 第一回@Co-Edo
Swiftビギナーズ勉強会 第一回@Co-EdoSwiftビギナーズ勉強会 第一回@Co-Edo
Swiftビギナーズ勉強会 第一回@Co-Edo
 
ガジェットひとつで英語を勉強する方法
ガジェットひとつで英語を勉強する方法ガジェットひとつで英語を勉強する方法
ガジェットひとつで英語を勉強する方法
 
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...
BYE-BYE!! ASP.NET MVC,Hello! ASP.NET SPA~ASP.NET WEB API & ASP.NET CORE WITH ...
 
Swift勉強会2
Swift勉強会2Swift勉強会2
Swift勉強会2
 
趣味プログラマの先輩からのアドバイス
趣味プログラマの先輩からのアドバイス趣味プログラマの先輩からのアドバイス
趣味プログラマの先輩からのアドバイス
 
Swift afterbeginner
Swift afterbeginnerSwift afterbeginner
Swift afterbeginner
 
アドベント2015ios基礎
アドベント2015ios基礎アドベント2015ios基礎
アドベント2015ios基礎
 

Recently uploaded

アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
You&I
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
ooishi1
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
fisuda
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
You&I
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
yamamotominami
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
Yoshitaka Kawashima
 

Recently uploaded (6)

アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
アジャイルの30年(Tree Decades of Agileというブログ記事に関する要約)
 
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
受発注バスターズ説明資料  株式会社batton Saleshub掲載用.pdf
 
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
FIWARE Orion Context Broker コンテキスト情報管理 (Orion 4.0.0対応)
 
NIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしようNIST Cybersecurity Framework 2.0の変更点整理をしよう
NIST Cybersecurity Framework 2.0の変更点整理をしよう
 
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdfCO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
CO2排出量見える化・削減・報告クラウド「アスエネ」サービス紹介_Saleshub.pdf
 
Grokking Simplicity探訪
Grokking Simplicity探訪Grokking Simplicity探訪
Grokking Simplicity探訪
 

webスクレイピングとあいまい検索で作るオフライン辞書カメラ ODICA