これは、画像認識OCRテクノロジー、機械学習、およびシンプルな検索エンジン構造に関連する技術ブログです。卒業プロジェクトを行っている間、毎日研究結果と経験を記録し続けています。
OCR(光学文字認識)テクノロジーとは、電子デバイス(スキャナーやデジタルカメラなど)が紙に印刷された文字をチェックし、暗く明るいパターンを検出して形状を決定し、文字認識方法を使用してシェイプをコンピューターテキストに変換するプロセスを指します。
TesseractのOCRエンジンは、1985年にHP Labsによって最初に開発され、1995年までにOCR業界で最も正確な3つの識別エンジンの1つになりました。しかし、HPはすぐにOCRビジネスを放棄することを決定し、Tesseractも無駄に保たれました。数年後、HPは、テッセラクトを棚に置く代わりに、オープンソースソフトウェア業界に貢献し、それを若返らせる方が良いことに気付きました。2005年に、Tesseractは米国のネバダ州情報技術研究所によって取得され、Googleからのバグの改善、排除、Tesseractの最適化を求めました。 TesseractはGoogle Projectのオープンソースプロジェクトとしてリリースされており、その最新バージョン3.0はすでに中国のOCRをサポートしています。
このような成熟したテクノロジーのバックグラウンドでは、このOCRテクノロジーを使用して、現在の人気のあるモバイルインターネット開発テクノロジーおよび情報検索テクノロジーと組み合わせて、写真の漢字をより迅速かつ正確に取得することを目的としたモバイルWeb検索エンジンを実現したいと考えています。
インターネットの急速な発展とビッグデータの到着により、人々はますますデータと情報に依存しています。ただし、今日のインターネットデータは非常に大きく、データの正確性とデータの合理的な分類には常に大きな問題がありました。この状況を考慮して、ますます多くの人々が、毎日の仕事と生活の中で正確なデータを取得し、より効率的に探している情報を見つける方法を見つけるためのより便利な方法を見つけたいと考えています。同時に、スマートフォンの人気により、より多くの人々が、以前のコピーとタイピング方法を置き換えて、人生と仕事で記録する必要があるデータを記録するなど、写真を撮るなどの非常に効率的な方法を使用することに慣れています。これに触発されて、私は現在、より成熟したOCR(光学文字認識)テクノロジーを使用し、現在の人気のあるインターネット開発テクノロジーと情報検索テクノロジーを使用して、画像言語のフォントを正常に認識できるWeb検索エンジンを実現したいと考えています。写真やスクリーンショットを撮るなどの便利な方法を使用して、より迅速かつ正確に写真からより多くの友人を検索することを目指しています。
バックエンドアーキテクチャは、主にOCRモジュール、検索エンジンモジュール、PHPメッセージミドルウェアモジュールの3つの主要なモジュールに分割されています。
``` shell
brew install tesseract
```
```shell
sudo xcodebuild -license
...
agree
```
``` shell
brew install tesseract
```
```shell
Usage:tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...]
pagesegmode values are:
0 = Orientation and script detection (OSD) only.
1 = Automatic page segmentation with OSD.
2 = Automatic page segmentation, but no OSD, or OCR
3 = Fully automatic page segmentation, but no OSD. (Default)
4 = Assume a single column of text of variable sizes.
5 = Assume a single uniform block of vertically aligned text.
6 = Assume a single uniform block of text.
7 = Treat the image as a single text line.
8 = Treat the image as a single word.
9 = Treat the image as a single word in a circle.
10 = Treat the image as a single character.
-l lang and/or -psm pagesegmode must occur before anyconfigfile.
```
で:
tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...] tesseract 图片名输出文件名-l 字库文件-psm pagesegmode 配置文件示します。
例: tesseract code.jpg result -l chi_sim -psm 7 nobatch
-l chi_simとは、単純化された中国のフォントライブラリを使用することを意味します(中国のフォントライブラリファイルをダウンロードし、それを減圧し、 tessdataディレクトリに保存する必要があります。フォントファイル拡張子は.raineddata単純化された中国のフォントライブラリファイル名: chi_sim.traineddataです)。-psm 7とは、画像がテキストの行であることをtesseract code.jpg伝えることを意味します。このパラメーターは、認識エラー率を減らすことができます。デフォルトは3です。**英語のフォントテスト:**
**中国のフォントテスト:**
次に、フォント言語ライブラリとフォント言語サンプルデータのトレーニングを作成しましょう
**font_properties (new in 3.01)**
A new requirement for training in 3.01 is a font_properties file. The purpose of this file is to provide font style information that will appear in the output when the font is recognized. The font_properties file is a text file specified by the -F filename option to mftraining.
Each line of the font_properties file is formatted as follows:
<fontname> <italic> <bold> <fixed> <serif> <fraktur>
where <fontname> is a string naming the font (no spaces allowed!), and <italic>, <bold>, <fixed>, <serif> and <fraktur> are all simple 0 or 1 flags indicating whether the font has the named property.
When running mftraining, each .tr filename must match an entry in the font_properties file, or mftraining will abort. At some point, possibly before the release of 3.01, this matching requirement is likely to shift to the font name in the .tr file itself. The name of the .tr file may be either fontname.tr or [lang].[fontname].exp[num].tr.
**Example:**
font_properties file:
timesitalic 1 0 0 1 0
shapeclustering -F font_properties -U unicharset eng.timesitalic.exp0.tr
mftraining -F font_properties -U unicharset -O eng.unicharset eng.timesitalic.exp0.tr
Note that in 3.03, there is a default font_properties file, that covers 3000 fonts (not necessarily accurately) in training/langdata/font_properties.
**Clustering**
When the character features of all the training pages have been extracted, we need to cluster them to create the prototypes.
The character shape features can be clustered using the shapeclustering, mftraining and cntraining programs:
**shapeclustering (new in 3.02)**
shapeclustering should not be used except for the Indic languages.
shapeclustering -F font_properties -U unicharset lang.fontname.exp0.tr lang.fontname.exp1.tr ...
shapeclustering creates a master shape table by shape clustering and writes it to a file named shapetable.
**mftraining**
mftraining -F font_properties -U unicharset -O lang.unicharset lang.fontname.exp0.tr lang.fontname.exp1.tr ...
The -U file is the unicharset generated by unicharset_extractor above, and lang.unicharset is the output unicharset that will be given to combine_tessdata.
mftraining will output two other data files: inttemp (the shape prototypes) and pffmtable (the number of expected features for each character). In versions 3.00/3.01, a third file called Microfeat is also written by this program, but it is not used. Later versions don't produce this file.
NOTE: mftraining will produce a shapetable file if you didn't run shapeclustering. You must include this shapetable in your traineddata file, whether or not shapeclustering was used.
**cntraining**
cntraining lang.fontname.exp0.tr lang.fontname.exp1.tr ...
This will output the normproto data file (the character normalization sensitivity prototypes).
公式ウィキ
中国の指導
Macでは、端末を有効にするためにスポットライトを使用します
vi /etc/profile
この時点で、キーボード上の文字Iを押して編集モードに入り、端末の下に次の2行のコマンドを入力します。
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_77
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
次に、ESCを押して編集を終了し、次に入力してください:wq!出口
source /etc/profile
java -version
Javaバージョンの情報が表示されている場合、インストールが成功していることを証明します!
はじめに:コードプロジェクトが大きくなると、再コンパイル、パッケージ化、テストなどが非常に複雑で反復的になります。したがって、これらのタスクをバッチで完了するのに役立つC言語に作成されたスクリプトがあります。 Javaのアプリケーションはプラットフォームに依存しないものであり、もちろん、これらのバッチタスクを完了するためにプラットフォーム関連の作成スクリプトを使用しません。 ANT自体はこのようなプロセススクリプトエンジンであり、コールプログラムを自動化してコンピレーション、パッケージング、プロジェクトのテストなどを完了するために使用されます。Javaに基づくプラットフォームに依存しないことに加えて、スクリプト形式はXMLに基づいており、スクリプトを作成するよりも維持しやすいです。
バージョンの選択:Apache-Ant-1.9.6-bin.zip
住所をダウンロード:ANT公式ウェブサイト
インストールを開始します:
sudo sh
cd /usr/local/
chown YourUserName:staff apache-ant-1.9.6
ln -s apache-ant-1.9.6 ant
vi /etc/profile
この時点で、キーボード上の文字Iを押して編集モードに入り、端末の下に次の2行のコマンドを入力します。
export ANT_HOME=/usr/local/ant
export PATH=${PATH}:${ANT_HOME}/bin
次に、ESCを押して編集を終了し、次に入力してください:wq!出口
source /etc/profile
ant -version
Apache Ant(TM)バージョン1.9.6が表示されます...このディスプレイは、インストールが成功したことを証明しています!
はじめに:現在、Nutchは2つの大きなバージョン1.xと2.xに分割されています。 Apacheは、これら2つの大きなバージョンを独立して開発および維持します。その中で、1.xと2.xの最大の違いは、1.xがHadoopのHDFSファイルシステムに基づいていることです。2.xはデータストレージレイヤーを要約し、HBaseやMySQLなどのデータベースにデータを保存できます。もう1つの重要なことは、Nutchが1.2以前に完全な検索エンジンとしてリリースされたことです。 1.3以来、Nutch自体には主にクロール機能のみがあります。クロールされたデータにインデックスを付けて検索する必要がある場合は、SOLRフルテキスト検索サーバーを使用する必要もあります。 NutchとSolrの両方はLuceneに基づいて開発されているため、NutchによってrawうデータはSolRで簡単にインデックス化できます。 Nutchの公式Webサイトでは、コンパイルされた1.xパッケージをダウンロードできますが、2.xはソースコードのみを提供し、自分でコンパイルする必要があります。 NutchはAntを使用して構築されています。自分でコンパイルする場合は、ソースコードをコンパイルするためにANTをインストールする必要があります。 Nutchバージョンを選択する方法については、主に次の問題を検討します。少数のWebサイトをクロールしてインデックスを作成するだけで、1.xと2.xを使用することができ、分散型を使用する必要なくスタンドアロンを使用することもできます。ただし、多数のWebサイトをクロールしたり、Web全体をクロールしたりする場合は、1.xはビッグデータの処理専用に作成されたHadoopファイルシステムに基づいているため、1.xを選択して分散型を使用することをお勧めします。多数のWebサイトをrawっているときに2.xを使用する場合、いくつかのパフォーマンスの問題に遭遇する可能性があります。 MySQLを使用してデータを保存する場合、Webページのデータが数千億を超えると、パフォーマンスが悪夢になります。 Nutch1.xのさまざまなバージョンも大きく変更されており、コマンドの実行は大きな変更を受けました。したがって、初心者はこのチュートリアルの対応するバージョン1.10をダウンロードすることをお勧めします。 Nutchの使用に精通している場合、これらの変更はあなたにあまり影響を与えません。 Nutchは、今日最も人気のあるオープンソースクローラーの1つであり、企業で広く使用されています。 Nutchのプラグインメカニズムにより、開発者はWebクロール戦略を柔軟にカスタマイズすることができます。 Nutchには長い歴史があり、今日の有名なHadoopはNutchから開発されました。 Nutchは、スタンドアロンモードだけでなく、分散モードでも実行できます。 NutchはLinux環境での作業のみをサポートするため、LinuxのようなOS Xの下で直接使用できます。
バージョンの選択:apache-nutch-1.10-src.zip
住所をダウンロード:Nutchの公式Webサイト
インストールを開始します:
unzip apache-nutch-1.10-src.zip
cd apache-nutch-1.10
vi conf/nutch-default.xml
属性http.agent.nameを見つけ、conf/nutch-site.xmlにコピーし、値を空にしないように変更します。 HD Nutchエージェントとしてのカスタマイズは次のとおりです。その後、コマンドがエラーを報告するコマンドをクロールし続けます。変更されたNutch-Site.xmlは次のとおりです。
<configuration>
<property>
<name>http.agent.name</name>
<value>myNutch</value>
<description>HTTP 'User-Agent' request header. MUST NOT be empty -
please set this to a single word uniquely related to your organization.
NOTE: You should also check other related properties:
http.robots.agents
http.agent.description
http.agent.url
http.agent.email
http.agent.version
and set their values appropriately.
</description>
</property>
</configuration>
属性http.agent.nameは、クローラーをマークするために使用され、クロールされたウェブサイトがそれらを識別できるようにします。
nutch-site.xmlで構成されているプロパティはnutch-defaultのデフォルトのプロパティをオーバーライドします。ここでは、属性http.agent.nameのみを変更するだけで、他の人に変更は行われません。
この時点で、NUTCHを設定し、Nutch Home Directoryの次のコマンドを使用してソースコードをコンパイルしました。
実行するためにNutch Home Directoryに切り替えます。
ant
より多くの依存関係パッケージをダウンロードする必要があるため、最初のコンピレーションプロセスには多くの時間がかかります。特定の時間は、実際のネットワークの状況に依存します。速い場合は5〜10分かかり、遅い場合は20分以上かかります。
次の警告は、編集の開始時に報告されます。
リソースorg/sonar/ant/antlib.xmlから定義をロードできませんでした。見つけることができませんでした。
この警告は、コンピレーションの結果に影響を与えず、無視できます。
コンパイルプロセス中にネットワークの問題が発生する可能性もあります。次のコマンドを使用して最後のコンピレーション結果をクリアする必要があります(既にダウンロードされた依存関係パッケージは削除されません):
ant clean
ネットワークが不十分な場合、上記の2つのステップを複数回繰り返すことができます。
同様の情報が表示されると、コンピレーションが成功することを意味します。
成功しました
合計時間:1分7秒
下の図に示すように:
Nutchが正常にコンパイルされた後、Homeディレクトリでランタイムフォルダーが生成されます。 2つのサブフォルダーデプロイとローカルが含まれています。展開は分散クロールに使用され、ローカルはローカルのスタンドアロンクロールに使用されます。このセクションでは、最初に地元のスタンドアロンのクロールの使用について説明し、その後のチュートリアルに分散したクロールが配置されています。
ローカルフォルダーを入力してから、ビンフォルダーを入力します。 2つのスクリプトファイルがあります。1つはナットで、もう1つはクロールです。その中で、Nutchには必要なすべてのコマンドが含まれており、クロールは主にワンストップクロールに使用されます。
下の図に示すように:
unzip solr-4.10.4.zip
フォルダーsolr-4.10.4を取得し、runtime/local/conf/schema-solr4.xmlをNutchディレクトリにコピーします。
cp apache-nutch-1.10/runtime/local/conf/schema-solr4.xml solr-4.10.4/example/solr/collection1/conf
solrの元のschema.xmlファイルを削除します。
rm –f solr-4.10.4/example/solr/collection1/conf/schema.xml
Schema-Solr4.xmlにコメントします
<copyField source="latLon" dest="location"/>
Schema-solr4.xmlをschema.xmlに変更します。
mv solr-4.10.4/example/solr/collection1/conf/ schema-solr4.xml solr-4.10.4/example/solr/collection1/conf/ schema.xml
この時点で、SOLRが構成され、SOLR-4.10.4/例のディレクトリを入力します。
cd solr-4.10.4/example
Solrを開始:
現時点では、ブラウザからポート8983にアクセスして、SolRのコントロールインターフェイスを表示できます。
http:// localhost:8983/solr
Nutch Binディレクトリではなく、Nutch Home Directoryで実行するコマンドのほとんどを入力します。これにより、複雑なコマンドをより便利に実行できるためです。ワンストップクロールコマンドをご覧ください。
bin/crawl
bin/nutch
上記の2つのコマンドを入力すると、それぞれの使用方法が表示されます。以下の図に示すように、いくつかの一般的に使用されるコマンドについては、後で詳しく説明します。
クロールの使用方法を確認してください。
-i |インデックスは、構成されたインデクサーにクロールされた結果を追加するようにナットに指示するために使用されます。
-dは、ナットコールに渡されたパラメーターを構成するために使用され、ここでインデクサーを構成できます。
シードURLを保存するために使用されるシードディールシードファイルディレクトリ、つまりクローラーが最初にクロールするURL。
データクロールのためのクロールディールストレージパス。
numラウンドループクロール。
使用例:
Nutchのランタイム/ローカルディレクトリを入力し、新しいURLSフォルダーを作成します。
URLSフォルダにURLを保存する新しいシードファイル、Seed.txt
初期クロールURLをurls/seed.txt:http://www.163.comに追加します
SOLRサービスをオンにします。そうしないと、インデックスを通常SOLRで確立できません
bin/crawl -i -D solr.server.url=http://localhost:8983/solr/ urls/ TestCrawl/ 2
このコマンドでは、 -私はクローラーに、特定のインデックスにクローラーを追加するように指示します。 solr.server.url = http:// localhost:8983/solr/はsolrインデクサーのアドレスであり、urls/はシードURLファイルパスであり、testcrawlはナットがクローラーデータ(URL、クローリングコンテンツなどを含む)を保存するために使用するフォルダーです。ここでパラメーター2は、ループが2回クロールすることを意味します。
上記のコマンドを実行することにより、Webページのクロールを開始できます。 http://:8983/solrをブラウザに入力し、Collection1を選択すると、キーワードを使用してインデックス付きコンテンツを検索できます。ここでは、クローラーが指定されたURLのすべてのページをrawっていないことに注意する必要があります。クロール状況を表示する特定の方法については、以下の分散クロールを参照してください。
クロールが成功した後、次の図を次の図に示します。
時には、ワンストップクロールが私たちのニーズをうまく満たすことができない場合があります。したがって、ここでは、分散クロールの方法を紹介します。分散クロールの実際のクロールプロセスには複数のコマンドが含まれています。操作を簡素化するために、クロールは複数のコマンドを組み合わせてユーザーに提供します。 Nutch Crawlerテクノロジーを詳細に学びたい場合は、Crawlコマンドだけを使用するだけでは不十分です。また、クロールプロセスに非常に精通する必要があります。ここでは、前のチュートリアルでSeed.txtに保存されているURL情報を使用する必要があります。また、ステップでデータを再クロールする必要があるため、データ/crawldb、data/linkdb、およびdata/segmentsフォルダーの下のコンテンツを削除する必要があります。
Crawlコマンドを実行した後、TestCrawlフォルダーは、Runtime/Local of Nutchの下で生成されます。これには、Crawldb、LinkDB、およびセグメントの3つのフォルダーが含まれます。
crawldb:Nutchが見つけたすべてのURLが含まれています。これには、URLがrawっていたかどうか、いつrawいされたかについての情報が含まれています。
LinkDB:Nutchによって発見されたCrawldbのURLに対応するすべてのリンクと、ソースURLとアンカーテキストが含まれています。
セグメント:その後に名前が付けられた複数のセグメントフォルダーが含まれています。各セグメントは、一連のURLを含むクロールユニットであり、各セグメントには次のフォルダーが含まれています。
crawl_generate:待抓取的URL
crawl_fetch:每个URL的抓取状态
content:从每个URL抓取到的原始内容
parse_text:从每个URL解析得到的文本
parse_data:从每个URL解析得到的外链和元数据
crawl_parse:包含外链URL,用来更新crawldb
bin/nutch inject data/crawldb urls
指定されたURLでページをクロールするには、データベース(crawldb)からクロールリストを生成する必要があります。
bin/nutch generate data/crawldb data/segments
Generateコマンドが実行された後、クロールするページのリストが生成され、クロールリストは新しく作成されたセグメントパスに保存されます。セグメントのフォルダーは、作成された時間に従って命名されます(このチュートリアルのフォルダー名は201507151245です)。
生成には多くのオプションのパラメーターがあります。読者は、次のコマンドを使用して自分で表示できます(他のコマンドにも同じことが言えます)。
bin/nutch generate
Generateによって生成されたクロールリストに従って、Webページをクロールします。
bin/nutch fetch data/segments/201507151245 #这里的201507151245为文件夹名,需要根据自己的情况进行更改,或者直接采用data/segments文件夹,这样的操作对segments文件夹下的所有子文件夹生效,后文同理。
bin/nutch parse data/segments/201507151245
クロールされた結果に基づいてデータベースを更新します。
bin/nutch updated data/crawldb –dir data/segments/201507151245
データベースには、最初のページが更新された後にすべてのエントリポイントが含まれていること、および初期コレクションから新しく発見されたページの新しいエントリポイントが含まれています。
インデックスを作成する前に、最初にすべてのリンクを反転させて、ページのソースアンカーテキストにインデックスを作成できるようにします。
bin/nutch invertlinks data/linkdb –dir data/segments/201507151245
SOLRサービスを開始すると、クロールされたリソースにインデックスを付けます。
bin/nutch index data/crawldb -linkdb data/linkdb -params solr.server.url=http://localhost:8983/solr -dir data/segments/201507151245
フルテキストインデックスが確立されたら、URLが一意になるように、URLを複製して処理する必要があります。
bin/nutch dedup
このコマンドは、署名に基づいて重複したURLを探します。 status_db_duplicateとしてマークされた重複したURLの場合、クリーニングおよびインデックス作成タスクはタグに従ってそれらを削除します。
bin/nutch clean –D solr.server.url=http://192.168.1.11:8983/solr data/crawldb
http301、404を削除し、solrからドキュメントを複製します。
これまでのところ、段階的なクロールを使用して、すべてのクロールステップを完了しています。通常のクロールでは、http:// localhost:8983/solrで検索できます。
通常、データベースのステータス情報を表示し、READDBの使用法を表示するために使用されるNutchのクロールデータベースの読み取りまたはエクスポートに使用されます。
Usage: CrawlDbReader <crawldb> (-stats | -dump <out_dir> | -topN <nnnn> <out_dir> [<min>] | -url <url>)
<crawldb>directory name where crawldb is located
-stats [-sort] print overall statistics to System.out
[-sort]list status sorted by host
-dump <out_dir> [-format normal|csv|crawldb]dump the whole db to a text file in <out_dir>
[-format csv]dump in Csv format
[-format normal]dump in standard format (default option)
[-format crawldb]dump as CrawlDB
[-regex <expr>]filter records with expression
[-retry <num>]minimum retry count
[-status <status>]filter records by CrawlDatum status
-url <url>print information on <url> to System.out
-topN <nnnn> <out_dir> [<min>]dump top <nnnn> urls sorted by score to <out_dir>
[<min>]skip records with scores below this value.
This can significantly improve performance.
ここで、CrawldbはURL情報を保存するデータベースです。 - スタットとは、統計的ステータス情報の表示を意味します - ダンプとは統計情報のエクスポートを意味し、URLとは指定されたURLの情報を表示し、データベースのステータス情報を表示することを意味します。
得られた統計結果は次のとおりです。
MacBook-Pro:local root# bin/nutch readdb TestCrawl/crawldb -stats
CrawlDb statistics start: TestCrawl/crawldb
Statistics for CrawlDb: TestCrawl/crawldb
TOTAL urls: 290
retry 0: 290
min score: 0.0
avg score: 0.017355172
max score: 1.929
status 1 (db_unfetched): 270
status 2 (db_fetched): 17
status 3 (db_gone): 2
status 4 (db_redir_temp): 1
CrawlDb statistics: done
合計URLはURLの総数を表し、再試行は再試行時間の数を表し、最小スコアは最低スコア、ステータス1(db_unfetched)はクロールされていない、ステータス2(db_fetched)はrawう数です。
readlinkdbは、すべてのURLとアンカーテキストをエクスポートするために使用され、使用状況を表示します。
Usage: LinkDbReader <linkdb> (-dump <out_dir> [-regex <regex>]) | -url <url>
-dump <out_dir>dump whole link db to a text file in <out_dir>
-regex <regex>restrict to url's matching expression
-url <url>print information about <url> to System.out
ここでのダンプとURLパラメーターは、readDBコマンド、データのエクスポートと同じです。
bin/nutch readlinkdb data/linkdb -dump linkdb_dump
データをlinkdb_dumpフォルダーにインポートし、エクスポートされたデータ情報を表示します。
cat linkdb_dump /*
エクスポートされた情報が次の形式に似ていることがわかります。
fromUrl: http://www.sanesee.com/article/step-by-step-nutch-introduction anchor: http://archive.apache.org/dist/nutch/
つまり、ソースURLが記録されます。
RedSegは、データをセグメントで表示またはエクスポートし、使用法を表示するために使用されます。
Usage: SegmentReader (-dump ... | -list ... | -get ...) [general options]
* General options:
-nocontentignore content directory
-nofetchignore crawl_fetch directory
-nogenerateignore crawl_generate directory
-noparseignore crawl_parse directory
-noparsedataignore parse_data directory
-noparsetextignore parse_text directory
* SegmentReader -dump <segment_dir> <output> [general options]
Dumps content of a <segment_dir> as a text file to <output>.
<segment_dir>name of the segment directory.
<output>name of the (non-existent) output directory.
* SegmentReader -list (<segment_dir1> ... | -dir <segments>) [general options]
List a synopsis of segments in specified directories, or all segments in
a directory <segments>, and print it on System.out
<segment_dir1> ...list of segment directories to process
-dir <segments>directory that contains multiple segments
* SegmentReader -get <segment_dir> <keyValue> [general options]
Get a specified record from a segment, and print it on System.out.
<segment_dir>name of the segment directory.
<keyValue>value of the key (url).
Note: put double-quotes around strings with spaces.
エクスポートセグメントデータ:
bin/nutch readseg -dump data/segments/20150715124521 segment_dump
データをsegment_dumpフォルダーにインポートして、エクスポートされたデータ情報を表示します。
cat segment_dump /*
非常に具体的なWebページ情報が含まれていることがわかります。
WAMP/MAMP、またはPHPSTORMとその組み込みサーバーを使用できます。
特定の操作については、Portalを参照してください
ターミナルを開き、プロジェクトパスに切り替えます。
composer require silex/silex twig/twig thiagoalessio/tesseract_ocr:dev-master PHPのミニフレームワークSilex Frameworkを使用しているため、図に示すように、PHPソースエンジニアリングプロジェクトMVC(パブリック、アップロード、ビュー)の構造を確立する必要があります。
<?php
//如果是在WAMP等其他集成环境下,需要重新获取环境变量的PATH,不然无法调用Tesseract
$ path = getenv ( ' PATH ' );
putenv ( " PATH= $ path :/usr/local/bin " );
require __DIR__ . ' /../vendor/autoload.php ' ;
use Symfony Component HttpFoundation Request ;
$ app = new Silex Application ();
$ app -> register ( new Silex Provider TwigServiceProvider (), [
' twig.path ' => __DIR__ . ' /../views ' ,
]);
$ app [ ' debug ' ] = true ;
$ app -> get ( ' / ' , function () use ( $ app ) {
return $ app [ ' twig ' ]-> render ( ' index.twig ' );
});
$ app -> post ( ' / ' , function ( Request $ request ) use ( $ app ) {
//TODP
});
$ app -> run (); // Grab the uploaded file
$ file = $ request -> files -> get ( ' upload ' );
// Extract some information about the uploaded file
$ info = new SplFileInfo ( $ file -> getClientOriginalName ());
// 产生随机文件名来减少文件名冲突
$ filename = sprintf ( ' %d.%s ' , time (), $ info -> getExtension ());
// Copy the file
$ file -> move ( __DIR__ . ' /../uploads ' , $ filename );**相互作用プロセス:**
1)ユーザーはホームページWebサイトURLを入力し、ホームページを入力し、サービスを楽しんで、サービスの詳細について学びます。
2)ユーザーは、アップロードする前に、検索ボックスとプレビューに必要な検索画像をアップロードします。
3)ユーザーがアップロードされた画像が正しいことを確認したら、画像検索ボタンをクリックしてアップロードして画像を識別します。サーバー側のこの部分には大量の計算があるため、結果を返すのに2〜5秒かかるため、ユーザーにロードページが表示されます。
4)画像認識が完了し、読み込みページが消え、認識結果プレビュー確認ページが入力されます。
5)ユーザーがコンテンツを確認した後、検索をクリックして検索エンジンモジュールを入力して検索結果を取得できます。
ビジュアルデザインは、製品組成の非常に重要なコンポーネントを占めており、製品の初期印象、使用中の経験、および最終的な印象などに直接影響します。このデザインでは、私はそれを物事を処理できるシステムと見なしませんでしたが、私が慎重に作成した製品と見なしました。したがって、私はこのシステムのフロントエンドの視覚設計とユーザーエクスペリエンスに細心の注意を払っています。サイト全体で色を選択するために、私は、赤と青の一般に認識されるBaidu検索エンジンのテーマの色を選びました。ホームページの背景は、赤と青の遷移色を使用し、透明度を調整します。 CSSコードを介して描画されます。これにより、読み込み時間を節約し、ユーザーが視覚的な影響を与えることができます。同時に、ホームページのテキストの説明が下の影に追加されており、Microsoft Thin Blackフォントを使用して、視覚をより階層化します。画像検索ボックスとプレビューボックスも影を増やし、プレビューフィールドの重要性に対して異なる色と色素性の区別が作成されます。ユーザーは視覚的にリフレッシュして簡潔になり、できるだけ早く必要な情報を見つけることができます。次に、単純な読み込みページを通過します。ここでは、待機中のサークルがズームインとアウトするために作られているため、ユーザーが待ち時間でイライラしないようにします。同時に、システムの背景が計算と実行を実行していることをユーザーに伝えます。認識結果ページにジャンプするとき、すべてのテキストの色とフォントサイズは、コピーの重要性に応じて視覚的に調整されているため、ユーザーは重要な情報をフィルタリングするのにあまりにも多くの時間を費やす必要がありません。 2つのボタンのスケジューリングと色の選択は、クリックの欲求と感覚を高める傾向があり、ユーザーに次の操作を実行するように促します。最終検索結果ページについては、本に似た章に設計しました。各リストには、検索結果のWebページのタイトル、Webページの概要、包含時間、重量、視覚的な影響と認識を高めることに基づいて、異なるスケジューリングとフォントサイズの色の調整があります。ユーザーは、マス検索エンジンといくつかの共通点を持っていると感じさせますが、自分の性格の一部を明らかにし、ユーザーに馴染みのある斬新な体験を提供し、リフレッシュで広告なしで不必要な干渉情報の特性を保持します。さらに、すべての視覚設計は、現在のレスポンシブデザインコンセプトを組み合わせており、PCとモバイルの両方で優れたユーザーエクスペリエンスと視覚効果を持っています。
**小枝を使用したテンプレートの書き込み:**
フロントエンドのエクスペリエンスを下の図に示します。
主にBootstrap 3.4に基づいており、XDK/PhoneGapでパッケージ化し、対応するNAアプリにまとめてアプリケーション市場に公開できます。モバイルエクスペリエンスを以下の図に示します。
大学の4年間で私を助けてくれたすべての教師とすべてのクラスメートに感謝します。彼らは私に専門的な知識を教えてくれました。過去4年間の研究と科学的研究を通じて、私の知識構造と科学的研究能力が新しいレベルに達しただけでなく、さらに重要なことは、社会に統合され、完全なインターンシップの経験を与えてくれたため、大学院生が学部の学位で経験できない多くのインターネット企業の仕事経験を体験することができます。瞬く間に、4年間の大学が終わりに近づいています。緊張した気分でこの卒業論文を完了したとき、私は無知な子供から成熟した若者にも変わりました。同じこと - 汗だけがあなたを欺くことはありません。最後に、私が大学で出会ったすべての人、電子科学技術大学に感謝し、4年間の努力に感謝します。
https://github.com/daijiale/ocr_fontssearchengine。
http://v.youku.com/v_show/id_xmtyzndy2ndyxng = = = .html。