Il s'agit d'un blog technique lié à la technologie OCR de reconnaissance d'image, à l'apprentissage automatique et à la construction de moteurs de recherche simple. C'est là que je continue d'enregistrer les résultats de la recherche et les expériences chaque jour tout en faisant le projet de remise des diplômes.
La technologie OCR (Optical Character Reconntion) fait référence au processus dans lequel les appareils électroniques (tels que les scanners ou les caméras numériques) vérifient les caractères imprimés sur papier, déterminent leurs formes en détectant des motifs sombres et lumineux, puis traduire les formes en texte de l'ordinateur en utilisant des méthodes de reconnaissance des caractères.
Le moteur OCR de Tesseract a été développé pour la première fois par HP Labs en 1985 et, en 1995, il était devenu l'un des trois moteurs d'identification les plus précis de l'industrie OCR. Cependant, HP a rapidement décidé de renoncer à ses activités d'OCR, et Tesseract a également été gardé en vain. Plusieurs années plus tard, HP a réalisé qu'au lieu de mettre Tesseract sur l'étagère, il serait préférable de contribuer à l'industrie des logiciels open source et de le rajeunir - en 2005, Tesseract a été obtenu par l'Institut du Nevada des technologies de l'information aux États-Unis et a cherché à améliorer, à éliminer les bogues et à optimiser Tesseract de Google. Tesseract a été publié en tant que projet open source sur Google Project, et sa dernière version 3.0 prend déjà en charge l'OCR chinois.
Dans une technologie aussi mature, je veux vraiment utiliser cette technologie OCR et la combiner avec la technologie de développement Internet mobile populaire actuelle et la technologie de récupération d'informations pour réaliser un moteur de recherche Web mobile qui peut identifier avec succès les caractères chinois de l'image, visant à obtenir les informations que vous souhaitez des images plus rapidement et avec précision.
Avec le développement rapide d'Internet et l'arrivée des mégadonnées, les gens dépendent de plus en plus des données et des informations. Cependant, les données Internet d'aujourd'hui sont très importantes, et il y a toujours eu de grands problèmes avec l'exactitude des données et la classification raisonnable des données. Compte tenu de cette situation, de plus en plus de gens espèrent trouver un moyen plus pratique d'obtenir des données précises dans le travail quotidien et la vie, et trouver le moyen de trouver les informations qu'ils recherchent plus efficacement. Dans le même temps, avec la popularité des smartphones, de plus en plus de personnes sont plus habituées à utiliser des méthodes extrêmement efficaces telles que la prise de photos pour remplacer les méthodes de copie et de saisie précédentes pour enregistrer des données qui doivent être enregistrées dans la vie et le travail. Inspiré par cela, je veux utiliser la technologie OCR (reconnaissance des caractères optiques) plus mature à l'heure actuelle, ainsi que la technologie de développement Internet populaire actuelle et la technologie de récupération de l'information pour réaliser un moteur de recherche Web qui peut reconnaître avec succès les polices en langage d'image. Il vise à rechercher plus d'amis à partir de photos plus rapidement et avec précision grâce à des méthodes pratiques telles que prendre des photos et des captures d'écran.
L'architecture backend est principalement divisée en trois modules principaux: module OCR, module de moteur de recherche et module de middleware Message PHP.
``` 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.
```
dans:
tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...] Indique tesseract 图片名输出文件名-l 字库文件-psm pagesegmode 配置文件.
Par exemple: tesseract code.jpg result -l chi_sim -psm 7 nobatch
-l chi_sim signifie utiliser la bibliothèque de polices chinoises simplifiée (vous devez télécharger le fichier de bibliothèque de polices chinoises, la décompresser et la stocker dans le répertoire tessdata . L'extension de fichier de police est .raineddata Nom du fichier de bibliothèque de police chinoise simplifiée: chi_sim.traineddata ).-psm 7 signifie dire à Tesseract code.jpg que l'image est une ligne de texte. Ce paramètre peut réduire le taux d'erreur de reconnaissance. La valeur par défaut est 3 .** Test de police en anglais: **
** Test de police chinois: **
Maintenant, construisons la bibliothèque de langues de police et la formation des données d'échantillons de langue de police
**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).
Wiki officiel
Conseils chinois
Sur Mac, utilisez des projecteurs pour permettre le terminal
vi /etc/profile
À l'heure actuelle, appuyez sur la lettre I sur le clavier pour entrer le mode d'édition et entrez les deux lignes de commande suivantes sous le terminal:
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
Ensuite, appuyez sur ESC pour terminer l'édition, puis entrez: WQ! Sortie
source /etc/profile
java -version
Si les informations de la version Java apparaissent, cela prouve que l'installation est réussie!
Introduction: Lorsqu'un projet de code devient grand, chaque fois qu'il est recompilé, emballé, testé, etc. devient très compliqué et répétitif. Par conséquent, il y a des scripts dans le langage C pour aider à effectuer ces tâches par lots. Les applications en Java sont indépendantes de la plate-forme, et bien sûr, elles n'utiliseront pas les scripts liés à la plate-forme pour effectuer ces tâches par lots. Ant lui-même est un tel moteur de script de processus, qui est utilisé pour automatiser le programme d'appel pour compléter la compilation, l'emballage, les tests de projets, etc. En plus d'être indépendant de la plate-forme basé sur Java, le format de script est basé sur XML, qui est plus facile à maintenir que de faire des scripts.
Sélection de version: apache-Ant-1.9.6-Bin.zip
Adresse de téléchargement: site officiel de la fourmi
Démarrer l'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
À l'heure actuelle, appuyez sur la lettre I sur le clavier pour entrer le mode d'édition et entrez les deux lignes de commande suivantes sous le terminal:
export ANT_HOME=/usr/local/ant
export PATH=${PATH}:${ANT_HOME}/bin
Ensuite, appuyez sur ESC pour terminer l'édition, puis entrez: WQ! Sortie
source /etc/profile
ant -version
Apache Ant (TM) version 1.9.6 compilée sur apparaît ... Cet affichage prouve que l'installation est réussie!
Introduction: Actuellement, Nutch est divisé en deux grandes versions 1.x et 2.x. Apache développe et maintient indépendamment ces deux grandes versions. Parmi eux, la plus grande différence entre 1.x et 2.x est que 1.x est basé sur le système de fichiers HDFS de Hadoop, tandis que 2.x résume la couche de stockage de données et peut enregistrer les données dans des bases de données telles que HBase et MySQL. Une autre chose importante est que Nutch a été libéré en tant que moteur de recherche complet en 1.2 et avant. Depuis 1,3, Nutch lui-même n'a principalement que des fonctions rampantes. S'il est nécessaire d'indexer et de rechercher les données rampantes, il est également nécessaire d'utiliser le serveur de recherche en texte intégral SOLR. Étant donné que Nutch et Solr sont développés sur la base de Lucene, les données rampées par Nutch peuvent être facilement indexées dans SOLR. Le site officiel de Nutch peut télécharger le package 1.x compilé, mais 2.x fournit uniquement le code source et doit être compilé par vous-même. Nutch est construit à l'aide de la fourmi. Si vous le compilez vous-même, vous devez installer Ant pour compiler le code source. En ce qui concerne la façon de choisir la version Nutch, nous considérons principalement les problèmes suivants: si vous n'avez besoin que de faire un petit nombre de sites Web et de les indexer, vous pouvez utiliser 1.x et 2.x, et vous pouvez même utiliser autonome sans avoir besoin de ceux distribués. Mais si vous souhaitez explorer un grand nombre de sites Web, ou même ramper le Web entier, il est préférable de choisir 1.x et d'utiliser distribué, car 1.x est basé sur le système de fichiers Hadoop, qui a été créé spécifiquement pour le traitement du Big Data. Si vous utilisez 2.x lorsque vous rampez un grand nombre de sites Web, vous pouvez rencontrer des problèmes de performances. Si vous utilisez MySQL pour stocker les données, les performances seront un cauchemar lorsque les données de la page Web dépassent les dizaines de milliards. Différentes versions de Nutch1.x ont également beaucoup changé et l'exécution des commandes a subi des changements majeurs. Par conséquent, il est recommandé de télécharger les débutants de la version 1.10 correspondante de ce tutoriel. Lorsque vous connaissez l'utilisation de Nutch, ces changements n'auront pas beaucoup d'impact sur vous. Nutch est l'un des robots open source les plus populaires aujourd'hui et a été largement utilisé par les entreprises. Le mécanisme du plug-in de Nutch permet aux développeurs de personnaliser de manière flexible les stratégies de rampe Web. Nutch a une longue histoire, et le célèbre Hadoop a été développé à partir de Nutch. Nutch peut non seulement s'exécuter en mode autonome, mais aussi en mode distribué. Nutch ne prend en charge que le travail dans les environnements Linux, il peut donc être utilisé directement sous OS X. de type Linux.
Sélection de version: apache-nutch-1.10-src.zip
Adresse de téléchargement: site officiel de Nutch
Démarrer l'installation:
unzip apache-nutch-1.10-src.zip
cd apache-nutch-1.10
vi conf/nutch-default.xml
Recherchez l'attribut http.agent.name, copiez-le dans conf / nutch-site.xml et modifiez la valeur de valeur pour ne pas être vide. Voici une personnalisation AS: HD Nutch Agent, puis continuer à ramper la commande signalera une erreur. Le Nutch-site.xml modifié est le suivant:
<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>
L'attribut http.agent.name est utilisé pour marquer des Crawlers, afin que le site Web rampé puisse les identifier.
Les propriétés configurées dans nutch-site.xml remplaceront les propriétés par défaut dans nutch-default . Ici, nous modifions uniquement l'attribut http.agent.name , et aucune modification ne sera apportée aux autres.
À ce stade, nous avons configuré Nutch, puis compiler le code source à l'aide de la commande suivante dans le répertoire Home Nutch.
Passez au répertoire de la maison Nutch pour exécuter:
ant
Le premier processus de compilation prendra beaucoup de temps car davantage de packages de dépendances doivent être téléchargés. Le temps spécifique dépend de la situation réelle du réseau. Cela prend 5 à 10 minutes s'il est rapide et plus de 20 minutes s'il est lent.
L'avertissement suivant sera signalé au début de la compilation:
Impossible de charger les définitions de Resource Org / Sonar / Ant / antlib.xml. Il n'a pas pu être trouvé.
Cet avertissement n'affecte pas le résultat de la compilation et peut être ignoré.
Il peut également y avoir un problème de réseau pendant le processus de compilation. Il vous suffit d'utiliser la commande suivante pour effacer le dernier résultat de compilation (le package de dépendance déjà téléchargé ne sera pas supprimé):
ant clean
Dans le cas d'un réseau médiocre, les deux étapes ci-dessus peuvent être répétées plusieurs fois.
Lorsque des informations similaires apparaissent, cela signifie que la compilation est réussie:
Réussir à réussir
Temps total: 1 minute 7 secondes
Comme indiqué dans la figure ci-dessous:
Une fois que Nutch a été compilé avec succès, un dossier d'exécution sera généré dans le répertoire domestique. Il contient deux sous-dossiers déploiés et locaux. Le déploiement est utilisé pour ramper distribué, tandis que local est utilisé pour la rampe locale autonome. Cette section explique d'abord l'utilisation de la rampe autonome locale et la rampe distribuée est placée dans le tutoriel ultérieur.
Entrez le dossier local, puis entrez le dossier du bac. Il y a deux fichiers de script, l'un est Nutch et l'autre craw. Parmi eux, Nutch contient toutes les commandes requises et la rampe est principalement utilisée pour une rampe à guichet unique.
Comme indiqué dans la figure ci-dessous:
unzip solr-4.10.4.zip
Obtenez le dossier SOLR-4.10.4, copiez le runtime / local / conf / schema-solr4.xml dans le répertoire Nutch dans le répertoire de fichier de configuration de SOLR sous Example / Solr / Collection1 / conf:
cp apache-nutch-1.10/runtime/local/conf/schema-solr4.xml solr-4.10.4/example/solr/collection1/conf
Supprimer le fichier schema.xml d'origine de SOLR:
rm –f solr-4.10.4/example/solr/collection1/conf/schema.xml
Et commentez le schéma-solr4.xml
<copyField source="latLon" dest="location"/>
Renommer 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
À ce stade, SOLR est configuré et entrez le répertoire SOLR-4.10.4 / Exemple:
cd solr-4.10.4/example
Démarrer Solr:
À l'heure actuelle, vous pouvez accéder au port 8983 via le navigateur et afficher l'interface de contrôle de Solr:
http: // localhost: 8983 / solr
Entrez dans le répertoire de la maison Nutch, la plupart des commandes que nous exécutons dans le répertoire Home Nutch, plutôt que dans le répertoire de bac Nutch, car cela peut exécuter plus facilement certaines commandes complexes. Découvrez la commande rampante à guichet unique:
bin/crawl
bin/nutch
La saisie des deux commandes ci-dessus montre leurs méthodes d'utilisation respectives. Quelques commandes couramment utilisées seront expliquées en détail plus tard, comme indiqué dans la figure ci-dessous:
Vérifiez comment utiliser Crawl:
-I | L'index est utilisé pour dire à Nutch d'ajouter le résultat rampé à l'indexeur configuré.
-D est utilisé pour configurer les paramètres transmis à l'appel Nutch, nous pouvons configurer l'indexeur ici.
Répertoire des fichiers de semences de semences, utilisé pour stocker l'URL des semences, c'est-à-dire l'URL que le robot rampe initialement.
Crawl Dir Storage Chemin pour les données rampant.
Num Rounds Loop Crawls.
Exemple d'utilisation:
Entrez le répertoire d'exécution / local de Nutch et créez un nouveau dossier URL:
Créez un nouveau fichier de semence qui stocke les URL dans le dossier URL, seed.txt
Ajoutez l'URL de crawl initiale à URL / Seed.txt: http://www.163.com
Allumez le service SOLR, sinon l'indice ne peut pas être établi normalement dans SOLR
bin/crawl -i -D solr.server.url=http://localhost:8983/solr/ urls/ TestCrawl/ 2
Dans cette commande, -i dit au robot d'ajout d'ajouter le robot à l'indice donné. solr.server.url = http: // localhost: 8983 / solr / est l'adresse de l'indexer SOLR, URLS / est le chemin du fichier d'URL de semence, et TestCrawl est le dossier utilisé par Nutch pour stocker les données du robot (y compris URL, contenu rampé, etc.). Le paramètre 2 signifie ici la boucle ramper deux fois.
En exécutant la commande ci-dessus, vous pouvez commencer à ramper la page Web. Entrez http: //: 8983 / solr dans le navigateur, sélectionnez Collection1 et vous pouvez rechercher le contenu indexé via des mots clés. Il convient de noter ici que le Crawler n'a pas rampé toutes les pages de l'URL spécifiée. Pour la méthode spécifique de visualisation de la situation rampante, veuillez vous référer à la rampe distribuée ci-dessous.
Une fois le rampage qui a réussi, le chiffre suivant est illustré dans la figure suivante:
Parfois, la rampe à guichet unique ne peut pas bien répondre à nos besoins. Par conséquent, ici, je présenterai la méthode de rampe distribuée: le processus de rampe réel de rampe distribuée contient plusieurs commandes. Afin de simplifier les opérations, Crawl combine plusieurs commandes et les fournit aux utilisateurs. Si vous voulez apprendre en profondeur la technologie du robot de nutch, il ne suffit pas d'utiliser simplement la commande Crawl. Vous devez également être très familier avec le processus de rampe. Ici, vous devez utiliser les informations URL enregistrées dans Seed.txt dans le tutoriel précédent. Vous devez également supprimer le contenu sous les dossiers Data / CrawldB, Data / LinkDB et Data / Segments, car nous devons recrraquer les données en étapes.
Après avoir exécuté la commande Crawl, un dossier TestCrawl sera généré sous l'exécution / local de Nutch, qui contient trois dossiers: Crawldb, LinkDB et segments.
Crawldb: Il contient toutes les URL trouvées par Nutch, qui contient des informations sur la question de savoir si l'URL a été rampée et quand elle a été rampée.
LinkDB: il contient tous les liens correspondant à l'URL de Crawldb découvert par Nutch, ainsi que l'URL source et le texte d'ancrage.
Segments: il contient plusieurs dossiers de segments nommés après le temps. Chaque segment est une unité rampante, contenant une série d'URL, et chaque segment contient les dossiers suivants:
crawl_generate:待抓取的URL
crawl_fetch:每个URL的抓取状态
content:从每个URL抓取到的原始内容
parse_text:从每个URL解析得到的文本
parse_data:从每个URL解析得到的外链和元数据
crawl_parse:包含外链URL,用来更新crawldb
bin/nutch inject data/crawldb urls
Afin de ramper la page avec l'URL spécifiée, nous devons générer une liste d'exploration à partir de la base de données (Crawldb):
bin/nutch generate data/crawldb data/segments
Une fois la commande générée exécutée, une liste de pages à ramper sera générée et la liste rampante sera stockée dans un chemin de segment nouvellement créé. Le dossier du segment est nommé selon le moment où il a été créé (le nom du dossier de ce tutoriel est 201507151245).
Il existe de nombreux paramètres facultatifs à générer, les lecteurs peuvent les visualiser par eux-mêmes via les commandes suivantes (il en va de même pour les autres commandes):
bin/nutch generate
Crawl la page Web selon la liste des champs générés par Generate:
bin/nutch fetch data/segments/201507151245 #这里的201507151245为文件夹名,需要根据自己的情况进行更改,或者直接采用data/segments文件夹,这样的操作对segments文件夹下的所有子文件夹生效,后文同理。
bin/nutch parse data/segments/201507151245
Mettez à jour la base de données en fonction des résultats rampants:
bin/nutch updated data/crawldb –dir data/segments/201507151245
La base de données contient désormais tous les points d'entrée après la mise à jour de la page initiale, ainsi que de nouveaux points d'entrée pour les pages nouvellement découvertes de la collection initiale.
Avant de créer un index, nous inversons d'abord tous les liens afin que nous puissions indexer le texte d'ancrage source de la page.
bin/nutch invertlinks data/linkdb –dir data/segments/201507151245
Démarrez le service Solr, et maintenant nous indexons les ressources rampantes:
bin/nutch index data/crawldb -linkdb data/linkdb -params solr.server.url=http://localhost:8983/solr -dir data/segments/201507151245
Une fois l'indice de texte intégral établi, il doit traiter les URL en double afin que l'URL soit unique:
bin/nutch dedup
Cette commande recherche des URL en double basées sur des signatures. Pour les URL en double marquées en statut_db_duplicate, les tâches de nettoyage et d'indexation les supprimeront en fonction de la balise.
bin/nutch clean –D solr.server.url=http://192.168.1.11:8983/solr data/crawldb
Retirez les documents HTTP301, 404 et en double de SOLR.
Jusqu'à présent, nous avons terminé toutes les étapes rampantes en utilisant des rampes étape par étape. Sous la rampe normale, nous pouvons rechercher sur http: // localhost: 8983 / solr.
Utilisé pour lire ou exporter la base de données rampante de Nutch, généralement utilisée pour afficher les informations d'état de la base de données et afficher l'utilisation de ReadDB:
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.
Ici, Crawldb est la base de données qui enregistre les informations d'URL. -Les stats désignent la visualisation des informations d'état statistique, -Dump signifie l'exportation d'informations statistiques, l'URL signifie consulter les informations de l'URL spécifiées et affichage des informations d'état de la base de données:
Les résultats statistiques obtenus sont les suivants:
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
Les URL totales représentent le nombre total d'URL, Reprys représente le nombre de temps de réception, le score MINS est le score le plus bas, le score max est le score le plus élevé, le statut 1 (db_unfesched) est le nombre non rampé et le statut 2 (DB_Fesched) est le nombre rampé.
ReadLinkDB est utilisé pour exporter toutes les URL et le texte d'ancrage, afficher l'utilisation:
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
Les paramètres de vidage et d'URL ici sont les mêmes que la commande reddb, exportant des données:
bin/nutch readlinkdb data/linkdb -dump linkdb_dump
Importez les données dans le dossier LinkDB_DUmp et affichez les informations de données exportées:
cat linkdb_dump /*
Vous pouvez voir que les informations exportées sont similaires au format suivant:
fromUrl: http://www.sanesee.com/article/step-by-step-nutch-introduction anchor: http://archive.apache.org/dist/nutch/
C'est-à-dire que l'URL source est enregistrée.
Readeg est utilisé pour afficher ou exporter les données dans le segment et afficher l'utilisation:
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.
Données d'exportation du segment:
bin/nutch readseg -dump data/segments/20150715124521 segment_dump
Importez les données dans le dossier segment_dump pour afficher les informations de données exportées:
cat segment_dump /*
Vous pouvez voir qu'il contient des informations très spécifiques sur la page Web.
Vous pouvez utiliser WAMP / MAMP, ou PhpStorm et son serveur intégré.
Pour des opérations spécifiques, veuillez vous référer à: Portail
Ouvrez le terminal et passez à votre chemin de projet:
composer require silex/silex twig/twig thiagoalessio/tesseract_ocr:dev-master Parce que nous utilisons le Mini Framework Silex Framework de PHP, nous devons établir la structure du PHP Source Engineering Project MVC (public, téléchargement, vues), comme indiqué sur la figure:
<?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 );** Processus d'interaction: **
1) Les utilisateurs entrent dans l'URL du site Web de la page d'accueil, entrez la page d'accueil, profitez du service et découvrez les détails du service.
2) L'utilisateur télécharge les images de recherche requises via la zone de recherche et prévisualise avant le téléchargement.
3) Après que l'utilisateur confirme que l'image téléchargée est correcte, cliquez sur le bouton de recherche d'image pour télécharger et identifier l'image. Étant donné que cette partie du serveur a une grande quantité de calcul, il faut 2 à 5 secondes pour retourner le résultat, donc l'utilisateur est présenté avec une page de chargement.
4) La reconnaissance d'image est terminée, la page de chargement disparaît et la page de confirmation de prévisualisation des résultats de reconnaissance est entrée.
5) Une fois que l'utilisateur a confirmé le contenu de reconnaissance, il peut cliquer sur la recherche pour entrer le module de moteur de recherche pour obtenir les résultats de recherche.
La conception visuelle occupe un composant extrêmement important dans la composition du produit, qui affecte directement l'impression initiale par l'utilisateur du produit, de l'expérience pendant l'utilisation et de l'impression finale, etc. Même dans de nombreux cas, le succès ou l'échec d'un produit dépend souvent d'une expérience de conception visuelle réussie. Pour cette conception, je ne l'ai pas considéré comme un système qui peut gérer les choses, mais comme un produit que j'ai soigneusement créé. Par conséquent, je prête une grande attention à la conception visuelle frontale et à l'expérience utilisateur de ce système. Pour sélectionner les couleurs de l'ensemble du site, j'ai choisi les couleurs du thème du moteur de recherche Baidu qui sont plus reconnues par le public, le rouge et le bleu. L'arrière-plan de la page d'accueil utilise des couleurs de transition rouge et bleu et ajuste la transparence. Il est dessiné via le code CSS, ce qui permet de gagner du temps et donne aux utilisateurs un bon impact visuel. Dans le même temps, la description du texte de la page d'accueil a été ajoutée à l'ombre inférieure et utilise des polices noires minces Microsoft pour rendre le visuel plus superposé. La boîte de recherche d'images et la boîte d'aperçu augmentent également l'ombre, et différentes couleurs et distinction de chromaticité sont faites à l'importance du champ d'aperçu. Il rend l'utilisateur visuellement rafraîchissant et concis, et peut trouver les informations dont vous avez besoin dès que possible. Ensuite, il passera par une page de chargement simple. Ici, un cercle d'attente est fait pour zoomer et sortir, afin que l'utilisateur ne se sente pas irrité par le temps d'attente. Dans le même temps, il indique à l'utilisateur que l'arrière-plan du système effectue des calculs et s'exécute. Lors du saut à la page de résultats de reconnaissance, toutes les couleurs du texte et les tailles de police sont toujours ajustées visuellement en fonction de l'importance de la copie, afin que l'utilisateur n'ait pas à passer trop de temps à filtrer les informations importantes. La planification et la sélection des couleurs des deux boutons ont également tendance à augmenter le désir et le sentiment de clic, incitant l'utilisateur à effectuer la prochaine opération. Pour la page de résultats de recherche finale, je l'ai conçue dans un chapitre similaire à un livre. Chaque liste a des ajustements de couleur de planification et de taille de police différents basés sur le titre de la page Web des résultats de recherche, le résumé de la page Web, le temps d'inclusion, le poids, pour augmenter l'impact visuel et la reconnaissance. Cela fait sentir que les utilisateurs ont des points communs avec les moteurs de recherche de masse, mais ils révèlent certaines de leurs propres personnalités, offrant aux utilisateurs une expérience familière et nouvelle, et conserve également les caractéristiques d'informations d'interférence rafraîchissantes et sans publicité et inutile. De plus, toutes les conceptions visuelles combinent le concept de conception réactif actuel et ont une bonne expérience utilisateur et des effets visuels sur PC et mobile.
** Écriture de modèle à l'aide de brindilles: **
L'expérience frontale est illustrée dans la figure ci-dessous:
Il est principalement basé sur Bootstrap 3.4 et peut être emballé avec XDK / PhoneGap et compilé dans l'application NA correspondante et publié sur le marché des applications. L'expérience mobile est montrée dans la figure ci-dessous:
Merci à tous les enseignants et à tous les camarades de classe qui m'ont aidé au cours des quatre années de collège. Ils m'ont appris des connaissances professionnelles. Au cours des quatre dernières années d'étude et de recherche scientifique, non seulement ma structure de connaissances et ma capacité de recherche scientifique ont atteint un nouveau niveau, mais plus important encore, il s'est intégré à la société et m'a donné une expérience de stage complète, me permettant de vivre de nombreuses expériences de travail sur les entreprises Internet que les étudiants diplômés ne peuvent pas vivre dans mon diplôme de premier cycle. En un clin d'œil, quatre ans de collège se terminent. Lorsque j'ai terminé cette thèse de remise des diplômes avec une humeur nerveuse, j'ai également changé d'un enfant ignorant à un jeune homme mature. La même chose - seule la sueur ne vous trompera pas. Enfin, remerciez l'Université des sciences et technologies électroniques, tous ceux que j'ai rencontrés à l'université et me remerciez pour mes quatre années de travail acharné.
https://github.com/daijiale/ocr_fonttssearchEngine.
http://v.youku.com/v_show/id_xmtyzndy2nddyxng==.html.