Dies ist ein technischer Blog im Zusammenhang mit der Bilderkennung OCR -Technologie, maschinellem Lernen und einer einfachen Suchmaschinenkonstruktion. Hier erfasse ich jeden Tag die Forschungsergebnisse und Erfahrungen, während ich das Abschlussprojekt durch mache.
Die OCR -Technologie (optische Charaktererkennung) bezieht sich auf den Prozess, in dem elektronische Geräte (wie Scanner oder Digitalkameras) auf Papier gedruckt werden, ihre Formen durch Erkennung dunkler und heller Muster bestimmen und dann die Formen mithilfe von Charaktererkennungsmethoden in Computertext übersetzen.
Der OCR -Motor von Tesseract wurde erstmals 1985 von HP Labs entwickelt und war 1995 zu einem der drei genauesten Identifikationsmotoren in der OCR -Branche geworden. HP beschloss jedoch bald, sein OCR -Geschäft aufzugeben, und Tesseract wurde auch vergebens gehalten. Einige Jahre später erkannte HP, dass es besser wäre, Tesseract in die Open -Source -Softwareindustrie zu leisten und sie zu verjüngen. 2005 wurde Tesseract vom Nevada -Institut aus Informationstechnologie in den USA erhalten und sich verbessert, beseitigt und Tesseract von Google optimiert. Tesseract wurde als Open -Source -Projekt im Google Project veröffentlicht, und die neueste Version 3.0 unterstützt bereits den chinesischen OCR.
In einem so ausgereiften technologischen Hintergrund möchte ich diese OCR -Technologie wirklich nutzen und mit der aktuellen populären Technologie für mobile Internetentwicklung und Informationsabruf kombinieren, um eine mobile Web -Suchmaschine zu realisieren, mit der die chinesischen Charaktere auf dem Bild erfolgreich identifiziert werden können, um die Informationen, die Sie von den Bildern möchten, schneller und genauer zu erhalten.
Mit der raschen Entwicklung des Internets und der Ankunft von Big Data sind die Menschen zunehmend von Daten und Informationen abhängig. Die heutigen Internetdaten sind jedoch sehr groß, und es gab immer große Probleme mit der Genauigkeit der Daten und der angemessenen Klassifizierung von Daten. Angesichts dieser Situation hoffen immer mehr Menschen, eine bequemere Möglichkeit zu finden, um genaue Daten in der täglichen Arbeit und im Leben zu erhalten und den Weg zu finden, um die Informationen zu finden, nach denen sie effizienter suchen. Gleichzeitig sind immer mehr Menschen daran gewöhnt, extrem effiziente Methoden wie das Aufnehmen der vorherigen Kopier- und Schreibmethoden zu ersetzen, um Daten zu ersetzen, die in Leben und Arbeit aufgezeichnet werden müssen, immer mehr Menschen daran gewöhnt. Inspiriert von diesem, möchte ich derzeit die reifere OCR -Technologie (Optical Character Recognition) sowie die aktuelles populäres Internetentwicklungstechnologie und Informationsabruf -Technologie verwenden, um eine Web -Suchmaschine zu realisieren, mit der Bildsprach -Schriftarten erfolgreich erkennen können. Ziel ist es, mehr Freunde aus Bildern durch bequeme Methoden wie das Aufnehmen von Fotos und Screenshots schneller und genauer zu durchsuchen.
Die Backend -Architektur ist hauptsächlich in drei Hauptmodule unterteilt: OCR -Modul, Suchmaschinenmodul und PHP Message Middleware Modul.
``` 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.
```
In:
tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...] Zeigt tesseract 图片名输出文件名-l 字库文件-psm pagesegmode 配置文件.
Zum Beispiel: tesseract code.jpg result -l chi_sim -psm 7 nobatch
-l chi_sim bedeutet die Verwendung einer vereinfachten chinesischen Schriftbibliothek (Sie müssen die chinesische Schriftbibliotheksdatei herunterladen, sie dekomprimieren und im tessdata -Verzeichnis speichern. Die Erweiterung der Schriftart der Schriftart chi_sim.traineddata .raineddata-psm 7 bedeutet, Tesseract code.jpg zu sagen, dass das Bild eine Textzeile ist. Dieser Parameter kann die Erkennungsfehlerrate verringern. Der Standard ist 3 .** Englisch Schriftstest: **
** Chinesischer Schriftstest: **
Erstellen wir nun die Schriftart der Schriftart und das Training von Beispieldaten für Schriftartsprachen
**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).
Offizielles Wiki
Chinesische Führung
Verwenden Sie auf dem Mac Spotlight, um das Terminal zu aktivieren
vi /etc/profile
Zu diesem Zeitpunkt drücken Sie den Buchstaben I auf der Tastatur, um den Bearbeitungsmodus einzugeben, und geben Sie die folgenden zwei Befehlszeilen unter dem Terminal ein:
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
Drücken Sie dann ESC, um die Bearbeitung zu beenden, und geben Sie dann ein: WQ! Ausfahrt
source /etc/profile
java -version
Wenn die Java -Versionsinformationen angezeigt werden, beweist sie, dass die Installation erfolgreich ist!
Einführung: Wenn ein Codeprojekt groß wird, wird jedes Mal, wenn es neu kompiliert, verpackt, getestet usw. wird. Daher gibt es in der C -Sprache Skripte, um diese Aufgaben in Chargen zu erledigen. Anwendungen in Java sind plattformunabhängig und verwenden natürlich keine Plattform, um diese Stapelaufgaben zu erledigen. Ant selbst ist eine solche Prozessskript-Engine, mit der das Anrufprogramm automatisiert wird, um die Kompilierung, Verpackung, das Testen von Projekten usw. abzuschließen. Das Skriptformat basiert nicht nur plattformunabhängig, sondern basiert auf XML.
Versionsauswahl: Apache-Ant-1.9.6 --Bin.zip
Download -Adresse: Ameise offizielle Website
Starten Sie die Installation:
sudo sh
cd /usr/local/
chown YourUserName:staff apache-ant-1.9.6
ln -s apache-ant-1.9.6 ant
vi /etc/profile
Zu diesem Zeitpunkt drücken Sie den Buchstaben I auf der Tastatur, um den Bearbeitungsmodus einzugeben, und geben Sie die folgenden zwei Befehlszeilen unter dem Terminal ein:
export ANT_HOME=/usr/local/ant
export PATH=${PATH}:${ANT_HOME}/bin
Drücken Sie dann ESC, um die Bearbeitung zu beenden, und geben Sie dann ein: WQ! Ausfahrt
source /etc/profile
ant -version
Apache ANT (TM) Version 1.9.6 erscheint erscheint ... Diese Anzeige beweist, dass die Installation erfolgreich ist!
Einführung: Derzeit ist Nutsch in zwei große Versionen 1.x und 2.x unterteilt. Apache entwickelt und pflegt diese beiden großen Versionen unabhängig voneinander. Unter ihnen besteht der größte Unterschied zwischen 1.x und 2.x darin, dass 1.x auf dem HDFS -Dateisystem von Hadoop basiert, während 2.x die Datenspeicherschicht abstrahiert und die Daten in Datenbanken wie HBase und MySQL speichern kann. Eine weitere wichtige Sache ist, dass Nutch in 1.2 und zuvor als vollständige Suchmaschine freigegeben wurde. Seit 1.3 hat Nutch selbst hauptsächlich Krabbungsfunktionen. Wenn es notwendig ist, die krabbenden Daten zu indizieren und zu durchsuchen, müssen auch der Solr-Volltext-Suchserver verwendet werden. Da sowohl Nutsch als auch SolR basierend auf Lucene entwickelt werden, können die durch Nutsch krabbelten Daten in Solr leicht indiziert werden. Die offizielle Nutch -Website kann das kompilierte 1.x -Paket herunterladen, 2.x bietet jedoch nur Quellcode und muss von Ihnen selbst kompiliert werden. Nutsch wird mit Ameisen gebaut. Wenn Sie es selbst kompilieren, müssen Sie Ant installieren, um den Quellcode zu kompilieren. In Bezug auf die Auswahl der Nutch-Version berücksichtigen wir hauptsächlich die folgenden Probleme: Wenn Sie nur eine kleine Anzahl von Websites kriechen und sie indexieren müssen, können Sie 1.x und 2.x verwenden, und Sie können sogar Standalone verwenden, ohne verteilte erforderlich zu sein. Wenn Sie jedoch eine große Anzahl von Websites kriechen oder sogar das gesamte Web kriechen möchten, wählen Sie am besten 1.x und verwenden Sie verteilt, da 1.x auf dem Hadoop -Dateisystem basiert, das speziell für die Verarbeitung von Big Data erstellt wurde. Wenn Sie 2.x verwenden, wenn Sie eine große Anzahl von Websites kriechen, können Sie auf einige Leistungsprobleme stoßen. Wenn Sie MySQL zum Speichern von Daten verwenden, ist die Leistung ein Albtraum, wenn die Webseitendaten zig Milliarden überschreiten. Verschiedene Versionen von Nutch1.x haben sich ebenfalls stark verändert, und die Ausführung von Befehlen hat sich größere Änderungen erfahren. Daher wird empfohlen, dass Anfänger die entsprechende Version 1.10 dieses Tutorials herunterladen. Wenn Sie mit Nutch vertraut sind, haben diese Änderungen keinen großen Einfluss auf Sie. Nutch ist heute einer der beliebtesten Open -Source -Crawler und wurde von Unternehmen weit verbreitet. Mit dem Plug-in-Mechanismus von Nutsch ermöglicht es Entwicklern, Web-Crawling-Strategien flexibel anzupassen. Nutch hat eine lange Geschichte und der berühmte Hadoop heute wurde von Nutch entwickelt. Nutsch kann nicht nur im eigenständigen Modus, sondern auch im verteilten Modus ausgeführt werden. Nutch unterstützt nur die Arbeit in Linux-Umgebungen, sodass es direkt unter Linux-ähnliches OS X verwendet werden kann.
Versionsauswahl: Apache-Nutch-1.10-src.zip
Download -Adresse: Nutsch Offizielle Website
Starten Sie die Installation:
unzip apache-nutch-1.10-src.zip
cd apache-nutch-1.10
vi conf/nutch-default.xml
Suchen Sie das Attribut http.agent.name, kopieren Sie es in Conf/Nutch-Site.xml und ändern Sie den Wertwert, um nicht leer zu sein. Hier ist eine Anpassung als: HD -Nutch -Agent, und dann kriechen Sie weiter, dass der Befehl einen Fehler meldet. Die modifizierte Nutsch-Site.xml lautet wie folgt:
<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>
Das Attribut http.agent.name wird zum Markieren von Crawler verwendet, sodass die krabbelende Website sie identifizieren kann.
Die in nutch-site.xml konfigurierten Eigenschaften überschreiben die Standardeigenschaften in nutch-default . Hier ändern wir nur das Attribut http.agent.name , und die anderen werden keine Änderungen vorgenommen.
Zu diesem Zeitpunkt haben wir Nutsch konfiguriert und dann den Quellcode mit dem folgenden Befehl im Nutch Home -Verzeichnis kompilieren.
Wechseln Sie in das Nutch Home -Verzeichnis, um auszuführen:
ant
Der erste Zusammenstellungsprozess dauert viel Zeit, da mehr Abhängigkeitspakete heruntergeladen werden müssen. Die spezifische Zeit hängt von der tatsächlichen Netzwerksituation ab. Es dauert 5-10 Minuten, wenn es schnell ist, und mehr als 20 Minuten, wenn es langsam ist.
Die folgende Warnung wird zu Beginn der Zusammenstellung gemeldet:
Konnte Definitionen nicht aus Ressourcen org/Sonar/Ant/Antlib.xml laden. Es konnte nicht gefunden werden.
Diese Warnung wirkt sich nicht auf das Kompilierungsergebnis aus und kann ignoriert werden.
Während des Zusammenstellungsprozesses kann es auch ein Netzwerkproblem geben. Sie müssen nur den folgenden Befehl verwenden, um das letzte Kompilierungsergebnis zu löschen (das bereits heruntergeladene Abhängigkeitspaket wird nicht gelöscht):
ant clean
Bei schlechtem Netzwerk können die beiden oben genannten Schritte mehrmals wiederholt werden.
Wenn ähnliche Informationen angezeigt werden, bedeutet dies, dass die Zusammenstellung erfolgreich ist:
Erfolgreich aufbauen
Gesamtzeit: 1 Minute 7 Sekunden
Wie in der Abbildung unten gezeigt:
Nachdem Nutch erfolgreich zusammengestellt wurde, wird im Heimverzeichnis ein Laufzeitordner generiert. Es enthält zwei Bereitsteller und lokale Unterordner. Der Einsatz wird zum verteilten Krabbeln verwendet, während lokal für lokales eigenständiges Krabbeln verwendet wird. In diesem Abschnitt wird zunächst die Verwendung lokaler eigenständiger Kriechung erläutert, und das verteilte Krabbeln wird in das nachfolgende Tutorial platziert.
Geben Sie den lokalen Ordner ein und geben Sie dann den Mülleimerordner ein. Es gibt zwei Skriptdateien, einer ist Nutch und der andere kriecht. Unter ihnen enthält Nutsch alle erforderlichen Befehle, und Crawl wird hauptsächlich für eine Stop-Crawl verwendet.
Wie in der Abbildung unten gezeigt:
unzip solr-4.10.4.zip
Holen Sie sich den Ordner Solr-4.10.4, kopieren Sie die Laufzeit/Lokal/Conf/Schema-Solr4.xml im Nutsch-Verzeichnis in das Verzeichnis der Konfigurationsdatei von Solr unter Beispiel/Solr/Collection1/Conf:
cp apache-nutch-1.10/runtime/local/conf/schema-solr4.xml solr-4.10.4/example/solr/collection1/conf
Löschen Sie die ursprüngliche Schema.xml -Datei von Solr:
rm –f solr-4.10.4/example/solr/collection1/conf/schema.xml
Und kommentieren Sie das Schema-Solr4.xml
<copyField source="latLon" dest="location"/>
Schema-Solr4.xml in schema.xml umbenennen:
mv solr-4.10.4/example/solr/collection1/conf/ schema-solr4.xml solr-4.10.4/example/solr/collection1/conf/ schema.xml
Zu diesem Zeitpunkt ist SolR konfiguriert und geben Sie das ELR-4.10.4/Beispiel-Verzeichnis ein:
cd solr-4.10.4/example
Solr starten:
Zu diesem Zeitpunkt können Sie über den Browser auf Port 8983 zugreifen und die Steuerschnittstelle von Solr anzeigen:
http: // localhost: 8983/Solr
Geben Sie das Nutch Home -Verzeichnis ein, die die meisten Befehle, die wir im Nutch Home -Verzeichnis ausführen, und nicht im Nutch -Bin -Verzeichnis, da dies einige komplexe Befehle bequemer ausführen kann. Schauen Sie sich den One-Stop-Crawling-Befehl an:
bin/crawl
bin/nutch
Die Eingabe der beiden oben genannten Befehle zeigt ihre jeweiligen Verwendungsmethoden. Einige häufig verwendete Befehle werden später im Detail erläutert, wie in der folgenden Abbildung gezeigt:
Überprüfen Sie, wie Sie Crawl verwenden:
-I | Index wird verwendet, um Nutch zu sagen, dass er dem konfigurierten Indexer das krabbelende Ergebnis hinzufügen soll.
-D wird verwendet, um die an den Nutch -Aufruf übergebenen Parameter zu konfigurieren. Wir können den Indexer hier konfigurieren.
Saatgut -Samen -Dateiverzeichnis, das zum Speichern von Samen -URL verwendet wird, dh der URL, die der Crawler anfänglich krabbelt.
Crawl Dir -Speicherpfad für Datenkriechen.
Num -Runden -Schleifen krabbeln.
Beispiel der Nutzung:
Geben Sie die Laufzeit/das lokale Verzeichnis von Nutsch ein und erstellen Sie einen neuen URLS -Ordner:
Erstellen Sie eine neue Saatgut -Datei, die URLs im URLS -Ordner Seed.txt speichert
Fügen Sie die anfängliche Crawl -URL zu URLs/Seed.txt hinzu: http://www.163.com
Schalten Sie den Solr -Dienst ein, andernfalls kann der Index nicht normal in Solr festgelegt werden
bin/crawl -i -D solr.server.url=http://localhost:8983/solr/ urls/ TestCrawl/ 2
In diesem Befehl fordere ich dem Crawler an, den Crawler dem angegebenen Index hinzuzufügen. Solr.server.url = http: // localhost: 8983/Solr/ist die Adresse des Solr -Indexer, URLs/ist der Saatgut -URL -Dateipfad, und Testcrawl ist der Ordner, der von Nutsch zum Speichern von Crawler -Daten (einschließlich URL, Krabbeln, Inhalt usw.) verwendet wird. Parameter 2 hier bedeutet, dass Schleifen zweimal kriecht.
Durch die Ausführung des obigen Befehls können Sie auf der Webseite mit dem Krabbeln beginnen. Geben Sie http: //: 8983/Solr in den Browser ein, wählen Sie Collection1 aus, und Sie können über Schlüsselwörter nach dem indizierten Inhalt suchen. Es ist hier zu beachten, dass der Crawler nicht alle Seiten der angegebenen URL gekrabbt hat. Die spezifische Methode zum Betrachten der Kriechungssituation finden Sie im folgenden verteilten Kriechen.
Nachdem das Kriechen erfolgreich ist, ist die folgende Abbildung in der folgenden Abbildung dargestellt:
Manchmal kann One-Stop-Crawlen unsere Bedürfnisse nicht gut erfüllen. Daher werde ich hier die Methode des verteilten Crawlen einführen: Der tatsächliche Crawl -Prozess von verteiltem Crawl enthält mehrere Befehle. Um den Vorgängen zu vereinfachen, kombiniert Crawl mehrere Befehle miteinander und bietet sie den Benutzern. Wenn Sie die Nutch -Crawler -Technologie eingehend lernen möchten, reicht es nicht aus, nur den Crawl -Befehl zu verwenden. Sie müssen auch mit dem Crawl -Prozess sehr vertraut sein. Hier müssen Sie die in Seed.txt gespeicherten URL -Informationen im vorherigen Tutorial verwenden. Sie müssen auch den Inhalt unter den Ordnern Data/CRAWLDB-, Data/LinkDB- und Daten-/Segmente löschen, da wir die Daten in Schritten neu erstellen müssen.
Nach der Ausführung des CRABL -Befehls wird ein Testcrawl -Ordner unter Laufzeit/Lokal von Nutsch erzeugt, das drei Ordner enthält: CRAWLDB, LINKDB und Segmente.
CRAWLDB: Es enthält alle von Nutch gefundenen URLs, die Informationen darüber enthält, ob die URL gekrabbelt wurde und wann sie gekrabbt wurde.
LINKDB: Es enthält alle Links, die der URL in CRAWLDB entsprechen, die von Nutch entdeckt wurden, sowie den Quell -URL- und Ankertext.
Segmente: Es enthält mehrere Segmentordner, die nach der Zeit benannt sind. Jedes Segment ist eine Kriecheinheit, die eine Reihe von URLs enthält, und jedes Segment enthält die folgenden Ordner:
crawl_generate:待抓取的URL
crawl_fetch:每个URL的抓取状态
content:从每个URL抓取到的原始内容
parse_text:从每个URL解析得到的文本
parse_data:从每个URL解析得到的外链和元数据
crawl_parse:包含外链URL,用来更新crawldb
bin/nutch inject data/crawldb urls
Um die Seite mit der angegebenen URL zu kriechen, müssen wir eine Crawl -Liste aus der Datenbank (CRAWLDB) erstellen:
bin/nutch generate data/crawldb data/segments
Nachdem der Befehl generieren ausgeführt wurde, wird eine Liste der zu krocheten Seiten generiert, und die Crawling -Liste wird in einem neu erstellten Segmentpfad gespeichert. Der Ordner des Segments ist gemäß der Zeit, in der es erstellt wurde, benannt (der Ordnername dieses Tutorials ist 201507151245).
Es gibt viele optionale Parameter für die Erzeugung. Leser können sie selbst über die folgenden Befehle selbst anzeigen (dasselbe gilt für andere Befehle):
bin/nutch generate
Kriechen Sie die Webseite gemäß der CRABS -Liste, die von generiert erstellt wurde:
bin/nutch fetch data/segments/201507151245 #这里的201507151245为文件夹名,需要根据自己的情况进行更改,或者直接采用data/segments文件夹,这样的操作对segments文件夹下的所有子文件夹生效,后文同理。
bin/nutch parse data/segments/201507151245
Aktualisieren Sie die Datenbank basierend auf den gekrabbten Ergebnissen:
bin/nutch updated data/crawldb –dir data/segments/201507151245
Die Datenbank enthält jetzt alle Einstiegspunkte, nachdem die Anfangsseite aktualisiert wurde, sowie neue Einstiegspunkte für neu entdeckte Seiten aus der ersten Sammlung.
Bevor wir einen Index erstellen, umgeben wir zunächst alle Links, damit wir den Quellankertext der Seite indexieren können.
bin/nutch invertlinks data/linkdb –dir data/segments/201507151245
Starten Sie den Solr -Service und neigen jetzt die gekrabbten Ressourcen:
bin/nutch index data/crawldb -linkdb data/linkdb -params solr.server.url=http://localhost:8983/solr -dir data/segments/201507151245
Sobald der vollständige Textindex festgelegt ist, muss er doppelte URLs verarbeiten, damit die URL eindeutig ist:
bin/nutch dedup
Dieser Befehl sucht nach doppelten URLs, die auf Signaturen basieren. Für doppelte URLs, die als status_db_duplicate gekennzeichnet sind, löschen die Reinigungs- und Indexierungsaufgaben sie gemäß dem Tag.
bin/nutch clean –D solr.server.url=http://192.168.1.11:8983/solr data/crawldb
Entfernen Sie HTTP301, 404 und doppelten Dokumente von Solr.
Bisher haben wir alle Kriechschritte mit schrittweisen Krabbeln durchgeführt. Unter normalem Krabbeln können wir unter http: // localhost: 8983/solr suchen.
Wird zum Lesen oder Exportieren von Nutchs Crawling -Datenbank verwendet oder verwendet, um die Statusinformationen der Datenbank anzuzeigen und die Verwendung von ReadDB anzuzeigen:
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.
Hier ist CRAWLDB die Datenbank, die URL -Informationen speichert. -Stats bedeutet, statistische Statusinformationen anzusehen, -dump bedeutet, statistische Informationen zu exportieren, URL bedeutet, Informationen zur angegebenen URL anzuzeigen und Datenbankstatusinformationen anzeigen:
Die erhaltenen statistischen Ergebnisse sind wie folgt:
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
Die Gesamt -URLs repräsentieren die Gesamtzahl der URLs. Wiederholung repräsentiert die Anzahl der Wiederholungszeiten, die Mins -Punktzahl ist die niedrigste Punktzahl, die maximale Punktzahl ist die höchste Punktzahl, der Status 1 (db_Unteded) ist die Zahl der nicht gekrabbeln und der Status 2 (db_fughed) ist die Anzahl der Krable.
ReadLinkDB wird verwendet, um alle URLs und Ankertext zu exportieren, Nutzung anzeigen:
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
Die Dump- und URL -Parameter hier entsprechen dem Befehl readdb und exportieren Daten:
bin/nutch readlinkdb data/linkdb -dump linkdb_dump
Importieren Sie die Daten in den Ordner LinkDB_Dump und anzeigen Sie die exportierten Dateninformationen an:
cat linkdb_dump /*
Sie können sehen, dass die exportierten Informationen dem folgenden Format ähnlich sind:
fromUrl: http://www.sanesee.com/article/step-by-step-nutch-introduction anchor: http://archive.apache.org/dist/nutch/
Das heißt, die Quell -URL wird aufgezeichnet.
Readseg wird verwendet, um die Daten in Segment anzuzeigen und zu exportieren und zu sehen: Ansichtsnutzung:
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.
Segmentdaten für Exportieren:
bin/nutch readseg -dump data/segments/20150715124521 segment_dump
Importieren Sie die Daten in den Ordner segment_dump, um die exportierten Dateninformationen anzuzeigen:
cat segment_dump /*
Sie können sehen, dass es sehr bestimmte Webseiteninformationen enthält.
Sie können WAMP/MAMP oder PHPSTORM und seinen integrierten Server verwenden.
Informationen zu bestimmten Vorgängen finden Sie unter: Portal
Öffnen Sie das Terminal und wechseln Sie zu Ihrem Projektpfad:
composer require silex/silex twig/twig thiagoalessio/tesseract_ocr:dev-master Da wir das Mini Framework Silex Framework von PHP verwenden, müssen wir die Struktur des PHP -Quell -Engineering -Projekts MVC (öffentlich, Uploads, Ansichten) festlegen, wie in der Abbildung gezeigt:
<?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 );** Interaktionsprozess: **
1) Benutzer geben die Homepage -Website -URL ein, geben Sie die Homepage ein, genießen Sie den Service und erfahren Sie mehr über Servicedetails.
2) Der Benutzer lädt die erforderlichen Suchbilder über das Suchfeld und Vorschau vor dem Hochladen hoch.
3) Nachdem der Benutzer bestätigt hat, dass das hochgeladene Bild korrekt ist, klicken Sie auf die Schaltfläche Bildsuche, um das Bild hochzuladen und zu identifizieren. Da dieser Teil der Serverseite eine große Berechnung aufweist, dauert er 2-5 Sekunden, bis das Ergebnis zurückgegeben wird. Daher wird dem Benutzer eine Ladeseite angezeigt.
4) Die Bilderkennung ist abgeschlossen, die Ladeseite verschwindet und die Bestätigungsseite für Erkennungsergebnisse wird eingegeben.
5) Nachdem der Benutzer den Inhalt bestätigt hat, kann er auf die Suche klicken, um das Suchmaschinenmodul einzugeben, um die Suchergebnisse zu erhalten.
Das visuelle Design nimmt eine äußerst wichtige Komponente in der Produktzusammensetzung ein, die den ersten Eindruck des Produkts, die Erfahrung während des Gebrauchs und den endgültigen Eindruck links usw. direkt beeinflusst. Auch in vielen Fällen hängt der Erfolg oder das Versagen eines Produkts häufig von einer erfolgreichen Erfahrung des visuellen Designs ab. Für dieses Design betrachtete ich es nicht als ein System, das mit Dingen umgehen kann, sondern als Produkt, das ich sorgfältig erstellt habe. Daher schenke ich dem Front-End-visuellen Design und Benutzererlebnis dieses Systems sehr aufmerksam. Um Farben auf der gesamten Website auszuwählen, habe ich die Baidu -Suchmaschinen -Themenfarben ausgewählt, die von der Öffentlichkeit, Rot und Blau stärker erkannt werden. Der Homepage -Hintergrund verwendet rote und blaue Übergangsfarben und passt die Transparenz an. Es wird durch den CSS -Code gezogen, der die Ladezeit spart und den Benutzern eine gute visuelle Wirkung gibt. Gleichzeitig wurde die Textbeschreibung der Startseite zum unteren Schatten hinzugefügt und verwendet Microsoft Thin Black -Schriftarten, um das visuelle Gefühl mehr geschichtet zu machen. Das Bild -Suchfeld und das Vorschau -Feld erhöhen auch den Schatten, und es werden unterschiedliche Farben und Chromatizitätsunterschiede für die Bedeutung des Vorschau -Feldes durchgeführt. Dadurch wird der Benutzer visuell erfrischt und prägnant und die Informationen, die Sie benötigen, so schnell wie möglich finden. Dann wird es eine einfache Ladeseite durchlaufen. Hier wird ein Wartekreis gemacht, um ein- und auszurüsten, damit sich der Benutzer von der Wartezeit nicht irritiert fühlt. Gleichzeitig teilt es dem Benutzer mit, dass der Systemhintergrund Berechnungen und ausgeführt wird. Wenn Sie auf die Seite zur Erkennungsergebnis springen, werden alle Textfarben und Schriftgrößen nach der Bedeutung der Kopie weiterhin visuell angepasst, sodass der Benutzer nicht zu viel Zeit damit verbringen muss, wichtige Informationen herauszufiltern. Die Planung und Farbauswahl der beiden Schaltflächen erhöhen auch das Verlangen und das Klicken und veranlassen den Benutzer, den nächsten Vorgang auszuführen. Für die Seite der endgültigen Suchergebnisse habe ich es in ein Kapitel gestaltet, das einem Buch ähnelt. Jede Liste verfügt über unterschiedliche Planungs- und Schriftgrößen Farbanpassungen basierend auf dem Webseiten -Titel der Suchergebnisse, der Webseitenübersicht, der Einschlusszeit, des Gewichts, zur Steigerung der visuellen Auswirkungen und Erkennung. Dadurch haben die Benutzer das Gefühl, dass sie einige Gemeinsamkeiten mit Massensuchmaschinen haben, aber sie enthüllen einige ihrer eigenen Persönlichkeiten, bieten den Benutzern eine vertraute und neuartige Erfahrung und behalten auch die Eigenschaften von erfrischenden und ad-freien und unnötigen Interferenzinformationen bei. Darüber hinaus kombinieren alle visuellen Designs das aktuelle Reaktionsdesignkonzept und haben eine gute Benutzererfahrung und visuelle Auswirkungen auf PC und Mobile.
** Vorlage Schreiben mit Twig: **
Das Front-End-Erlebnis ist in der folgenden Abbildung dargestellt:
Es basiert hauptsächlich auf Bootstrap 3.4 und kann mit XDK/Telefonlap verpackt und in die entsprechende NA -App zusammengestellt und auf dem Anwendungsmarkt veröffentlicht werden. Die mobile Erfahrung ist in der folgenden Abbildung dargestellt:
Vielen Dank an alle Lehrer und alle Klassenkameraden, die mir in den vier Jahren des College geholfen haben. Sie haben mir professionelles Wissen beigebracht. In den letzten vier Jahren des Studiums und der wissenschaftlichen Forschung hat meine Wissensstruktur und die wissenschaftlichen Forschungsfähigkeit nicht nur ein neues Niveau erreicht, sondern vor allem in die Gesellschaft integriert und habe mir eine vollständige Praktikumserfahrung erhalten, damit ich viele Arbeitserfahrungen für Internetunternehmen erleben kann, die Doktoranden in meinem Studium nicht erleben können. Im Handumdrehen gehen vier Jahre College ein Ende. Als ich diese Abschlussarbeit mit einer nervösen Stimmung abgeschlossen habe, wechselte ich auch von einem unwissenden Kind zu einem reifen jungen Mann. Das gleiche - nur Schweiß wird dich nicht täuschen. Zum Schluss danke der University of Electronic Science and Technology, allen, die ich an der Universität getroffen habe, und danken Sie mir für meine vier Jahre harte Arbeit.
https://github.com/daijiale/ocr_fontssearchEngine.
http://v.youku.com/v_show/id_xmtyzndy2ndyxng==.html.